File indexing completed on 2025-02-16 13:11:43
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org> 0004 SPDX-FileCopyrightText: 2012 David Faure <faure+bluesystems@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-only 0007 */ 0008 0009 #include "kmessagebox.h" 0010 #include "kmessagebox_p.h" 0011 0012 #include <QCheckBox> 0013 #include <QDialog> 0014 #include <QLabel> 0015 #include <QLayout> 0016 #include <QListWidget> 0017 #include <QPointer> 0018 #include <QPushButton> 0019 #include <QScreen> 0020 #include <QScrollArea> 0021 #include <QScrollBar> 0022 #include <QTextBrowser> 0023 #include <QWindow> 0024 0025 #include <qapplication.h> 0026 #if 0 0027 // NOTE waiting for the notification framework plan 0028 #include <knotification.h> 0029 #endif 0030 #include <ksqueezedtextlabel.h> 0031 0032 #include <KCollapsibleGroupBox> 0033 0034 namespace KMessageBox 0035 { 0036 /** 0037 * @private Prevent kapidox's doxygen config to pick up this namespace variable 0038 * this static is used by the createKMessageBox function to enqueue dialogs 0039 * FIXME what should we do about this static? 0040 */ 0041 QDialogButtonBox::StandardButton KWIDGETSADDONS_EXPORT (*KMessageBox_exec_hook)(QDialog *) = nullptr; 0042 0043 /// @private Prevent kapidox's doxygen config pick up this namespace method 0044 static void applyOptions(QDialog *dialog, KMessageBox::Options options) 0045 { 0046 if (options & KMessageBox::WindowModal) { 0047 dialog->setWindowModality(Qt::WindowModal); 0048 } 0049 dialog->setModal(true); 0050 } 0051 0052 /// @private Prevent kapidox's doxygen config pick up this namespace method 0053 // This method has been copied from KWindowSystem to avoid depending on it 0054 static void setMainWindow(QWidget *subWidget, WId mainWindowId) 0055 { 0056 #ifdef Q_OS_OSX 0057 if (!QWidget::find(mainWindowId)) { 0058 return; 0059 } 0060 #endif 0061 // Set the WA_NativeWindow attribute to force the creation of the QWindow. 0062 // Without this QWidget::windowHandle() returns 0. 0063 subWidget->setAttribute(Qt::WA_NativeWindow, true); 0064 QWindow *subWindow = subWidget->windowHandle(); 0065 Q_ASSERT(subWindow); 0066 0067 QWindow *mainWindow = QWindow::fromWinId(mainWindowId); 0068 if (!mainWindow) { 0069 // foreign windows not supported on all platforms 0070 return; 0071 } 0072 // mainWindow is not the child of any object, so make sure it gets deleted at some point 0073 QObject::connect(subWidget, &QObject::destroyed, mainWindow, &QObject::deleteLater); 0074 subWindow->setTransientParent(mainWindow); 0075 } 0076 0077 /** 0078 * @private Prevent kapidox's doxygen config pick up this namespace method 0079 * Create a QDialog whose parent is a foreign window 0080 */ 0081 static QDialog *createWIdDialog(WId parent_id) 0082 { 0083 QWidget *parent = QWidget::find(parent_id); 0084 QDialog *dialog = new QDialog(parent, Qt::Dialog); 0085 if (!parent && parent_id) { 0086 setMainWindow(dialog, parent_id); 0087 } 0088 return dialog; 0089 } 0090 0091 class DialogButtonsHelper : public QObject 0092 { 0093 Q_OBJECT 0094 public: 0095 DialogButtonsHelper(QDialog *dialog, QDialogButtonBox *buttons) 0096 : QObject(dialog) 0097 , m_dialog(dialog) 0098 , m_buttons(buttons) 0099 , m_details(nullptr) 0100 { 0101 connect(m_buttons, &QDialogButtonBox::clicked, this, &DialogButtonsHelper::onButtonClicked); 0102 } 0103 0104 void setDetailsWidget(QWidget *widget) 0105 { 0106 m_details = widget; 0107 } 0108 0109 public Q_SLOTS: 0110 void onButtonClicked(QAbstractButton *button) 0111 { 0112 QDialogButtonBox::StandardButton code = m_buttons->standardButton(button); 0113 if (code != QDialogButtonBox::NoButton) { 0114 m_dialog->done(code); 0115 } 0116 } 0117 0118 private: 0119 QDialog *const m_dialog; 0120 QDialogButtonBox *const m_buttons; 0121 QWidget *m_details; 0122 }; 0123 0124 QDialogButtonBox::StandardButton createKMessageBox(QDialog *dialog, 0125 QDialogButtonBox *buttons, 0126 QMessageBox::Icon icon, 0127 const QString &text, 0128 const QStringList &strlist, 0129 const QString &ask, 0130 bool *checkboxReturn, 0131 Options options, 0132 const QString &details) 0133 { 0134 QIcon tmpIcon; 0135 QStyle *style = dialog ? dialog->style() : QApplication::style(); 0136 switch (icon) { 0137 case QMessageBox::Information: 0138 tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, nullptr, dialog); 0139 break; 0140 case QMessageBox::Warning: 0141 tmpIcon = style->standardIcon(QStyle::SP_MessageBoxWarning, nullptr, dialog); 0142 break; 0143 case QMessageBox::Critical: 0144 tmpIcon = style->standardIcon(QStyle::SP_MessageBoxCritical, nullptr, dialog); 0145 break; 0146 case QMessageBox::Question: 0147 tmpIcon = style->standardIcon(QStyle::SP_MessageBoxQuestion, nullptr, dialog); 0148 break; 0149 default: 0150 break; 0151 } 0152 0153 return createKMessageBox(dialog, buttons, tmpIcon, text, strlist, ask, checkboxReturn, options, details, icon); 0154 } 0155 0156 QDialogButtonBox::StandardButton createKMessageBox(QDialog *dialog, 0157 QDialogButtonBox *buttons, 0158 const QIcon &icon, 0159 const QString &text, 0160 const QStringList &strlist, 0161 const QString &ask, 0162 bool *checkboxReturn, 0163 Options options, 0164 const QString &details, 0165 QMessageBox::Icon notifyType) 0166 { 0167 if (!isNotifyInterfaceLoaded()) { 0168 // This is annoying. Loading the interface later (or at any point) will 0169 // install the qm translation of the knotifications library which will cause a LanguageChange event to be sent 0170 // Which will end up in QDialogButtonBoxPrivate::retranslateStrings and will overwrite the texts 0171 // we have just set. So here we save our texts, force load the interface and reset the texts 0172 // For people wondering if they can remove this bit of code later, this seems to only be an issue 0173 // in non Plasma desktops, emulate by running something like XDG_CURRENT_DESKTOP=X-Cinnamon okular 0174 // on plasma desktops the platform plugin already uses knotifications so it's qm has been loaded on startup 0175 QMap<QPointer<QAbstractButton>, QString> buttonTexts; 0176 for (QAbstractButton *b : buttons->buttons()) { 0177 buttonTexts[b] = b->text(); 0178 } 0179 notifyInterface(); 0180 QApplication::processEvents(); // We need to force the LanguageChange to be processed 0181 for (auto it = buttonTexts.constBegin(); it != buttonTexts.constEnd(); ++it) { 0182 if (it.key()) { 0183 it.key()->setText(it.value()); 0184 } 0185 } 0186 } 0187 0188 DialogButtonsHelper *buttonsHelper = new DialogButtonsHelper(dialog, buttons); 0189 0190 QWidget *mainWidget = new QWidget(dialog); 0191 QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget); 0192 const int verticalSpacing = mainWidget->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing); 0193 const int horizontalSpacing = mainWidget->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); 0194 mainLayout->setSpacing(verticalSpacing * 2); // provide extra spacing 0195 mainLayout->setContentsMargins(0, 0, 0, 0); 0196 buttons->setParent(dialog); 0197 0198 QHBoxLayout *hLayout = new QHBoxLayout(); 0199 hLayout->setContentsMargins(0, 0, 0, 0); 0200 hLayout->setSpacing(-1); // use default spacing 0201 mainLayout->addLayout(hLayout, 5); 0202 0203 QLabel *iconLabel = new QLabel(mainWidget); 0204 0205 if (!icon.isNull()) { 0206 QStyleOption option; 0207 option.initFrom(mainWidget); 0208 iconLabel->setPixmap(icon.pixmap(mainWidget->style()->pixelMetric(QStyle::PM_MessageBoxIconSize, &option, mainWidget))); 0209 } 0210 0211 QVBoxLayout *iconLayout = new QVBoxLayout(); 0212 iconLayout->addStretch(1); 0213 iconLayout->addWidget(iconLabel); 0214 iconLayout->addStretch(5); 0215 0216 hLayout->addLayout(iconLayout, 0); 0217 hLayout->addSpacing(horizontalSpacing); 0218 0219 QLabel *messageLabel = new QLabel(text, mainWidget); 0220 messageLabel->setOpenExternalLinks(options & KMessageBox::AllowLink); 0221 Qt::TextInteractionFlags flags = Qt::TextSelectableByMouse; 0222 if (options & KMessageBox::AllowLink) { 0223 flags |= Qt::LinksAccessibleByMouse | Qt::LinksAccessibleByKeyboard; 0224 } 0225 messageLabel->setTextInteractionFlags(flags); 0226 0227 QRect desktop = dialog->screen()->geometry(); 0228 bool usingSqueezedTextLabel = false; 0229 if (messageLabel->sizeHint().width() > desktop.width() * 0.5) { 0230 // enable automatic wrapping of messages which are longer than 50% of screen width 0231 messageLabel->setWordWrap(true); 0232 // use a squeezed label if text is still too wide 0233 usingSqueezedTextLabel = messageLabel->sizeHint().width() > desktop.width() * 0.85; 0234 if (usingSqueezedTextLabel) { 0235 delete messageLabel; 0236 messageLabel = new KSqueezedTextLabel(text, mainWidget); 0237 messageLabel->setOpenExternalLinks(options & KMessageBox::AllowLink); 0238 messageLabel->setTextInteractionFlags(flags); 0239 } 0240 } 0241 0242 QPalette messagePal(messageLabel->palette()); 0243 messagePal.setColor(QPalette::Window, Qt::transparent); 0244 messageLabel->setPalette(messagePal); 0245 0246 bool usingScrollArea = desktop.height() / 3 < messageLabel->sizeHint().height(); 0247 if (usingScrollArea) { 0248 QScrollArea *messageScrollArea = new QScrollArea(mainWidget); 0249 messageScrollArea->setWidget(messageLabel); 0250 messageScrollArea->setFrameShape(QFrame::NoFrame); 0251 messageScrollArea->setWidgetResizable(true); 0252 QPalette scrollPal(messageScrollArea->palette()); 0253 scrollPal.setColor(QPalette::Window, Qt::transparent); 0254 messageScrollArea->viewport()->setPalette(scrollPal); 0255 hLayout->addWidget(messageScrollArea, 5); 0256 } else { 0257 hLayout->addWidget(messageLabel, 5); 0258 } 0259 0260 const bool usingListWidget = !strlist.isEmpty(); 0261 if (usingListWidget) { 0262 // enable automatic wrapping since the listwidget has already a good initial width 0263 messageLabel->setWordWrap(true); 0264 QListWidget *listWidget = new QListWidget(mainWidget); 0265 listWidget->addItems(strlist); 0266 0267 QStyleOptionViewItem styleOption; 0268 styleOption.initFrom(listWidget); 0269 QFontMetrics fm(styleOption.font); 0270 int w = listWidget->width(); 0271 for (const QString &str : strlist) { 0272 w = qMax(w, fm.boundingRect(str).width()); 0273 } 0274 const int borderWidth = listWidget->width() - listWidget->viewport()->width() + listWidget->verticalScrollBar()->height(); 0275 w += borderWidth; 0276 if (w > desktop.width() * 0.85) { // limit listWidget size to 85% of screen width 0277 w = qRound(desktop.width() * 0.85); 0278 } 0279 listWidget->setMinimumWidth(w); 0280 0281 mainLayout->addWidget(listWidget, usingScrollArea ? 10 : 50); 0282 listWidget->setSelectionMode(QListWidget::NoSelection); 0283 messageLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); 0284 } else if (!usingScrollArea) { 0285 mainLayout->addStretch(15); 0286 } 0287 0288 QPointer<QCheckBox> checkbox = nullptr; 0289 if (!ask.isEmpty()) { 0290 checkbox = new QCheckBox(ask, mainWidget); 0291 mainLayout->addWidget(checkbox); 0292 if (checkboxReturn) { 0293 checkbox->setChecked(*checkboxReturn); 0294 } 0295 } 0296 0297 QVBoxLayout *topLayout = new QVBoxLayout(dialog); 0298 topLayout->addWidget(mainWidget); 0299 0300 if (!details.isEmpty()) { 0301 QHBoxLayout *detailsHLayout = new QHBoxLayout(); 0302 detailsHLayout->addSpacing(2 * horizontalSpacing + iconLayout->sizeHint().width()); 0303 KCollapsibleGroupBox *detailsGroup = new KCollapsibleGroupBox(); 0304 detailsGroup->setTitle(QApplication::translate("KMessageBox", "Details")); 0305 QVBoxLayout *detailsLayout = new QVBoxLayout(detailsGroup); 0306 if (details.length() < 512) { 0307 QLabel *detailsLabel = new QLabel(details); 0308 detailsLabel->setOpenExternalLinks(options & KMessageBox::AllowLink); 0309 Qt::TextInteractionFlags flags = Qt::TextSelectableByMouse; 0310 if (options & KMessageBox::AllowLink) { 0311 flags |= Qt::LinksAccessibleByMouse | Qt::LinksAccessibleByKeyboard; 0312 }; 0313 detailsLabel->setTextInteractionFlags(flags); 0314 detailsLabel->setWordWrap(true); 0315 detailsLabel->setMinimumSize(detailsLabel->sizeHint()); 0316 detailsLayout->addWidget(detailsLabel, 50); 0317 } else { 0318 QTextBrowser *detailTextEdit = new QTextBrowser(); 0319 detailTextEdit->setText(details); 0320 detailTextEdit->setReadOnly(true); 0321 detailTextEdit->setMinimumHeight(detailTextEdit->fontMetrics().lineSpacing() * 11); 0322 detailsLayout->addWidget(detailTextEdit, 50); 0323 } 0324 if (!usingListWidget) { 0325 mainLayout->setStretchFactor(hLayout, 10); 0326 } 0327 detailsHLayout->addWidget(detailsGroup); 0328 topLayout->addLayout(detailsHLayout); 0329 buttonsHelper->setDetailsWidget(detailsGroup); 0330 } 0331 0332 topLayout->addWidget(buttons); 0333 topLayout->setSizeConstraint(QLayout::SetFixedSize); 0334 0335 if (!usingListWidget && !usingScrollArea && !usingSqueezedTextLabel && details.isEmpty()) { 0336 dialog->setFixedSize(dialog->sizeHint() + QSize(10, 10)); 0337 } 0338 0339 if ((options & KMessageBox::Dangerous)) { 0340 QPushButton *cancelButton = buttons->button(QDialogButtonBox::Cancel); 0341 QPushButton *noButton = buttons->button(QDialogButtonBox::No); 0342 0343 if (cancelButton && cancelButton->isEnabled()) { 0344 cancelButton->setDefault(true); 0345 cancelButton->setFocus(); 0346 } else if (noButton && noButton->isEnabled()) { 0347 noButton->setDefault(true); 0348 noButton->setFocus(); 0349 } 0350 } 0351 0352 #ifndef Q_OS_WIN // FIXME problems with KNotify on Windows 0353 if ((options & KMessageBox::Notify)) { 0354 QString message = text; 0355 if (!strlist.isEmpty()) { 0356 message += QLatin1Char('\n') + strlist.join(QLatin1Char('\n')); 0357 } 0358 notifyInterface()->sendNotification(notifyType, message, dialog->topLevelWidget()); 0359 } 0360 #endif 0361 0362 if (KMessageBox_exec_hook) { 0363 return KMessageBox_exec_hook(dialog); 0364 } 0365 0366 if ((options & KMessageBox::NoExec)) { 0367 return QDialogButtonBox::NoButton; // We have to return something. 0368 } 0369 0370 // We use a QPointer because the dialog may get deleted 0371 // during exec() if the parent of the dialog gets deleted. 0372 // In that case the QPointer will reset to 0. 0373 QPointer<QDialog> guardedDialog = dialog; 0374 0375 const QDialogButtonBox::StandardButton result = QDialogButtonBox::StandardButton(guardedDialog->exec()); 0376 if (checkbox && checkboxReturn) { 0377 *checkboxReturn = checkbox->isChecked(); 0378 } 0379 0380 delete guardedDialog; 0381 return result; 0382 } 0383 0384 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0385 ButtonCode questionYesNo(QWidget *parent, 0386 const QString &text, 0387 const QString &title, 0388 const KGuiItem &buttonYes, 0389 const KGuiItem &buttonNo, 0390 const QString &dontAskAgainName, 0391 Options options) 0392 { 0393 return questionYesNoList(parent, text, QStringList(), title, buttonYes, buttonNo, dontAskAgainName, options); 0394 } 0395 #endif 0396 0397 ButtonCode questionTwoActions(QWidget *parent, 0398 const QString &text, 0399 const QString &title, 0400 const KGuiItem &primaryAction, 0401 const KGuiItem &secondaryAction, 0402 const QString &dontAskAgainName, 0403 Options options) 0404 { 0405 return questionTwoActionsList(parent, text, QStringList(), title, primaryAction, secondaryAction, dontAskAgainName, options); 0406 } 0407 0408 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0409 bool shouldBeShownYesNo(const QString &dontShowAgainName, ButtonCode &result) 0410 { 0411 if (dontShowAgainName.isEmpty()) { 0412 return true; 0413 } 0414 return dontAskAgainInterface()->shouldBeShownYesNo(dontShowAgainName, result); 0415 } 0416 #endif 0417 0418 bool shouldBeShownTwoActions(const QString &dontShowAgainName, ButtonCode &result) 0419 { 0420 if (dontShowAgainName.isEmpty()) { 0421 return true; 0422 } 0423 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0424 return dontAskAgainInterface()->shouldBeShownYesNo(dontShowAgainName, result); 0425 #else 0426 return dontAskAgainInterface()->shouldBeShownTwoActions(dontShowAgainName, result); 0427 #endif 0428 } 0429 0430 bool shouldBeShownContinue(const QString &dontShowAgainName) 0431 { 0432 if (dontShowAgainName.isEmpty()) { 0433 return true; 0434 } 0435 return dontAskAgainInterface()->shouldBeShownContinue(dontShowAgainName); 0436 } 0437 0438 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0439 void saveDontShowAgainYesNo(const QString &dontShowAgainName, ButtonCode result) 0440 { 0441 if (dontShowAgainName.isEmpty()) { 0442 return; 0443 } 0444 dontAskAgainInterface()->saveDontShowAgainYesNo(dontShowAgainName, result); 0445 } 0446 #endif 0447 0448 void saveDontShowAgainTwoActions(const QString &dontShowAgainName, ButtonCode result) 0449 { 0450 if (dontShowAgainName.isEmpty()) { 0451 return; 0452 } 0453 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0454 dontAskAgainInterface()->saveDontShowAgainYesNo(dontShowAgainName, result); 0455 #else 0456 dontAskAgainInterface()->saveDontShowAgainTwoActions(dontShowAgainName, result); 0457 #endif 0458 } 0459 0460 void saveDontShowAgainContinue(const QString &dontShowAgainName) 0461 { 0462 if (dontShowAgainName.isEmpty()) { 0463 return; 0464 } 0465 dontAskAgainInterface()->saveDontShowAgainContinue(dontShowAgainName); 0466 } 0467 0468 void enableAllMessages() 0469 { 0470 dontAskAgainInterface()->enableAllMessages(); 0471 } 0472 0473 void enableMessage(const QString &dontShowAgainName) 0474 { 0475 dontAskAgainInterface()->enableMessage(dontShowAgainName); 0476 } 0477 0478 void setDontShowAgainConfig(KConfig *cfg) 0479 { 0480 dontAskAgainInterface()->setConfig(cfg); 0481 } 0482 0483 /// @private Prevent kapidox's doxygen config pick up this namespace method 0484 static ButtonCode questionTwoActionsListInternal(QDialog *dialog, 0485 const QString &text, 0486 const QStringList &strlist, 0487 const QString &title, 0488 const KGuiItem &primaryAction, 0489 const KGuiItem &secondaryAction, 0490 const QString &dontAskAgainName, 0491 Options options) 0492 { 0493 ButtonCode res; 0494 if (!shouldBeShownTwoActions(dontAskAgainName, res)) { 0495 delete dialog; 0496 return res; 0497 } 0498 0499 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Question") : title); 0500 dialog->setObjectName(QStringLiteral("questionTwoActions")); 0501 0502 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0503 buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); 0504 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Yes), primaryAction); 0505 KGuiItem::assign(buttonBox->button(QDialogButtonBox::No), secondaryAction); 0506 0507 applyOptions(dialog, options); 0508 0509 bool checkboxResult = false; 0510 const int result = createKMessageBox(dialog, 0511 buttonBox, 0512 QMessageBox::Question, 0513 text, 0514 strlist, 0515 dontAskAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not ask again"), 0516 &checkboxResult, 0517 options); 0518 res = (result == QDialogButtonBox::Yes ? PrimaryAction : SecondaryAction); 0519 0520 if (checkboxResult) { 0521 saveDontShowAgainTwoActions(dontAskAgainName, res); 0522 } 0523 return res; 0524 } 0525 0526 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0527 ButtonCode questionYesNoList(QWidget *parent, 0528 const QString &text, 0529 const QStringList &strlist, 0530 const QString &title, 0531 const KGuiItem &buttonYes, 0532 const KGuiItem &buttonNo, 0533 const QString &dontAskAgainName, 0534 Options options) 0535 { 0536 return questionTwoActionsListInternal(new QDialog(parent), text, strlist, title, buttonYes, buttonNo, dontAskAgainName, options); 0537 } 0538 #endif 0539 0540 ButtonCode questionTwoActionsList(QWidget *parent, 0541 const QString &text, 0542 const QStringList &strlist, 0543 const QString &title, 0544 const KGuiItem &primaryAction, 0545 const KGuiItem &secondaryAction, 0546 const QString &dontAskAgainName, 0547 Options options) 0548 { 0549 return questionTwoActionsListInternal(new QDialog(parent), text, strlist, title, primaryAction, secondaryAction, dontAskAgainName, options); 0550 } 0551 0552 /// @private Prevent kapidox's doxygen config pick up this namespace method 0553 static ButtonCode questionTwoActionsCancelInternal(QDialog *dialog, 0554 const QString &text, 0555 const QString &title, 0556 const KGuiItem &primaryAction, 0557 const KGuiItem &secondaryAction, 0558 const KGuiItem &cancelAction, 0559 const QString &dontAskAgainName, 0560 Options options) 0561 { 0562 ButtonCode res; 0563 if (!shouldBeShownTwoActions(dontAskAgainName, res)) { 0564 delete dialog; 0565 return res; 0566 } 0567 0568 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Question") : title); 0569 dialog->setObjectName(QStringLiteral("QuestionTwoActionsCancel")); 0570 0571 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0572 buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No | QDialogButtonBox::Cancel); 0573 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Yes), primaryAction); 0574 KGuiItem::assign(buttonBox->button(QDialogButtonBox::No), secondaryAction); 0575 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Cancel), cancelAction); 0576 0577 applyOptions(dialog, options); 0578 0579 bool checkboxResult = false; 0580 const int result = createKMessageBox(dialog, 0581 buttonBox, 0582 QMessageBox::Question, 0583 text, 0584 QStringList(), 0585 dontAskAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not ask again"), 0586 &checkboxResult, 0587 options); 0588 0589 if (result == QDialogButtonBox::Yes) { 0590 res = PrimaryAction; 0591 } else if (result == QDialogButtonBox::No) { 0592 res = SecondaryAction; 0593 } else { 0594 return Cancel; 0595 } 0596 0597 if (checkboxResult) { 0598 saveDontShowAgainTwoActions(dontAskAgainName, res); 0599 } 0600 return res; 0601 } 0602 0603 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0604 ButtonCode questionYesNoCancel(QWidget *parent, 0605 const QString &text, 0606 const QString &title, 0607 const KGuiItem &buttonYes, 0608 const KGuiItem &buttonNo, 0609 const KGuiItem &buttonCancel, 0610 const QString &dontAskAgainName, 0611 Options options) 0612 { 0613 return questionTwoActionsCancelInternal(new QDialog(parent), text, title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 0614 } 0615 #endif 0616 0617 ButtonCode questionTwoActionsCancel(QWidget *parent, 0618 const QString &text, 0619 const QString &title, 0620 const KGuiItem &primaryAction, 0621 const KGuiItem &secondaryAction, 0622 const KGuiItem &cancelAction, 0623 const QString &dontAskAgainName, 0624 Options options) 0625 { 0626 return questionTwoActionsCancelInternal(new QDialog(parent), text, title, primaryAction, secondaryAction, cancelAction, dontAskAgainName, options); 0627 } 0628 0629 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0630 ButtonCode warningYesNo(QWidget *parent, 0631 const QString &text, 0632 const QString &title, 0633 const KGuiItem &buttonYes, 0634 const KGuiItem &buttonNo, 0635 const QString &dontAskAgainName, 0636 Options options) 0637 { 0638 return warningYesNoList(parent, text, QStringList(), title, buttonYes, buttonNo, dontAskAgainName, options); 0639 } 0640 #endif 0641 0642 ButtonCode warningTwoActions(QWidget *parent, 0643 const QString &text, 0644 const QString &title, 0645 const KGuiItem &primaryAction, 0646 const KGuiItem &secondaryAction, 0647 const QString &dontAskAgainName, 0648 Options options) 0649 { 0650 return warningTwoActionsList(parent, text, QStringList(), title, primaryAction, secondaryAction, dontAskAgainName, options); 0651 } 0652 0653 /// @private Prevent kapidox's doxygen config pick up this namespace method 0654 static ButtonCode warningTwoActionsListInternal(QDialog *dialog, 0655 const QString &text, 0656 const QStringList &strlist, 0657 const QString &title, 0658 const KGuiItem &primaryAction, 0659 const KGuiItem &secondaryAction, 0660 const QString &dontAskAgainName, 0661 Options options) 0662 { 0663 ButtonCode res; 0664 if (!shouldBeShownTwoActions(dontAskAgainName, res)) { 0665 delete dialog; 0666 return res; 0667 } 0668 0669 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Warning") : title); 0670 dialog->setObjectName(QStringLiteral("warningTwoActionsList")); 0671 0672 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0673 buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); 0674 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Yes), primaryAction); 0675 KGuiItem::assign(buttonBox->button(QDialogButtonBox::No), secondaryAction); 0676 0677 applyOptions(dialog, options); 0678 0679 bool checkboxResult = false; 0680 const int result = createKMessageBox(dialog, 0681 buttonBox, 0682 QMessageBox::Warning, 0683 text, 0684 strlist, 0685 dontAskAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not ask again"), 0686 &checkboxResult, 0687 options); 0688 res = (result == QDialogButtonBox::Yes ? PrimaryAction : SecondaryAction); 0689 0690 if (checkboxResult) { 0691 saveDontShowAgainTwoActions(dontAskAgainName, res); 0692 } 0693 return res; 0694 } 0695 0696 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0697 ButtonCode warningYesNoList(QWidget *parent, 0698 const QString &text, 0699 const QStringList &strlist, 0700 const QString &title, 0701 const KGuiItem &buttonYes, 0702 const KGuiItem &buttonNo, 0703 const QString &dontAskAgainName, 0704 Options options) 0705 { 0706 return warningTwoActionsListInternal(new QDialog(parent), text, strlist, title, buttonYes, buttonNo, dontAskAgainName, options); 0707 } 0708 #endif 0709 0710 ButtonCode warningTwoActionsList(QWidget *parent, 0711 const QString &text, 0712 const QStringList &strlist, 0713 const QString &title, 0714 const KGuiItem &primaryAction, 0715 const KGuiItem &secondaryAction, 0716 const QString &dontAskAgainName, 0717 Options options) 0718 { 0719 return warningTwoActionsListInternal(new QDialog(parent), text, strlist, title, primaryAction, secondaryAction, dontAskAgainName, options); 0720 } 0721 0722 ButtonCode warningContinueCancel(QWidget *parent, 0723 const QString &text, 0724 const QString &title, 0725 const KGuiItem &buttonContinue, 0726 const KGuiItem &buttonCancel, 0727 const QString &dontAskAgainName, 0728 Options options) 0729 { 0730 return warningContinueCancelList(parent, text, QStringList(), title, buttonContinue, buttonCancel, dontAskAgainName, options); 0731 } 0732 0733 /// @private Prevent kapidox's doxygen config pick up this namespace method 0734 static ButtonCode warningContinueCancelListInternal(QDialog *dialog, 0735 const QString &text, 0736 const QStringList &strlist, 0737 const QString &title, 0738 const KGuiItem &buttonContinue, 0739 const KGuiItem &buttonCancel, 0740 const QString &dontAskAgainName, 0741 Options options, 0742 const QString &details) 0743 { 0744 if (!shouldBeShownContinue(dontAskAgainName)) { 0745 delete dialog; 0746 return Continue; 0747 } 0748 0749 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Warning") : title); 0750 dialog->setObjectName(QStringLiteral("warningYesNo")); 0751 0752 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0753 buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); 0754 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Yes), buttonContinue); 0755 KGuiItem::assign(buttonBox->button(QDialogButtonBox::No), buttonCancel); 0756 0757 applyOptions(dialog, options); 0758 0759 bool checkboxResult = false; 0760 const int result = createKMessageBox(dialog, 0761 buttonBox, 0762 QMessageBox::Warning, 0763 text, 0764 strlist, 0765 dontAskAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not ask again"), 0766 &checkboxResult, 0767 options, 0768 details); 0769 0770 if (result != QDialogButtonBox::Yes) { 0771 return Cancel; 0772 } 0773 if (checkboxResult) { 0774 saveDontShowAgainContinue(dontAskAgainName); 0775 } 0776 return Continue; 0777 } 0778 0779 ButtonCode warningContinueCancelList(QWidget *parent, 0780 const QString &text, 0781 const QStringList &strlist, 0782 const QString &title, 0783 const KGuiItem &buttonContinue, 0784 const KGuiItem &buttonCancel, 0785 const QString &dontAskAgainName, 0786 Options options) 0787 { 0788 return warningContinueCancelListInternal(new QDialog(parent), text, strlist, title, buttonContinue, buttonCancel, dontAskAgainName, options, QString()); 0789 } 0790 0791 ButtonCode warningContinueCancelDetailed(QWidget *parent, 0792 const QString &text, 0793 const QString &title, 0794 const KGuiItem &buttonContinue, 0795 const KGuiItem &buttonCancel, 0796 const QString &dontAskAgainName, 0797 Options options, 0798 const QString &details) 0799 { 0800 return warningContinueCancelListInternal(new QDialog(parent), text, QStringList(), title, buttonContinue, buttonCancel, dontAskAgainName, options, details); 0801 } 0802 0803 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0804 ButtonCode warningYesNoCancel(QWidget *parent, 0805 const QString &text, 0806 const QString &title, 0807 const KGuiItem &buttonYes, 0808 const KGuiItem &buttonNo, 0809 const KGuiItem &buttonCancel, 0810 const QString &dontAskAgainName, 0811 Options options) 0812 { 0813 return warningYesNoCancelList(parent, text, QStringList(), title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 0814 } 0815 #endif 0816 0817 ButtonCode warningTwoActionsCancel(QWidget *parent, 0818 const QString &text, 0819 const QString &title, 0820 const KGuiItem &primaryAction, 0821 const KGuiItem &secondaryAction, 0822 const KGuiItem &cancelAction, 0823 const QString &dontAskAgainName, 0824 Options options) 0825 { 0826 return warningTwoActionsCancelList(parent, text, QStringList(), title, primaryAction, secondaryAction, cancelAction, dontAskAgainName, options); 0827 } 0828 0829 /// @private Prevent kapidox's doxygen config pick up this namespace method 0830 static ButtonCode warningTwoActionsCancelListInternal(QDialog *dialog, 0831 const QString &text, 0832 const QStringList &strlist, 0833 const QString &title, 0834 const KGuiItem &primaryAction, 0835 const KGuiItem &secondaryAction, 0836 const KGuiItem &cancelAction, 0837 const QString &dontAskAgainName, 0838 Options options) 0839 { 0840 ButtonCode res; 0841 if (!shouldBeShownTwoActions(dontAskAgainName, res)) { 0842 delete dialog; 0843 return res; 0844 } 0845 0846 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Warning") : title); 0847 dialog->setObjectName(QStringLiteral("warningTwoActionsCancel")); 0848 0849 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0850 buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No | QDialogButtonBox::Cancel); 0851 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Yes), primaryAction); 0852 KGuiItem::assign(buttonBox->button(QDialogButtonBox::No), secondaryAction); 0853 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Cancel), cancelAction); 0854 0855 applyOptions(dialog, options); 0856 0857 bool checkboxResult = false; 0858 const int result = createKMessageBox(dialog, 0859 buttonBox, 0860 QMessageBox::Warning, 0861 text, 0862 strlist, 0863 dontAskAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not ask again"), 0864 &checkboxResult, 0865 options); 0866 0867 if (result == QDialogButtonBox::Yes) { 0868 res = PrimaryAction; 0869 } else if (result == QDialogButtonBox::No) { 0870 res = SecondaryAction; 0871 } else { 0872 return Cancel; 0873 } 0874 0875 if (checkboxResult) { 0876 saveDontShowAgainTwoActions(dontAskAgainName, res); 0877 } 0878 return res; 0879 } 0880 0881 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 0882 ButtonCode warningYesNoCancelList(QWidget *parent, 0883 const QString &text, 0884 const QStringList &strlist, 0885 const QString &title, 0886 const KGuiItem &buttonYes, 0887 const KGuiItem &buttonNo, 0888 const KGuiItem &buttonCancel, 0889 const QString &dontAskAgainName, 0890 Options options) 0891 { 0892 return warningTwoActionsCancelListInternal(new QDialog(parent), text, strlist, title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 0893 } 0894 #endif 0895 0896 ButtonCode warningTwoActionsCancelList(QWidget *parent, 0897 const QString &text, 0898 const QStringList &strlist, 0899 const QString &title, 0900 const KGuiItem &primaryAction, 0901 const KGuiItem &secondaryAction, 0902 const KGuiItem &cancelAction, 0903 const QString &dontAskAgainName, 0904 Options options) 0905 { 0906 return warningTwoActionsCancelListInternal(new QDialog(parent), 0907 text, 0908 strlist, 0909 title, 0910 primaryAction, 0911 secondaryAction, 0912 cancelAction, 0913 dontAskAgainName, 0914 options); 0915 } 0916 0917 /// @private Prevent kapidox's doxygen config pick up this namespace method 0918 static void errorInternal(QDialog *dialog, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options) 0919 { 0920 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Error") : title); 0921 dialog->setObjectName(QStringLiteral("error")); 0922 0923 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0924 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 0925 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Ok), buttonOk); 0926 0927 applyOptions(dialog, options); 0928 0929 createKMessageBox(dialog, buttonBox, QMessageBox::Critical, text, QStringList(), QString(), nullptr, options); 0930 } 0931 0932 void error(QWidget *parent, const QString &text, const QString &title, Options options) 0933 { 0934 errorInternal(new QDialog(parent), text, title, KStandardGuiItem::ok(), options); 0935 } 0936 0937 void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options) 0938 { 0939 errorInternal(new QDialog(parent), text, title, buttonOk, options); 0940 } 0941 0942 /// @private Prevent kapidox's doxygen config pick up this namespace method 0943 static void errorListInternal(QDialog *dialog, const QString &text, const QStringList &strlist, const QString &title, Options options) 0944 { 0945 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Error") : title); 0946 dialog->setObjectName(QStringLiteral("error")); 0947 0948 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0949 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 0950 0951 applyOptions(dialog, options); 0952 0953 createKMessageBox(dialog, buttonBox, QMessageBox::Critical, text, strlist, QString(), nullptr, options); 0954 } 0955 0956 void errorList(QWidget *parent, const QString &text, const QStringList &strlist, const QString &title, Options options) 0957 { 0958 errorListInternal(new QDialog(parent), text, strlist, title, options); 0959 } 0960 0961 /// @private Prevent kapidox's doxygen config pick up this namespace method 0962 static void detailedErrorInternal(QDialog *dialog, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 0963 { 0964 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Error") : title); 0965 dialog->setObjectName(QStringLiteral("error")); 0966 0967 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0968 buttonBox->addButton(QDialogButtonBox::Ok); 0969 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Ok), buttonOk); 0970 buttonBox->button(QDialogButtonBox::Ok)->setFocus(); 0971 0972 applyOptions(dialog, options); 0973 0974 createKMessageBox(dialog, buttonBox, QMessageBox::Critical, text, QStringList(), QString(), nullptr, options, details); 0975 } 0976 0977 void detailedError(QWidget *parent, const QString &text, const QString &details, const QString &title, Options options) 0978 { 0979 detailedErrorInternal(new QDialog(parent), text, details, title, KStandardGuiItem::ok(), options); 0980 } 0981 0982 void detailedError(QWidget *parent, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 0983 { 0984 detailedErrorInternal(new QDialog(parent), text, details, title, buttonOk, options); 0985 } 0986 0987 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 0988 /// @private Prevent kapidox's doxygen config pick up this namespace method 0989 static void sorryInternal(QDialog *dialog, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options) 0990 { 0991 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Sorry") : title); 0992 dialog->setObjectName(QStringLiteral("sorry")); 0993 0994 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0995 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 0996 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Ok), buttonOk); 0997 0998 applyOptions(dialog, options); 0999 1000 createKMessageBox(dialog, buttonBox, QMessageBox::Warning, text, QStringList(), QString(), nullptr, options); 1001 } 1002 #endif 1003 1004 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1005 void sorry(QWidget *parent, const QString &text, const QString &title, Options options) 1006 { 1007 sorryInternal(new QDialog(parent), text, title, KStandardGuiItem::ok(), options); 1008 } 1009 #endif 1010 1011 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1012 void sorry(QWidget *parent, const QString &text, const QString &title, const KGuiItem &item, Options options) 1013 { 1014 sorryInternal(new QDialog(parent), text, title, item, options); 1015 } 1016 #endif 1017 1018 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1019 /// @private Prevent kapidox's doxygen config pick up this namespace method 1020 static void detailedSorryInternal(QDialog *dialog, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 1021 { 1022 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Sorry") : title); 1023 dialog->setObjectName(QStringLiteral("sorry")); 1024 1025 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 1026 buttonBox->addButton(QDialogButtonBox::Ok); 1027 buttonBox->button(QDialogButtonBox::Ok)->setFocus(); 1028 KGuiItem::assign(buttonBox->button(QDialogButtonBox::Ok), buttonOk); 1029 1030 applyOptions(dialog, options); 1031 1032 createKMessageBox(dialog, buttonBox, QMessageBox::Warning, text, QStringList(), QString(), nullptr, options, details); 1033 } 1034 #endif 1035 1036 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1037 void detailedSorry(QWidget *parent, const QString &text, const QString &details, const QString &title, Options options) 1038 { 1039 detailedSorryInternal(new QDialog(parent), text, details, title, KStandardGuiItem::ok(), options); 1040 } 1041 #endif 1042 1043 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1044 void detailedSorry(QWidget *parent, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 1045 { 1046 detailedSorryInternal(new QDialog(parent), text, details, title, buttonOk, options); 1047 } 1048 #endif 1049 1050 void information(QWidget *parent, const QString &text, const QString &title, const QString &dontShowAgainName, Options options) 1051 { 1052 informationList(parent, text, QStringList(), title, dontShowAgainName, options); 1053 } 1054 1055 /// @private Prevent kapidox's doxygen config pick up this namespace method 1056 static void informationListInternal(QDialog *dialog, 1057 const QString &text, 1058 const QStringList &strlist, 1059 const QString &title, 1060 const QString &dontShowAgainName, 1061 Options options) 1062 { 1063 if (!shouldBeShownContinue(dontShowAgainName)) { 1064 delete dialog; 1065 return; 1066 } 1067 1068 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Information") : title); 1069 dialog->setObjectName(QStringLiteral("information")); 1070 1071 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 1072 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 1073 1074 applyOptions(dialog, options); 1075 1076 bool checkboxResult = false; 1077 1078 createKMessageBox(dialog, 1079 buttonBox, 1080 QMessageBox::Information, 1081 text, 1082 strlist, 1083 dontShowAgainName.isEmpty() ? QString() : QApplication::translate("KMessageBox", "Do not show this message again"), 1084 &checkboxResult, 1085 options); 1086 1087 if (checkboxResult) { 1088 saveDontShowAgainContinue(dontShowAgainName); 1089 } 1090 } 1091 1092 void informationList(QWidget *parent, const QString &text, const QStringList &strlist, const QString &title, const QString &dontShowAgainName, Options options) 1093 { 1094 informationListInternal(new QDialog(parent), text, strlist, title, dontShowAgainName, options); 1095 } 1096 1097 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1098 void about(QWidget *parent, const QString &text, const QString &title, Options options) 1099 { 1100 QDialog *dialog = new QDialog(parent, Qt::Dialog); 1101 if (!title.isEmpty()) { 1102 dialog->setWindowTitle(title); 1103 } 1104 dialog->setObjectName(QStringLiteral("about")); 1105 1106 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 1107 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 1108 1109 applyOptions(dialog, options); 1110 1111 if (qApp->windowIcon().isNull()) { 1112 QPixmap ret = QMessageBox::standardIcon(QMessageBox::Information); 1113 dialog->setWindowIcon(ret); 1114 } 1115 1116 createKMessageBox(dialog, buttonBox, qApp->windowIcon(), text, QStringList(), QString(), nullptr, options); 1117 } 1118 #endif 1119 1120 /// @private Prevent kapidox's doxygen config pick up this namespace method 1121 static ButtonCode messageBoxInternal(QDialog *dialog, 1122 DialogType type, 1123 const QString &text, 1124 const QString &title, 1125 const KGuiItem &primaryAction, 1126 const KGuiItem &secondaryAction, 1127 const KGuiItem &cancelAction, 1128 const QString &dontShow, 1129 Options options) 1130 { 1131 switch (type) { 1132 case QuestionTwoActions: 1133 return questionTwoActionsListInternal(dialog, text, QStringList(), title, primaryAction, secondaryAction, dontShow, options); 1134 case QuestionTwoActionsCancel: 1135 return questionTwoActionsCancelInternal(dialog, text, title, primaryAction, secondaryAction, cancelAction, dontShow, options); 1136 case WarningTwoActions: 1137 return warningTwoActionsListInternal(dialog, text, QStringList(), title, primaryAction, secondaryAction, dontShow, options); 1138 case WarningContinueCancel: 1139 return warningContinueCancelListInternal(dialog, 1140 text, 1141 QStringList(), 1142 title, 1143 KGuiItem(primaryAction.text()), 1144 cancelAction, 1145 dontShow, 1146 options, 1147 QString()); 1148 case WarningTwoActionsCancel: 1149 return warningTwoActionsCancelListInternal(dialog, text, QStringList(), title, primaryAction, secondaryAction, cancelAction, dontShow, options); 1150 case Information: 1151 informationListInternal(dialog, text, QStringList(), title, dontShow, options); 1152 return KMessageBox::Ok; 1153 1154 case Error: 1155 errorListInternal(dialog, text, QStringList(), title, options); 1156 return KMessageBox::Ok; 1157 1158 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1159 case Sorry: 1160 sorryInternal(dialog, text, title, KStandardGuiItem::ok(), options); 1161 return KMessageBox::Ok; 1162 #endif 1163 } 1164 return KMessageBox::Cancel; 1165 } 1166 1167 ButtonCode messageBox(QWidget *parent, 1168 DialogType type, 1169 const QString &text, 1170 const QString &title, 1171 const KGuiItem &primaryAction, 1172 const KGuiItem &secondaryAction, 1173 const KGuiItem &buttonCancel, 1174 const QString &dontShow, 1175 Options options) 1176 { 1177 return messageBoxInternal(new QDialog(parent), type, text, title, primaryAction, secondaryAction, buttonCancel, dontShow, options); 1178 } 1179 1180 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1181 ButtonCode questionYesNoWId(WId parent_id, 1182 const QString &text, 1183 const QString &title, 1184 const KGuiItem &buttonYes, 1185 const KGuiItem &buttonNo, 1186 const QString &dontAskAgainName, 1187 Options options) 1188 { 1189 return questionYesNoListWId(parent_id, text, QStringList(), title, buttonYes, buttonNo, dontAskAgainName, options); 1190 } 1191 #endif 1192 1193 ButtonCode questionTwoActionsWId(WId parent_id, 1194 const QString &text, 1195 const QString &title, 1196 const KGuiItem &primaryAction, 1197 const KGuiItem &secondaryAction, 1198 const QString &dontAskAgainName, 1199 Options options) 1200 { 1201 return questionTwoActionsListWId(parent_id, text, QStringList(), title, primaryAction, secondaryAction, dontAskAgainName, options); 1202 } 1203 1204 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1205 ButtonCode questionYesNoListWId(WId parent_id, 1206 const QString &text, 1207 const QStringList &strlist, 1208 const QString &title, 1209 const KGuiItem &buttonYes, 1210 const KGuiItem &buttonNo, 1211 const QString &dontAskAgainName, 1212 Options options) 1213 { 1214 return questionTwoActionsListInternal(createWIdDialog(parent_id), text, strlist, title, buttonYes, buttonNo, dontAskAgainName, options); 1215 } 1216 #endif 1217 1218 ButtonCode questionTwoActionsListWId(WId parent_id, 1219 const QString &text, 1220 const QStringList &strlist, 1221 const QString &title, 1222 const KGuiItem &primaryAction, 1223 const KGuiItem &secondaryAction, 1224 const QString &dontAskAgainName, 1225 Options options) 1226 { 1227 return questionTwoActionsListInternal(createWIdDialog(parent_id), text, strlist, title, primaryAction, secondaryAction, dontAskAgainName, options); 1228 } 1229 1230 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1231 ButtonCode questionYesNoCancelWId(WId parent_id, 1232 const QString &text, 1233 const QString &title, 1234 const KGuiItem &buttonYes, 1235 const KGuiItem &buttonNo, 1236 const KGuiItem &buttonCancel, 1237 const QString &dontAskAgainName, 1238 Options options) 1239 { 1240 return questionTwoActionsCancelInternal(createWIdDialog(parent_id), text, title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 1241 } 1242 #endif 1243 1244 ButtonCode questionTwoActionsCancelWId(WId parent_id, 1245 const QString &text, 1246 const QString &title, 1247 const KGuiItem &primaryAction, 1248 const KGuiItem &secondaryAction, 1249 const KGuiItem &cancelAction, 1250 const QString &dontAskAgainName, 1251 Options options) 1252 { 1253 return questionTwoActionsCancelInternal(createWIdDialog(parent_id), text, title, primaryAction, secondaryAction, cancelAction, dontAskAgainName, options); 1254 } 1255 1256 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1257 ButtonCode warningYesNoWId(WId parent_id, 1258 const QString &text, 1259 const QString &title, 1260 const KGuiItem &buttonYes, 1261 const KGuiItem &buttonNo, 1262 const QString &dontAskAgainName, 1263 Options options) 1264 { 1265 return warningYesNoListWId(parent_id, text, QStringList(), title, buttonYes, buttonNo, dontAskAgainName, options); 1266 } 1267 #endif 1268 1269 ButtonCode warningTwoActionsWId(WId parent_id, 1270 const QString &text, 1271 const QString &title, 1272 const KGuiItem &primaryAction, 1273 const KGuiItem &secondaryAction, 1274 const QString &dontAskAgainName, 1275 Options options) 1276 { 1277 return warningTwoActionsListWId(parent_id, text, QStringList(), title, primaryAction, secondaryAction, dontAskAgainName, options); 1278 } 1279 1280 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1281 ButtonCode warningYesNoListWId(WId parent_id, 1282 const QString &text, 1283 const QStringList &strlist, 1284 const QString &title, 1285 const KGuiItem &buttonYes, 1286 const KGuiItem &buttonNo, 1287 const QString &dontAskAgainName, 1288 Options options) 1289 { 1290 return warningTwoActionsListInternal(createWIdDialog(parent_id), text, strlist, title, buttonYes, buttonNo, dontAskAgainName, options); 1291 } 1292 #endif 1293 1294 ButtonCode warningTwoActionsListWId(WId parent_id, 1295 const QString &text, 1296 const QStringList &strlist, 1297 const QString &title, 1298 const KGuiItem &primaryAction, 1299 const KGuiItem &secondaryAction, 1300 const QString &dontAskAgainName, 1301 Options options) 1302 { 1303 return warningTwoActionsListInternal(createWIdDialog(parent_id), text, strlist, title, primaryAction, secondaryAction, dontAskAgainName, options); 1304 } 1305 1306 ButtonCode warningContinueCancelWId(WId parent_id, 1307 const QString &text, 1308 const QString &title, 1309 const KGuiItem &buttonContinue, 1310 const KGuiItem &buttonCancel, 1311 const QString &dontAskAgainName, 1312 Options options) 1313 { 1314 return warningContinueCancelListWId(parent_id, text, QStringList(), title, buttonContinue, buttonCancel, dontAskAgainName, options); 1315 } 1316 1317 ButtonCode warningContinueCancelListWId(WId parent_id, 1318 const QString &text, 1319 const QStringList &strlist, 1320 const QString &title, 1321 const KGuiItem &buttonContinue, 1322 const KGuiItem &buttonCancel, 1323 const QString &dontAskAgainName, 1324 Options options) 1325 { 1326 return warningContinueCancelListInternal(createWIdDialog(parent_id), 1327 text, 1328 strlist, 1329 title, 1330 buttonContinue, 1331 buttonCancel, 1332 dontAskAgainName, 1333 options, 1334 QString()); 1335 } 1336 1337 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1338 ButtonCode warningYesNoCancelWId(WId parent_id, 1339 const QString &text, 1340 const QString &title, 1341 const KGuiItem &buttonYes, 1342 const KGuiItem &buttonNo, 1343 const KGuiItem &buttonCancel, 1344 const QString &dontAskAgainName, 1345 Options options) 1346 { 1347 return warningYesNoCancelListWId(parent_id, text, QStringList(), title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 1348 } 1349 #endif 1350 1351 ButtonCode warningTwoActionsCancelWId(WId parent_id, 1352 const QString &text, 1353 const QString &title, 1354 const KGuiItem &primaryAction, 1355 const KGuiItem &secondaryAction, 1356 const KGuiItem &buttonCancel, 1357 const QString &dontAskAgainName, 1358 Options options) 1359 { 1360 return warningTwoActionsCancelListWId(parent_id, text, QStringList(), title, primaryAction, secondaryAction, buttonCancel, dontAskAgainName, options); 1361 } 1362 1363 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 100) 1364 ButtonCode warningYesNoCancelListWId(WId parent_id, 1365 const QString &text, 1366 const QStringList &strlist, 1367 const QString &title, 1368 const KGuiItem &buttonYes, 1369 const KGuiItem &buttonNo, 1370 const KGuiItem &buttonCancel, 1371 const QString &dontAskAgainName, 1372 Options options) 1373 { 1374 return warningYesNoCancelList(createWIdDialog(parent_id), text, strlist, title, buttonYes, buttonNo, buttonCancel, dontAskAgainName, options); 1375 } 1376 #endif 1377 1378 ButtonCode warningTwoActionsCancelListWId(WId parent_id, 1379 const QString &text, 1380 const QStringList &strlist, 1381 const QString &title, 1382 const KGuiItem &primaryAction, 1383 const KGuiItem &secondaryAction, 1384 const KGuiItem &buttonCancel, 1385 const QString &dontAskAgainName, 1386 Options options) 1387 { 1388 return warningTwoActionsCancelList(createWIdDialog(parent_id), 1389 text, 1390 strlist, 1391 title, 1392 primaryAction, 1393 secondaryAction, 1394 buttonCancel, 1395 dontAskAgainName, 1396 options); 1397 } 1398 1399 void errorWId(WId parent_id, const QString &text, const QString &title, Options options) 1400 { 1401 errorListWId(parent_id, text, QStringList(), title, options); 1402 } 1403 1404 void errorListWId(WId parent_id, const QString &text, const QStringList &strlist, const QString &title, Options options) 1405 { 1406 errorListInternal(createWIdDialog(parent_id), text, strlist, title, options); 1407 } 1408 1409 void detailedErrorWId(WId parent_id, const QString &text, const QString &details, const QString &title, Options options) 1410 { 1411 detailedErrorInternal(createWIdDialog(parent_id), text, details, title, KStandardGuiItem::ok(), options); 1412 } 1413 1414 void detailedErrorWId(WId parent_id, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 1415 { 1416 detailedErrorInternal(createWIdDialog(parent_id), text, details, title, buttonOk, options); 1417 } 1418 1419 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1420 void sorryWId(WId parent_id, const QString &text, const QString &title, Options options) 1421 { 1422 QWidget *parent = QWidget::find(parent_id); 1423 QDialog *dialog = new QDialog(parent, Qt::Dialog); 1424 dialog->setWindowTitle(title.isEmpty() ? QApplication::translate("KMessageBox", "Sorry") : title); 1425 dialog->setObjectName(QStringLiteral("sorry")); 1426 1427 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 1428 buttonBox->setStandardButtons(QDialogButtonBox::Ok); 1429 1430 applyOptions(dialog, options); 1431 if (parent == nullptr && parent_id) { 1432 setMainWindow(dialog, parent_id); 1433 } 1434 1435 createKMessageBox(dialog, buttonBox, QMessageBox::Warning, text, QStringList(), QString(), nullptr, options); 1436 } 1437 #endif 1438 1439 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1440 void detailedSorryWId(WId parent_id, const QString &text, const QString &details, const QString &title, Options options) 1441 { 1442 detailedSorryInternal(createWIdDialog(parent_id), text, details, title, KStandardGuiItem::ok(), options); 1443 } 1444 #endif 1445 1446 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 97) 1447 void detailedSorryWId(WId parent_id, const QString &text, const QString &details, const QString &title, const KGuiItem &buttonOk, Options options) 1448 { 1449 detailedSorryInternal(createWIdDialog(parent_id), text, details, title, buttonOk, options); 1450 } 1451 #endif 1452 1453 void informationWId(WId parent_id, const QString &text, const QString &title, const QString &dontShowAgainName, Options options) 1454 { 1455 informationListWId(parent_id, text, QStringList(), title, dontShowAgainName, options); 1456 } 1457 1458 void informationListWId(WId parent_id, const QString &text, const QStringList &strlist, const QString &title, const QString &dontShowAgainName, Options options) 1459 { 1460 informationListInternal(createWIdDialog(parent_id), text, strlist, title, dontShowAgainName, options); 1461 } 1462 1463 ButtonCode messageBoxWId(WId parent_id, 1464 DialogType type, 1465 const QString &text, 1466 const QString &title, 1467 const KGuiItem &primaryAction, 1468 const KGuiItem &secondaryAction, 1469 const KGuiItem &cancelAction, 1470 const QString &dontShow, 1471 Options options) 1472 { 1473 return messageBoxInternal(createWIdDialog(parent_id), type, text, title, primaryAction, secondaryAction, cancelAction, dontShow, options); 1474 } 1475 1476 } // namespace 1477 1478 #include "kmessagebox.moc"