kdeui Library API Documentation

kmessagebox.cpp

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 1999 Waldo Bastian (bastian@kde.org) 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; version 2 00007 of the License. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #include <qcheckbox.h> 00021 #include <qguardedptr.h> 00022 #include <qhbox.h> 00023 #include <qlabel.h> 00024 #include <qlineedit.h> 00025 #include <qmessagebox.h> 00026 #include <qstringlist.h> 00027 #include <qvbox.h> 00028 #include <qvgroupbox.h> 00029 #include <qstylesheet.h> 00030 #include <qsimplerichtext.h> 00031 #include <qpushbutton.h> 00032 #include <qlayout.h> 00033 00034 #include <kapplication.h> 00035 #include <kconfig.h> 00036 #include <kdebug.h> 00037 #include <kdialogbase.h> 00038 #include <kguiitem.h> 00039 #include <klistbox.h> 00040 #include <klocale.h> 00041 #include <kmessagebox.h> 00042 #include <knotifyclient.h> 00043 #include <kstdguiitem.h> 00044 #include <kactivelabel.h> 00045 #include <kiconloader.h> 00046 #include <kglobalsettings.h> 00047 00048 #include <X11/Xlib.h> 00049 00059 static bool KMessageBox_queue = false; 00060 00061 static QPixmap themedMessageBoxIcon(QMessageBox::Icon icon) 00062 { 00063 QString icon_name; 00064 00065 switch(icon) 00066 { 00067 case QMessageBox::NoIcon: 00068 return QPixmap(); 00069 break; 00070 case QMessageBox::Information: 00071 icon_name = "messagebox_info"; 00072 break; 00073 case QMessageBox::Warning: 00074 icon_name = "messagebox_warning"; 00075 break; 00076 case QMessageBox::Critical: 00077 icon_name = "messagebox_critical"; 00078 break; 00079 default: 00080 break; 00081 } 00082 00083 QPixmap ret = KApplication::kApplication()->iconLoader()->loadIcon(icon_name, KIcon::NoGroup, KIcon::SizeMedium, KIcon::DefaultState, 0, true); 00084 00085 if (ret.isNull()) 00086 return QMessageBox::standardIcon(icon); 00087 else 00088 return ret; 00089 } 00090 00091 static void sendNotification( QString message, 00092 const QStringList& strlist, 00093 QMessageBox::Icon icon, 00094 WId parent_id ) 00095 { 00096 // create the message for KNotify 00097 QString messageType; 00098 switch ( icon ) 00099 { 00100 case QMessageBox::Warning: 00101 messageType = "messageWarning"; 00102 break; 00103 case QMessageBox::Critical: 00104 messageType = "messageCritical"; 00105 break; 00106 #if QT_VERSION >= 0x030200 00107 case QMessageBox::Question: 00108 messageType = "messageQuestion"; 00109 break; 00110 #endif 00111 default: 00112 messageType = "messageInformation"; 00113 break; 00114 } 00115 00116 if ( !strlist.isEmpty() ) 00117 { 00118 for ( QStringList::ConstIterator it = strlist.begin(); it != strlist.end(); ++it ) 00119 message += "\n" + *it; 00120 } 00121 00122 if ( !message.isEmpty() ) 00123 KNotifyClient::event( parent_id, messageType, message ); 00124 } 00125 00126 static QString qrichtextify( const QString& text ) 00127 { 00128 if ( text.isEmpty() || text[0] == '<' ) 00129 return text; 00130 00131 QStringList lines = QStringList::split('\n', text); 00132 for(QStringList::Iterator it = lines.begin(); it != lines.end(); ++it) 00133 { 00134 *it = QStyleSheet::convertFromPlainText( *it, QStyleSheetItem::WhiteSpaceNormal ); 00135 } 00136 00137 return lines.join(QString::null); 00138 } 00139 00140 int KMessageBox::createKMessageBox(KDialogBase *dialog, QMessageBox::Icon icon, 00141 const QString &text, const QStringList &strlist, 00142 const QString &ask, bool *checkboxReturn, 00143 int options, const QString &details) 00144 { 00145 return createKMessageBox(dialog, themedMessageBoxIcon(icon), text, strlist, 00146 ask, checkboxReturn, options, details, icon); 00147 } 00148 00149 int KMessageBox::createKMessageBox(KDialogBase *dialog, QPixmap icon, 00150 const QString &text, const QStringList &strlist, 00151 const QString &ask, bool *checkboxReturn, int options, 00152 const QString &details, QMessageBox::Icon notifyType) 00153 { 00154 QVBox *topcontents = new QVBox (dialog); 00155 topcontents->setSpacing(KDialog::spacingHint()*2); 00156 topcontents->setMargin(KDialog::marginHint()); 00157 00158 QWidget *contents = new QWidget(topcontents); 00159 QHBoxLayout * lay = new QHBoxLayout(contents); 00160 lay->setSpacing(KDialog::spacingHint()); 00161 00162 QLabel *label1 = new QLabel( contents); 00163 00164 if (!icon.isNull()) 00165 label1->setPixmap(icon); 00166 00167 lay->addWidget( label1, 0, Qt::AlignCenter ); 00168 lay->addSpacing(KDialog::spacingHint()); 00169 // Enforce <p>text</p> otherwise the word-wrap doesn't work well 00170 QString qt_text = qrichtextify( text ); 00171 00172 int pref_width = 0; 00173 int pref_height = 0; 00174 // Calculate a proper size for the text. 00175 { 00176 QSimpleRichText rt(qt_text, dialog->font()); 00177 QRect d = KGlobalSettings::desktopGeometry(dialog); 00178 00179 pref_width = d.width() / 3; 00180 rt.setWidth(pref_width); 00181 int used_width = rt.widthUsed(); 00182 pref_height = rt.height(); 00183 if (used_width <= pref_width) 00184 { 00185 while(true) 00186 { 00187 int new_width = (used_width * 9) / 10; 00188 rt.setWidth(new_width); 00189 int new_height = rt.height(); 00190 if (new_height > pref_height) 00191 break; 00192 used_width = rt.widthUsed(); 00193 if (used_width > new_width) 00194 break; 00195 } 00196 pref_width = used_width; 00197 } 00198 else 00199 { 00200 if (used_width > (pref_width *2)) 00201 pref_width = pref_width *2; 00202 else 00203 pref_width = used_width; 00204 } 00205 } 00206 KActiveLabel *label2 = new KActiveLabel( qt_text, contents ); 00207 if ((options & KMessageBox::AllowLink) == 0) 00208 { 00209 QObject::disconnect(label2, SIGNAL(linkClicked(const QString &)), 00210 label2, SLOT(openLink(const QString &))); 00211 } 00212 00213 // We add 10 pixels extra to compensate for some KActiveLabel margins. 00214 // TODO: find out why this is 10. 00215 label2->setFixedSize(QSize(pref_width+10, pref_height)); 00216 lay->addWidget( label2 ); 00217 lay->addStretch(); 00218 00219 KListBox *listbox = 0; 00220 if (!strlist.isEmpty()) 00221 { 00222 listbox=new KListBox( topcontents ); 00223 listbox->insertStringList( strlist ); 00224 listbox->setSelectionMode( QListBox::NoSelection ); 00225 topcontents->setStretchFactor(listbox, 1); 00226 } 00227 00228 QGuardedPtr<QCheckBox> checkbox = 0; 00229 if (!ask.isEmpty()) 00230 { 00231 checkbox = new QCheckBox(ask, topcontents); 00232 if (checkboxReturn) 00233 checkbox->setChecked(*checkboxReturn); 00234 } 00235 00236 if (!details.isEmpty()) 00237 { 00238 QVGroupBox *detailsGroup = new QVGroupBox( i18n("Details"), dialog); 00239 if ( details.length() < 512 ) { 00240 KActiveLabel *label3 = new KActiveLabel(qrichtextify(details), 00241 detailsGroup); 00242 label3->setMinimumSize(label3->sizeHint()); 00243 if ((options & KMessageBox::AllowLink) == 0) 00244 { 00245 QObject::disconnect(label3, SIGNAL(linkClicked(const QString &)), 00246 label3, SLOT(openLink(const QString &))); 00247 } 00248 } else { 00249 QTextEdit* te = new QTextEdit(details, QString::null, detailsGroup); 00250 te->setReadOnly( true ); 00251 te->setMinimumHeight( te->fontMetrics().lineSpacing() * 11 ); 00252 } 00253 dialog->setDetailsWidget(detailsGroup); 00254 } 00255 00256 dialog->setMainWidget(topcontents); 00257 dialog->enableButtonSeparator(false); 00258 if (!listbox) 00259 dialog->disableResize(); 00260 00261 const KDialogBase::ButtonCode buttons[] = { 00262 KDialogBase::Help, 00263 KDialogBase::Default, 00264 KDialogBase::Ok, 00265 KDialogBase::Apply, 00266 KDialogBase::Try, 00267 KDialogBase::Cancel, 00268 KDialogBase::Close, 00269 KDialogBase::User1, 00270 KDialogBase::User2, 00271 KDialogBase::User3, 00272 KDialogBase::No, 00273 KDialogBase::Yes, 00274 KDialogBase::Details }; 00275 for( unsigned int i = 0; 00276 i < sizeof( buttons )/sizeof( buttons[ 0 ] ); 00277 ++i ) 00278 if( QPushButton* btn = dialog->actionButton( buttons[ i ] )) 00279 if( btn->isDefault()) 00280 btn->setFocus(); 00281 00282 if ( (options & KMessageBox::Notify) != 0 ) 00283 sendNotification( text, strlist, notifyType, dialog->topLevelWidget()->winId()); 00284 00285 if (KMessageBox_queue) 00286 { 00287 KDialogQueue::queueDialog(dialog); 00288 return KMessageBox::Cancel; // We have to return something. 00289 } 00290 00291 // We use a QGuardedPtr because the dialog may get deleted 00292 // during exec() if the parent of the dialog gets deleted. 00293 // In that case the guarded ptr will reset to 0. 00294 QGuardedPtr<KDialogBase> guardedDialog = dialog; 00295 00296 int result = guardedDialog->exec(); 00297 if (checkbox && checkboxReturn) 00298 *checkboxReturn = checkbox->isChecked(); 00299 delete (KDialogBase *) guardedDialog; 00300 return result; 00301 } 00302 00303 int 00304 KMessageBox::questionYesNo(QWidget *parent, const QString &text, 00305 const QString &caption, 00306 const KGuiItem &buttonYes, 00307 const KGuiItem &buttonNo, 00308 const QString &dontAskAgainName, 00309 int options) 00310 { 00311 return questionYesNoList(parent, text, QStringList(), caption, 00312 buttonYes, buttonNo, dontAskAgainName, options); 00313 } 00314 00315 int 00316 KMessageBox::questionYesNoWId(WId parent_id, const QString &text, 00317 const QString &caption, 00318 const KGuiItem &buttonYes, 00319 const KGuiItem &buttonNo, 00320 const QString &dontAskAgainName, 00321 int options) 00322 { 00323 return questionYesNoListWId(parent_id, text, QStringList(), caption, 00324 buttonYes, buttonNo, dontAskAgainName, options); 00325 } 00326 00327 bool 00328 KMessageBox::shouldBeShownYesNo(const QString &dontShowAgainName, 00329 ButtonCode &result) 00330 { 00331 if ( dontShowAgainName.isEmpty() ) return true; 00332 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00333 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00334 KConfigGroupSaver saver( config, grpNotifMsgs ); 00335 QString dontAsk = config->readEntry(dontShowAgainName).lower(); 00336 if (dontAsk == "yes") { 00337 result = Yes; 00338 return false; 00339 } 00340 if (dontAsk == "no") { 00341 result = No; 00342 return false; 00343 } 00344 return true; 00345 } 00346 00347 bool 00348 KMessageBox::shouldBeShownContinue(const QString &dontShowAgainName) 00349 { 00350 if ( dontShowAgainName.isEmpty() ) return true; 00351 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00352 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00353 KConfigGroupSaver saver( config, grpNotifMsgs ); 00354 return config->readBoolEntry(dontShowAgainName, true); 00355 } 00356 00357 void 00358 KMessageBox::saveDontShowAgainYesNo(const QString &dontShowAgainName, 00359 ButtonCode result) 00360 { 00361 if ( dontShowAgainName.isEmpty() ) return; 00362 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00363 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00364 KConfigGroupSaver saver( config, grpNotifMsgs ); 00365 config->writeEntry( dontShowAgainName, result==Yes ? "yes" : "no", true, (dontShowAgainName[0] == ':')); 00366 config->sync(); 00367 } 00368 00369 void 00370 KMessageBox::saveDontShowAgainContinue(const QString &dontShowAgainName) 00371 { 00372 if ( dontShowAgainName.isEmpty() ) return; 00373 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00374 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00375 KConfigGroupSaver saver( config, grpNotifMsgs ); 00376 config->writeEntry( dontShowAgainName, false, true, (dontShowAgainName[0] == ':')); 00377 config->sync(); 00378 } 00379 00380 KConfig* KMessageBox::againConfig = NULL; 00381 void 00382 KMessageBox::setDontShowAskAgainConfig(KConfig* cfg) 00383 { 00384 againConfig = cfg; 00385 } 00386 00387 int 00388 KMessageBox::questionYesNoList(QWidget *parent, const QString &text, 00389 const QStringList &strlist, 00390 const QString &caption, 00391 const KGuiItem &buttonYes, 00392 const KGuiItem &buttonNo, 00393 const QString &dontAskAgainName, 00394 int options) 00395 { // in order to avoid code duplication, convert to WId, it will be converted back 00396 return questionYesNoListWId( parent ? parent->winId() : 0, text, strlist, 00397 caption, buttonYes, buttonNo, dontAskAgainName, options ); 00398 } 00399 00400 int 00401 KMessageBox::questionYesNoListWId(WId parent_id, const QString &text, 00402 const QStringList &strlist, 00403 const QString &caption, 00404 const KGuiItem &buttonYes, 00405 const KGuiItem &buttonNo, 00406 const QString &dontAskAgainName, 00407 int options) 00408 { 00409 ButtonCode res; 00410 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00411 return res; 00412 00413 QWidget* parent = QWidget::find( parent_id ); 00414 KDialogBase *dialog= new KDialogBase( 00415 caption.isEmpty() ? i18n("Question") : caption, 00416 KDialogBase::Yes | KDialogBase::No, 00417 KDialogBase::Yes, KDialogBase::No, 00418 parent, "questionYesNo", true, true, 00419 buttonYes, buttonNo); 00420 if( parent == NULL && parent_id != 0 ) 00421 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00422 00423 bool checkboxResult = false; 00424 int result = createKMessageBox(dialog, QMessageBox::Information, text, strlist, 00425 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00426 &checkboxResult, options); 00427 res = (result==KDialogBase::Yes ? Yes : No); 00428 00429 if (checkboxResult) 00430 saveDontShowAgainYesNo(dontAskAgainName, res); 00431 return res; 00432 } 00433 00434 int 00435 KMessageBox::questionYesNoCancel(QWidget *parent, 00436 const QString &text, 00437 const QString &caption, 00438 const KGuiItem &buttonYes, 00439 const KGuiItem &buttonNo, 00440 const QString &dontAskAgainName, 00441 int options) 00442 { 00443 return questionYesNoCancelWId( parent ? parent->winId() : 0, text, caption, buttonYes, buttonNo, 00444 dontAskAgainName, options ); 00445 } 00446 00447 int 00448 KMessageBox::questionYesNoCancelWId(WId parent_id, 00449 const QString &text, 00450 const QString &caption, 00451 const KGuiItem &buttonYes, 00452 const KGuiItem &buttonNo, 00453 const QString &dontAskAgainName, 00454 int options) 00455 { 00456 ButtonCode res; 00457 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00458 return res; 00459 00460 QWidget* parent = QWidget::find( parent_id ); 00461 KDialogBase *dialog= new KDialogBase( 00462 caption.isEmpty() ? i18n("Question") : caption, 00463 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, 00464 KDialogBase::Yes, KDialogBase::Cancel, 00465 parent, "questionYesNoCancel", true, true, 00466 buttonYes, buttonNo); 00467 if( parent == NULL && parent_id != 0 ) 00468 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00469 00470 bool checkboxResult = false; 00471 int result = createKMessageBox(dialog, QMessageBox::Information, 00472 text, QStringList(), 00473 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00474 &checkboxResult, options); 00475 if ( result==KDialogBase::Cancel ) return Cancel; 00476 res = (result==KDialogBase::Yes ? Yes : No); 00477 00478 if (checkboxResult) 00479 saveDontShowAgainYesNo(dontAskAgainName, res); 00480 return res; 00481 } 00482 00483 int 00484 KMessageBox::warningYesNo(QWidget *parent, const QString &text, 00485 const QString &caption, 00486 const KGuiItem &buttonYes, 00487 const KGuiItem &buttonNo, 00488 const QString &dontAskAgainName, 00489 int options) 00490 { 00491 return warningYesNoList(parent, text, QStringList(), caption, 00492 buttonYes, buttonNo, dontAskAgainName, options); 00493 } 00494 00495 int 00496 KMessageBox::warningYesNoWId(WId parent_id, const QString &text, 00497 const QString &caption, 00498 const KGuiItem &buttonYes, 00499 const KGuiItem &buttonNo, 00500 const QString &dontAskAgainName, 00501 int options) 00502 { 00503 return warningYesNoListWId(parent_id, text, QStringList(), caption, 00504 buttonYes, buttonNo, dontAskAgainName, options); 00505 } 00506 00507 int 00508 KMessageBox::warningYesNoList(QWidget *parent, const QString &text, 00509 const QStringList &strlist, 00510 const QString &caption, 00511 const KGuiItem &buttonYes, 00512 const KGuiItem &buttonNo, 00513 const QString &dontAskAgainName, 00514 int options) 00515 { 00516 return warningYesNoListWId( parent ? parent->winId() : 0, text, strlist, caption, 00517 buttonYes, buttonNo, dontAskAgainName, options ); 00518 } 00519 00520 int 00521 KMessageBox::warningYesNoListWId(WId parent_id, const QString &text, 00522 const QStringList &strlist, 00523 const QString &caption, 00524 const KGuiItem &buttonYes, 00525 const KGuiItem &buttonNo, 00526 const QString &dontAskAgainName, 00527 int options) 00528 { 00529 // warningYesNo and warningYesNoList are always "dangerous" 00530 // ### Remove this line for KDE 4, when the 'options' default parameter 00531 // takes effects. 00532 options |= Dangerous; 00533 00534 ButtonCode res; 00535 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00536 return res; 00537 00538 QWidget* parent = QWidget::find( parent_id ); 00539 KDialogBase *dialog= new KDialogBase( 00540 caption.isEmpty() ? i18n("Warning") : caption, 00541 KDialogBase::Yes | KDialogBase::No, 00542 KDialogBase::No, KDialogBase::No, 00543 parent, "warningYesNoList", true, true, 00544 buttonYes, buttonNo); 00545 if( parent == NULL && parent_id != 0 ) 00546 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00547 00548 bool checkboxResult = false; 00549 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00550 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00551 &checkboxResult, options); 00552 res = (result==KDialogBase::Yes ? Yes : No); 00553 00554 if (checkboxResult) 00555 saveDontShowAgainYesNo(dontAskAgainName, res); 00556 return res; 00557 } 00558 00559 int 00560 KMessageBox::warningContinueCancel(QWidget *parent, 00561 const QString &text, 00562 const QString &caption, 00563 const KGuiItem &buttonContinue, 00564 const QString &dontAskAgainName, 00565 int options) 00566 { 00567 return warningContinueCancelList(parent, text, QStringList(), caption, 00568 buttonContinue, dontAskAgainName, options); 00569 } 00570 00571 int 00572 KMessageBox::warningContinueCancelWId(WId parent_id, 00573 const QString &text, 00574 const QString &caption, 00575 const KGuiItem &buttonContinue, 00576 const QString &dontAskAgainName, 00577 int options) 00578 { 00579 return warningContinueCancelListWId(parent_id, text, QStringList(), caption, 00580 buttonContinue, dontAskAgainName, options); 00581 } 00582 00583 int 00584 KMessageBox::warningContinueCancelList(QWidget *parent, const QString &text, 00585 const QStringList &strlist, 00586 const QString &caption, 00587 const KGuiItem &buttonContinue, 00588 const QString &dontAskAgainName, 00589 int options) 00590 { 00591 return warningContinueCancelListWId( parent ? parent->winId() : 0, text, strlist, 00592 caption, buttonContinue, dontAskAgainName, options ); 00593 } 00594 00595 int 00596 KMessageBox::warningContinueCancelListWId(WId parent_id, const QString &text, 00597 const QStringList &strlist, 00598 const QString &caption, 00599 const KGuiItem &buttonContinue, 00600 const QString &dontAskAgainName, 00601 int options) 00602 { 00603 if ( !shouldBeShownContinue(dontAskAgainName) ) 00604 return Continue; 00605 00606 QWidget* parent = QWidget::find( parent_id ); 00607 KDialogBase *dialog= new KDialogBase( 00608 caption.isEmpty() ? i18n("Warning") : caption, 00609 KDialogBase::Yes | KDialogBase::No, 00610 KDialogBase::Yes, KDialogBase::No, 00611 parent, "warningYesNo", true, true, 00612 buttonContinue, KStdGuiItem::cancel() ); 00613 if( parent == NULL && parent_id != 0 ) 00614 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00615 00616 bool checkboxResult = false; 00617 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00618 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00619 &checkboxResult, options); 00620 00621 if ( result==KDialogBase::No ) 00622 return Cancel; 00623 if (checkboxResult) 00624 saveDontShowAgainContinue(dontAskAgainName); 00625 return Continue; 00626 } 00627 00628 int 00629 KMessageBox::warningYesNoCancel(QWidget *parent, const QString &text, 00630 const QString &caption, 00631 const KGuiItem &buttonYes, 00632 const KGuiItem &buttonNo, 00633 const QString &dontAskAgainName, 00634 int options) 00635 { 00636 return warningYesNoCancelList(parent, text, QStringList(), caption, 00637 buttonYes, buttonNo, dontAskAgainName, options); 00638 } 00639 00640 int 00641 KMessageBox::warningYesNoCancelWId(WId parent_id, const QString &text, 00642 const QString &caption, 00643 const KGuiItem &buttonYes, 00644 const KGuiItem &buttonNo, 00645 const QString &dontAskAgainName, 00646 int options) 00647 { 00648 return warningYesNoCancelListWId(parent_id, text, QStringList(), caption, 00649 buttonYes, buttonNo, dontAskAgainName, options); 00650 } 00651 00652 int 00653 KMessageBox::warningYesNoCancelList(QWidget *parent, const QString &text, 00654 const QStringList &strlist, 00655 const QString &caption, 00656 const KGuiItem &buttonYes, 00657 const KGuiItem &buttonNo, 00658 const QString &dontAskAgainName, 00659 int options) 00660 { 00661 return warningYesNoCancelListWId( parent ? parent->winId() : 0, text, strlist, 00662 caption, buttonYes, buttonNo, dontAskAgainName, options ); 00663 } 00664 00665 int 00666 KMessageBox::warningYesNoCancelListWId(WId parent_id, const QString &text, 00667 const QStringList &strlist, 00668 const QString &caption, 00669 const KGuiItem &buttonYes, 00670 const KGuiItem &buttonNo, 00671 const QString &dontAskAgainName, 00672 int options) 00673 { 00674 ButtonCode res; 00675 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00676 return res; 00677 00678 QWidget* parent = QWidget::find( parent_id ); 00679 KDialogBase *dialog= new KDialogBase( 00680 caption.isEmpty() ? i18n("Warning") : caption, 00681 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, 00682 KDialogBase::Yes, KDialogBase::Cancel, 00683 parent, "warningYesNoCancel", true, true, 00684 buttonYes, buttonNo); 00685 if( parent == NULL && parent_id != 0 ) 00686 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00687 00688 bool checkboxResult = false; 00689 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00690 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00691 &checkboxResult, options); 00692 if ( result==KDialogBase::Cancel ) return Cancel; 00693 res = (result==KDialogBase::Yes ? Yes : No); 00694 00695 if (checkboxResult) 00696 saveDontShowAgainYesNo(dontAskAgainName, res); 00697 return res; 00698 } 00699 00700 void 00701 KMessageBox::error(QWidget *parent, const QString &text, 00702 const QString &caption, int options) 00703 { 00704 return errorWId( parent ? parent->winId() : 0, text, caption, options ); 00705 } 00706 00707 void 00708 KMessageBox::errorWId(WId parent_id, const QString &text, 00709 const QString &caption, int options) 00710 { 00711 QWidget* parent = QWidget::find( parent_id ); 00712 KDialogBase *dialog= new KDialogBase( 00713 caption.isEmpty() ? i18n("Error") : caption, 00714 KDialogBase::Yes, 00715 KDialogBase::Yes, KDialogBase::Yes, 00716 parent, "error", true, true, 00717 KStdGuiItem::ok() ); 00718 if( parent == NULL && parent_id != 0 ) 00719 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00720 00721 createKMessageBox(dialog, QMessageBox::Critical, text, QStringList(), QString::null, 0, options); 00722 } 00723 00724 void 00725 KMessageBox::detailedError(QWidget *parent, const QString &text, 00726 const QString &details, 00727 const QString &caption, int options) 00728 { 00729 return detailedErrorWId( parent ? parent->winId() : 0, text, details, caption, options ); 00730 } 00731 00732 void 00733 KMessageBox::detailedErrorWId(WId parent_id, const QString &text, 00734 const QString &details, 00735 const QString &caption, int options) 00736 { 00737 QWidget* parent = QWidget::find( parent_id ); 00738 KDialogBase *dialog= new KDialogBase( 00739 caption.isEmpty() ? i18n("Error") : caption, 00740 KDialogBase::Yes | KDialogBase::Details, 00741 KDialogBase::Yes, KDialogBase::Yes, 00742 parent, "error", true, true, 00743 KStdGuiItem::ok() ); 00744 if( parent == NULL && parent_id != 0 ) 00745 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00746 00747 createKMessageBox(dialog, QMessageBox::Critical, text, QStringList(), QString::null, 0, options, details); 00748 } 00749 00750 void 00751 KMessageBox::queuedDetailedError(QWidget *parent, const QString &text, 00752 const QString &details, 00753 const QString &caption) 00754 { 00755 return queuedDetailedErrorWId( parent ? parent->winId() : 0, text, details, caption ); 00756 } 00757 00758 void 00759 KMessageBox::queuedDetailedErrorWId(WId parent_id, const QString &text, 00760 const QString &details, 00761 const QString &caption) 00762 { 00763 KMessageBox_queue = true; 00764 (void) detailedErrorWId(parent_id, text, details, caption); 00765 KMessageBox_queue = false; 00766 } 00767 00768 00769 void 00770 KMessageBox::sorry(QWidget *parent, const QString &text, 00771 const QString &caption, int options) 00772 { 00773 return sorryWId( parent ? parent->winId() : 0, text, caption, options ); 00774 } 00775 00776 void 00777 KMessageBox::sorryWId(WId parent_id, const QString &text, 00778 const QString &caption, int options) 00779 { 00780 QWidget* parent = QWidget::find( parent_id ); 00781 KDialogBase *dialog= new KDialogBase( 00782 caption.isEmpty() ? i18n("Sorry") : caption, 00783 KDialogBase::Yes, 00784 KDialogBase::Yes, KDialogBase::Yes, 00785 parent, "sorry", true, true, 00786 KStdGuiItem::ok() ); 00787 if( parent == NULL && parent_id != 0 ) 00788 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00789 00790 createKMessageBox(dialog, QMessageBox::Warning, text, QStringList(), QString::null, 0, options); 00791 } 00792 00793 void 00794 KMessageBox::detailedSorry(QWidget *parent, const QString &text, 00795 const QString &details, 00796 const QString &caption, int options) 00797 { 00798 return detailedSorryWId( parent ? parent->winId() : 0, text, details, caption, options ); 00799 } 00800 00801 void 00802 KMessageBox::detailedSorryWId(WId parent_id, const QString &text, 00803 const QString &details, 00804 const QString &caption, int options) 00805 { 00806 QWidget* parent = QWidget::find( parent_id ); 00807 KDialogBase *dialog= new KDialogBase( 00808 caption.isEmpty() ? i18n("Sorry") : caption, 00809 KDialogBase::Yes | KDialogBase::Details, 00810 KDialogBase::Yes, KDialogBase::Yes, 00811 parent, "sorry", true, true, 00812 KStdGuiItem::ok() ); 00813 if( parent == NULL && parent_id != 0 ) 00814 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00815 00816 createKMessageBox(dialog, QMessageBox::Warning, text, QStringList(), QString::null, 0, options, details); 00817 } 00818 00819 void 00820 KMessageBox::information(QWidget *parent,const QString &text, 00821 const QString &caption, const QString &dontShowAgainName, int options) 00822 { 00823 informationList(parent, text, QStringList(), caption, dontShowAgainName, options); 00824 } 00825 00826 void 00827 KMessageBox::informationWId(WId parent_id,const QString &text, 00828 const QString &caption, const QString &dontShowAgainName, int options) 00829 { 00830 informationListWId(parent_id, text, QStringList(), caption, dontShowAgainName, options); 00831 } 00832 00833 void 00834 KMessageBox::informationList(QWidget *parent,const QString &text, const QStringList & strlist, 00835 const QString &caption, const QString &dontShowAgainName, int options) 00836 { 00837 return informationListWId( parent ? parent->winId() : 0, text, strlist, caption, 00838 dontShowAgainName, options ); 00839 } 00840 00841 void 00842 KMessageBox::informationListWId(WId parent_id,const QString &text, const QStringList & strlist, 00843 const QString &caption, const QString &dontShowAgainName, int options) 00844 { 00845 if ( !shouldBeShownContinue(dontShowAgainName) ) 00846 return; 00847 00848 QWidget* parent = QWidget::find( parent_id ); 00849 KDialogBase *dialog= new KDialogBase( 00850 caption.isEmpty() ? i18n("Information") : caption, 00851 KDialogBase::Yes, 00852 KDialogBase::Yes, KDialogBase::Yes, 00853 parent, "information", true, true, 00854 KStdGuiItem::ok() ); 00855 if( parent == NULL && parent_id != 0 ) 00856 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00857 00858 bool checkboxResult = false; 00859 00860 createKMessageBox(dialog, QMessageBox::Information, text, strlist, 00861 dontShowAgainName.isEmpty() ? QString::null : i18n("&Do not show this message again"), 00862 &checkboxResult, options); 00863 00864 if (checkboxResult) 00865 saveDontShowAgainContinue(dontShowAgainName); 00866 } 00867 00868 void 00869 KMessageBox::enableAllMessages() 00870 { 00871 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00872 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00873 if (!config->hasGroup(grpNotifMsgs)) 00874 return; 00875 00876 KConfigGroupSaver saver( config, grpNotifMsgs ); 00877 00878 typedef QMap<QString, QString> configMap; 00879 00880 configMap map = config->entryMap(grpNotifMsgs); 00881 00882 configMap::Iterator it; 00883 for (it = map.begin(); it != map.end(); ++it) 00884 config->deleteEntry( it.key() ); 00885 config->sync(); 00886 } 00887 00888 void 00889 KMessageBox::enableMessage(const QString &dontShowAgainName) 00890 { 00891 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00892 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00893 if (!config->hasGroup(grpNotifMsgs)) 00894 return; 00895 00896 KConfigGroupSaver saver( config, grpNotifMsgs ); 00897 00898 config->deleteEntry(dontShowAgainName); 00899 config->sync(); 00900 } 00901 00902 void 00903 KMessageBox::about(QWidget *parent, const QString &text, 00904 const QString &caption, int options) 00905 { 00906 QString _caption = caption; 00907 if (_caption.isEmpty()) 00908 _caption = i18n("About %1").arg(kapp->caption()); 00909 00910 KDialogBase *dialog = new KDialogBase( 00911 caption, 00912 KDialogBase::Yes, 00913 KDialogBase::Yes, KDialogBase::Yes, 00914 parent, "about", true, true, 00915 KStdGuiItem::ok() ); 00916 00917 QPixmap ret = KApplication::kApplication()->icon(); 00918 if (ret.isNull()) 00919 ret = QMessageBox::standardIcon(QMessageBox::Information); 00920 dialog->setIcon(ret); 00921 00922 createKMessageBox(dialog, ret, text, QStringList(), QString::null, 0, options); 00923 00924 return; 00925 } 00926 00927 int KMessageBox::messageBox( QWidget *parent, DialogType type, const QString &text, 00928 const QString &caption, const KGuiItem &buttonYes, 00929 const KGuiItem &buttonNo, const QString &dontShowAskAgainName, 00930 int options ) 00931 { 00932 return messageBoxWId( parent ? parent->winId() : 0, type, text, caption, 00933 buttonYes, buttonNo, dontShowAskAgainName, options ); 00934 } 00935 00936 int KMessageBox::messageBox( QWidget *parent, DialogType type, const QString &text, 00937 const QString &caption, const KGuiItem &buttonYes, 00938 const KGuiItem &buttonNo, int options ) 00939 { 00940 return messageBoxWId( parent ? parent->winId() : 0, type, text, caption, 00941 buttonYes, buttonNo, QString::null, options ); 00942 } 00943 00944 int KMessageBox::messageBoxWId( WId parent_id, DialogType type, const QString &text, 00945 const QString &caption, const KGuiItem &buttonYes, 00946 const KGuiItem &buttonNo, const QString &dontShow, 00947 int options ) 00948 { 00949 switch (type) { 00950 case QuestionYesNo: 00951 return KMessageBox::questionYesNoWId( parent_id, 00952 text, caption, buttonYes, buttonNo, dontShow, options ); 00953 case QuestionYesNoCancel: 00954 return KMessageBox::questionYesNoCancelWId( parent_id, 00955 text, caption, buttonYes, buttonNo, dontShow, options ); 00956 case WarningYesNo: 00957 return KMessageBox::warningYesNoWId( parent_id, 00958 text, caption, buttonYes, buttonNo, dontShow, options ); 00959 case WarningContinueCancel: 00960 return KMessageBox::warningContinueCancelWId( parent_id, 00961 text, caption, buttonYes.text(), dontShow, options ); 00962 case WarningYesNoCancel: 00963 return KMessageBox::warningYesNoCancelWId( parent_id, 00964 text, caption, buttonYes, buttonNo, dontShow, options ); 00965 case Information: 00966 KMessageBox::informationWId( parent_id, 00967 text, caption, dontShow, options ); 00968 return KMessageBox::Ok; 00969 00970 case Error: 00971 KMessageBox::errorWId( parent_id, text, caption, options ); 00972 return KMessageBox::Ok; 00973 00974 case Sorry: 00975 KMessageBox::sorryWId( parent_id, text, caption, options ); 00976 return KMessageBox::Ok; 00977 } 00978 return KMessageBox::Cancel; 00979 } 00980 00981 void KMessageBox::queuedMessageBox( QWidget *parent, DialogType type, const QString &text, const QString &caption, int options ) 00982 { 00983 return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption, options ); 00984 } 00985 00986 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const QString &text, const QString &caption, int options ) 00987 { 00988 KMessageBox_queue = true; 00989 (void) messageBoxWId(parent_id, type, text, caption, KStdGuiItem::yes(), 00990 KStdGuiItem::no(), QString::null, options); 00991 KMessageBox_queue = false; 00992 } 00993 00994 void KMessageBox::queuedMessageBox( QWidget *parent, DialogType type, const QString &text, const QString &caption ) 00995 { 00996 return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption ); 00997 } 00998 00999 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const QString &text, const QString &caption ) 01000 { 01001 KMessageBox_queue = true; 01002 (void) messageBoxWId(parent_id, type, text, caption); 01003 KMessageBox_queue = false; 01004 }
KDE Logo
This file is part of the documentation for kdeui Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Sep 29 09:43:29 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003