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 static int 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=QString::null) 00144 { 00145 QVBox *topcontents = new QVBox (dialog); 00146 topcontents->setSpacing(KDialog::spacingHint()*2); 00147 topcontents->setMargin(KDialog::marginHint()); 00148 00149 QWidget *contents = new QWidget(topcontents); 00150 QHBoxLayout * lay = new QHBoxLayout(contents); 00151 lay->setSpacing(KDialog::spacingHint()); 00152 00153 QLabel *label1 = new QLabel( contents); 00154 00155 if (icon != QMessageBox::NoIcon) 00156 label1->setPixmap(themedMessageBoxIcon(icon)); 00157 00158 lay->addWidget( label1, 0, Qt::AlignCenter ); 00159 lay->addSpacing(KDialog::spacingHint()); 00160 // Enforce <p>text</p> otherwise the word-wrap doesn't work well 00161 QString qt_text = qrichtextify( text ); 00162 00163 int pref_width = 0; 00164 int pref_height = 0; 00165 // Calculate a proper size for the text. 00166 { 00167 QSimpleRichText rt(qt_text, dialog->font()); 00168 QRect d = KGlobalSettings::desktopGeometry(dialog); 00169 00170 pref_width = d.width() / 3; 00171 rt.setWidth(pref_width); 00172 int used_width = rt.widthUsed(); 00173 pref_height = rt.height(); 00174 if (used_width <= pref_width) 00175 { 00176 while(true) 00177 { 00178 int new_width = (used_width * 9) / 10; 00179 rt.setWidth(new_width); 00180 int new_height = rt.height(); 00181 if (new_height > pref_height) 00182 break; 00183 used_width = rt.widthUsed(); 00184 if (used_width > new_width) 00185 break; 00186 } 00187 pref_width = used_width; 00188 } 00189 else 00190 { 00191 if (used_width > (pref_width *2)) 00192 pref_width = pref_width *2; 00193 else 00194 pref_width = used_width; 00195 } 00196 } 00197 KActiveLabel *label2 = new KActiveLabel( qt_text, contents ); 00198 if ((options & KMessageBox::AllowLink) == 0) 00199 { 00200 QObject::disconnect(label2, SIGNAL(linkClicked(const QString &)), 00201 label2, SLOT(openLink(const QString &))); 00202 } 00203 00204 // We add 10 pixels extra to compensate for some KActiveLabel margins. 00205 // TODO: find out why this is 10. 00206 label2->setFixedSize(QSize(pref_width+10, pref_height)); 00207 lay->addWidget( label2 ); 00208 lay->addStretch(); 00209 00210 KListBox *listbox = 0; 00211 if (!strlist.isEmpty()) 00212 { 00213 listbox=new KListBox( topcontents ); 00214 listbox->insertStringList( strlist ); 00215 listbox->setSelectionMode( QListBox::NoSelection ); 00216 topcontents->setStretchFactor(listbox, 1); 00217 } 00218 00219 QGuardedPtr<QCheckBox> checkbox = 0; 00220 if (!ask.isEmpty()) 00221 { 00222 checkbox = new QCheckBox(ask, topcontents); 00223 } 00224 00225 if (!details.isEmpty()) 00226 { 00227 QVGroupBox *detailsGroup = new QVGroupBox( i18n("Details"), dialog); 00228 if ( details.length() < 512 ) { 00229 KActiveLabel *label3 = new KActiveLabel(qrichtextify(details), 00230 detailsGroup); 00231 label3->setMinimumSize(label3->sizeHint()); 00232 if ((options & KMessageBox::AllowLink) == 0) 00233 { 00234 QObject::disconnect(label3, SIGNAL(linkClicked(const QString &)), 00235 label3, SLOT(openLink(const QString &))); 00236 } 00237 } else { 00238 QTextEdit* te = new QTextEdit(details, QString::null, detailsGroup); 00239 te->setReadOnly( true ); 00240 te->setMinimumHeight( te->fontMetrics().lineSpacing() * 11 ); 00241 } 00242 dialog->setDetailsWidget(detailsGroup); 00243 } 00244 00245 dialog->setMainWidget(topcontents); 00246 dialog->enableButtonSeparator(false); 00247 if (!listbox) 00248 dialog->disableResize(); 00249 00250 const KDialogBase::ButtonCode buttons[] = { 00251 KDialogBase::Help, 00252 KDialogBase::Default, 00253 KDialogBase::Ok, 00254 KDialogBase::Apply, 00255 KDialogBase::Try, 00256 KDialogBase::Cancel, 00257 KDialogBase::Close, 00258 KDialogBase::User1, 00259 KDialogBase::User2, 00260 KDialogBase::User3, 00261 KDialogBase::No, 00262 KDialogBase::Yes, 00263 KDialogBase::Details }; 00264 for( unsigned int i = 0; 00265 i < sizeof( buttons )/sizeof( buttons[ 0 ] ); 00266 ++i ) 00267 if( QPushButton* btn = dialog->actionButton( buttons[ i ] )) 00268 if( btn->isDefault()) 00269 btn->setFocus(); 00270 00271 if ( (options & KMessageBox::Notify) != 0 ) 00272 sendNotification( text, strlist, icon, dialog->topLevelWidget()->winId()); 00273 00274 if (KMessageBox_queue) 00275 { 00276 KDialogQueue::queueDialog(dialog); 00277 return KMessageBox::Cancel; // We have to return something. 00278 } 00279 00280 // We use a QGuardedPtr because the dialog may get deleted 00281 // during exec() if the parent of the dialog gets deleted. 00282 // In that case the guarded ptr will reset to 0. 00283 QGuardedPtr<KDialogBase> guardedDialog = dialog; 00284 00285 int result = guardedDialog->exec(); 00286 if (checkbox && checkboxReturn) 00287 *checkboxReturn = checkbox->isChecked(); 00288 delete (KDialogBase *) guardedDialog; 00289 return result; 00290 } 00291 00292 int 00293 KMessageBox::questionYesNo(QWidget *parent, const QString &text, 00294 const QString &caption, 00295 const KGuiItem &buttonYes, 00296 const KGuiItem &buttonNo, 00297 const QString &dontAskAgainName, 00298 int options) 00299 { 00300 return questionYesNoList(parent, text, QStringList(), caption, 00301 buttonYes, buttonNo, dontAskAgainName, options); 00302 } 00303 00304 int 00305 KMessageBox::questionYesNoWId(WId parent_id, const QString &text, 00306 const QString &caption, 00307 const KGuiItem &buttonYes, 00308 const KGuiItem &buttonNo, 00309 const QString &dontAskAgainName, 00310 int options) 00311 { 00312 return questionYesNoListWId(parent_id, text, QStringList(), caption, 00313 buttonYes, buttonNo, dontAskAgainName, options); 00314 } 00315 00316 bool 00317 KMessageBox::shouldBeShownYesNo(const QString &dontShowAgainName, 00318 ButtonCode &result) 00319 { 00320 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00321 if ( dontShowAgainName.isEmpty() ) return true; 00322 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00323 KConfigGroupSaver saver( config, grpNotifMsgs ); 00324 QString dontAsk = config->readEntry(dontShowAgainName).lower(); 00325 if (dontAsk == "yes") { 00326 result = Yes; 00327 return false; 00328 } 00329 if (dontAsk == "no") { 00330 result = No; 00331 return false; 00332 } 00333 return true; 00334 } 00335 00336 bool 00337 KMessageBox::shouldBeShownContinue(const QString &dontShowAgainName) 00338 { 00339 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00340 if ( dontShowAgainName.isEmpty() ) return true; 00341 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00342 KConfigGroupSaver saver( config, grpNotifMsgs ); 00343 return config->readBoolEntry(dontShowAgainName, true); 00344 } 00345 00346 void 00347 KMessageBox::saveDontShowAgainYesNo(const QString &dontShowAgainName, 00348 ButtonCode result) 00349 { 00350 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00351 if ( dontShowAgainName.isEmpty() ) return; 00352 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00353 KConfigGroupSaver saver( config, grpNotifMsgs ); 00354 config->writeEntry( dontShowAgainName, result==Yes ? "yes" : "no"); 00355 config->sync(); 00356 } 00357 00358 void 00359 KMessageBox::saveDontShowAgainContinue(const QString &dontShowAgainName) 00360 { 00361 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00362 if ( dontShowAgainName.isEmpty() ) return; 00363 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00364 KConfigGroupSaver saver( config, grpNotifMsgs ); 00365 config->writeEntry( dontShowAgainName, false); 00366 config->sync(); 00367 } 00368 00369 KConfig* KMessageBox::againConfig = NULL; 00370 void 00371 KMessageBox::setDontShowAskAgainConfig(KConfig* cfg) 00372 { 00373 againConfig = cfg; 00374 } 00375 00376 int 00377 KMessageBox::questionYesNoList(QWidget *parent, const QString &text, 00378 const QStringList &strlist, 00379 const QString &caption, 00380 const KGuiItem &buttonYes, 00381 const KGuiItem &buttonNo, 00382 const QString &dontAskAgainName, 00383 int options) 00384 { // in order to avoid code duplication, convert to WId, it will be converted back 00385 return questionYesNoListWId( parent ? parent->winId() : 0, text, strlist, 00386 caption, buttonYes, buttonNo, dontAskAgainName, options ); 00387 } 00388 00389 int 00390 KMessageBox::questionYesNoListWId(WId parent_id, const QString &text, 00391 const QStringList &strlist, 00392 const QString &caption, 00393 const KGuiItem &buttonYes, 00394 const KGuiItem &buttonNo, 00395 const QString &dontAskAgainName, 00396 int options) 00397 { 00398 ButtonCode res; 00399 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00400 return res; 00401 00402 QWidget* parent = QWidget::find( parent_id ); 00403 KDialogBase *dialog= new KDialogBase( 00404 caption.isEmpty() ? i18n("Question") : caption, 00405 KDialogBase::Yes | KDialogBase::No, 00406 KDialogBase::Yes, KDialogBase::No, 00407 parent, "questionYesNo", true, true, 00408 buttonYes, buttonNo); 00409 if( parent == NULL && parent_id != 0 ) 00410 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00411 00412 bool checkboxResult = false; 00413 int result = createKMessageBox(dialog, QMessageBox::Information, text, strlist, 00414 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00415 &checkboxResult, options); 00416 res = (result==KDialogBase::Yes ? Yes : No); 00417 00418 if (checkboxResult) 00419 saveDontShowAgainYesNo(dontAskAgainName, res); 00420 return res; 00421 } 00422 00423 int 00424 KMessageBox::questionYesNoCancel(QWidget *parent, 00425 const QString &text, 00426 const QString &caption, 00427 const KGuiItem &buttonYes, 00428 const KGuiItem &buttonNo, 00429 const QString &dontAskAgainName, 00430 int options) 00431 { 00432 return questionYesNoCancelWId( parent ? parent->winId() : 0, text, caption, buttonYes, buttonNo, 00433 dontAskAgainName, options ); 00434 } 00435 00436 int 00437 KMessageBox::questionYesNoCancelWId(WId parent_id, 00438 const QString &text, 00439 const QString &caption, 00440 const KGuiItem &buttonYes, 00441 const KGuiItem &buttonNo, 00442 const QString &dontAskAgainName, 00443 int options) 00444 { 00445 ButtonCode res; 00446 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00447 return res; 00448 00449 QWidget* parent = QWidget::find( parent_id ); 00450 KDialogBase *dialog= new KDialogBase( 00451 caption.isEmpty() ? i18n("Question") : caption, 00452 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, 00453 KDialogBase::Yes, KDialogBase::Cancel, 00454 parent, "questionYesNoCancel", true, true, 00455 buttonYes, buttonNo); 00456 if( parent == NULL && parent_id != 0 ) 00457 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00458 00459 bool checkboxResult = false; 00460 int result = createKMessageBox(dialog, QMessageBox::Information, 00461 text, QStringList(), 00462 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00463 &checkboxResult, options); 00464 if ( result==KDialogBase::Cancel ) return Cancel; 00465 res = (result==KDialogBase::Yes ? Yes : No); 00466 00467 if (checkboxResult) 00468 saveDontShowAgainYesNo(dontAskAgainName, res); 00469 return res; 00470 } 00471 00472 int 00473 KMessageBox::warningYesNo(QWidget *parent, const QString &text, 00474 const QString &caption, 00475 const KGuiItem &buttonYes, 00476 const KGuiItem &buttonNo, 00477 const QString &dontAskAgainName, 00478 int options) 00479 { 00480 return warningYesNoList(parent, text, QStringList(), caption, 00481 buttonYes, buttonNo, dontAskAgainName, options); 00482 } 00483 00484 int 00485 KMessageBox::warningYesNoWId(WId parent_id, const QString &text, 00486 const QString &caption, 00487 const KGuiItem &buttonYes, 00488 const KGuiItem &buttonNo, 00489 const QString &dontAskAgainName, 00490 int options) 00491 { 00492 return warningYesNoListWId(parent_id, text, QStringList(), caption, 00493 buttonYes, buttonNo, dontAskAgainName, options); 00494 } 00495 00496 int 00497 KMessageBox::warningYesNoList(QWidget *parent, const QString &text, 00498 const QStringList &strlist, 00499 const QString &caption, 00500 const KGuiItem &buttonYes, 00501 const KGuiItem &buttonNo, 00502 const QString &dontAskAgainName, 00503 int options) 00504 { 00505 return warningYesNoListWId( parent ? parent->winId() : 0, text, strlist, caption, 00506 buttonYes, buttonNo, dontAskAgainName, options ); 00507 } 00508 00509 int 00510 KMessageBox::warningYesNoListWId(WId parent_id, const QString &text, 00511 const QStringList &strlist, 00512 const QString &caption, 00513 const KGuiItem &buttonYes, 00514 const KGuiItem &buttonNo, 00515 const QString &dontAskAgainName, 00516 int options) 00517 { 00518 // warningYesNo and warningYesNoList are always "dangerous" 00519 // ### Remove this line for KDE 4, when the 'options' default parameter 00520 // takes effects. 00521 options |= Dangerous; 00522 00523 ButtonCode res; 00524 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00525 return res; 00526 00527 QWidget* parent = QWidget::find( parent_id ); 00528 KDialogBase *dialog= new KDialogBase( 00529 caption.isEmpty() ? i18n("Warning") : caption, 00530 KDialogBase::Yes | KDialogBase::No, 00531 KDialogBase::No, KDialogBase::No, 00532 parent, "warningYesNoList", true, true, 00533 buttonYes, buttonNo); 00534 if( parent == NULL && parent_id != 0 ) 00535 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00536 00537 bool checkboxResult = false; 00538 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00539 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00540 &checkboxResult, options); 00541 res = (result==KDialogBase::Yes ? Yes : No); 00542 00543 if (checkboxResult) 00544 saveDontShowAgainYesNo(dontAskAgainName, res); 00545 return res; 00546 } 00547 00548 int 00549 KMessageBox::warningContinueCancel(QWidget *parent, 00550 const QString &text, 00551 const QString &caption, 00552 const KGuiItem &buttonContinue, 00553 const QString &dontAskAgainName, 00554 int options) 00555 { 00556 return warningContinueCancelList(parent, text, QStringList(), caption, 00557 buttonContinue, dontAskAgainName, options); 00558 } 00559 00560 int 00561 KMessageBox::warningContinueCancelWId(WId parent_id, 00562 const QString &text, 00563 const QString &caption, 00564 const KGuiItem &buttonContinue, 00565 const QString &dontAskAgainName, 00566 int options) 00567 { 00568 return warningContinueCancelListWId(parent_id, text, QStringList(), caption, 00569 buttonContinue, dontAskAgainName, options); 00570 } 00571 00572 int 00573 KMessageBox::warningContinueCancelList(QWidget *parent, const QString &text, 00574 const QStringList &strlist, 00575 const QString &caption, 00576 const KGuiItem &buttonContinue, 00577 const QString &dontAskAgainName, 00578 int options) 00579 { 00580 return warningContinueCancelListWId( parent ? parent->winId() : 0, text, strlist, 00581 caption, buttonContinue, dontAskAgainName, options ); 00582 } 00583 00584 int 00585 KMessageBox::warningContinueCancelListWId(WId parent_id, const QString &text, 00586 const QStringList &strlist, 00587 const QString &caption, 00588 const KGuiItem &buttonContinue, 00589 const QString &dontAskAgainName, 00590 int options) 00591 { 00592 if ( !shouldBeShownContinue(dontAskAgainName) ) 00593 return Continue; 00594 00595 QWidget* parent = QWidget::find( parent_id ); 00596 KDialogBase *dialog= new KDialogBase( 00597 caption.isEmpty() ? i18n("Warning") : caption, 00598 KDialogBase::Yes | KDialogBase::No, 00599 KDialogBase::Yes, KDialogBase::No, 00600 parent, "warningYesNo", true, true, 00601 buttonContinue, KStdGuiItem::cancel() ); 00602 if( parent == NULL && parent_id != 0 ) 00603 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00604 00605 bool checkboxResult = false; 00606 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00607 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00608 &checkboxResult, options); 00609 00610 if ( result==KDialogBase::No ) 00611 return Cancel; 00612 if (checkboxResult) 00613 saveDontShowAgainContinue(dontAskAgainName); 00614 return Continue; 00615 } 00616 00617 int 00618 KMessageBox::warningYesNoCancel(QWidget *parent, const QString &text, 00619 const QString &caption, 00620 const KGuiItem &buttonYes, 00621 const KGuiItem &buttonNo, 00622 const QString &dontAskAgainName, 00623 int options) 00624 { 00625 return warningYesNoCancelList(parent, text, QStringList(), caption, 00626 buttonYes, buttonNo, dontAskAgainName, options); 00627 } 00628 00629 int 00630 KMessageBox::warningYesNoCancelWId(WId parent_id, const QString &text, 00631 const QString &caption, 00632 const KGuiItem &buttonYes, 00633 const KGuiItem &buttonNo, 00634 const QString &dontAskAgainName, 00635 int options) 00636 { 00637 return warningYesNoCancelListWId(parent_id, text, QStringList(), caption, 00638 buttonYes, buttonNo, dontAskAgainName, options); 00639 } 00640 00641 int 00642 KMessageBox::warningYesNoCancelList(QWidget *parent, const QString &text, 00643 const QStringList &strlist, 00644 const QString &caption, 00645 const KGuiItem &buttonYes, 00646 const KGuiItem &buttonNo, 00647 const QString &dontAskAgainName, 00648 int options) 00649 { 00650 return warningYesNoCancelListWId( parent ? parent->winId() : 0, text, strlist, 00651 caption, buttonYes, buttonNo, dontAskAgainName, options ); 00652 } 00653 00654 int 00655 KMessageBox::warningYesNoCancelListWId(WId parent_id, const QString &text, 00656 const QStringList &strlist, 00657 const QString &caption, 00658 const KGuiItem &buttonYes, 00659 const KGuiItem &buttonNo, 00660 const QString &dontAskAgainName, 00661 int options) 00662 { 00663 ButtonCode res; 00664 if ( !shouldBeShownYesNo(dontAskAgainName, res) ) 00665 return res; 00666 00667 QWidget* parent = QWidget::find( parent_id ); 00668 KDialogBase *dialog= new KDialogBase( 00669 caption.isEmpty() ? i18n("Warning") : caption, 00670 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, 00671 KDialogBase::Yes, KDialogBase::Cancel, 00672 parent, "warningYesNoCancel", true, true, 00673 buttonYes, buttonNo); 00674 if( parent == NULL && parent_id != 0 ) 00675 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00676 00677 bool checkboxResult = false; 00678 int result = createKMessageBox(dialog, QMessageBox::Warning, text, strlist, 00679 dontAskAgainName.isEmpty() ? QString::null : i18n("&Do not ask again"), 00680 &checkboxResult, options); 00681 if ( result==KDialogBase::Cancel ) return Cancel; 00682 res = (result==KDialogBase::Yes ? Yes : No); 00683 00684 if (checkboxResult) 00685 saveDontShowAgainYesNo(dontAskAgainName, res); 00686 return res; 00687 } 00688 00689 void 00690 KMessageBox::error(QWidget *parent, const QString &text, 00691 const QString &caption, int options) 00692 { 00693 return errorWId( parent ? parent->winId() : 0, text, caption, options ); 00694 } 00695 00696 void 00697 KMessageBox::errorWId(WId parent_id, const QString &text, 00698 const QString &caption, int options) 00699 { 00700 QWidget* parent = QWidget::find( parent_id ); 00701 KDialogBase *dialog= new KDialogBase( 00702 caption.isEmpty() ? i18n("Error") : caption, 00703 KDialogBase::Yes, 00704 KDialogBase::Yes, KDialogBase::Yes, 00705 parent, "error", true, true, 00706 KStdGuiItem::ok() ); 00707 if( parent == NULL && parent_id != 0 ) 00708 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00709 00710 createKMessageBox(dialog, QMessageBox::Critical, text, QStringList(), QString::null, 0, options); 00711 } 00712 00713 void 00714 KMessageBox::detailedError(QWidget *parent, const QString &text, 00715 const QString &details, 00716 const QString &caption, int options) 00717 { 00718 return detailedErrorWId( parent ? parent->winId() : 0, text, details, caption, options ); 00719 } 00720 00721 void 00722 KMessageBox::detailedErrorWId(WId parent_id, const QString &text, 00723 const QString &details, 00724 const QString &caption, int options) 00725 { 00726 QWidget* parent = QWidget::find( parent_id ); 00727 KDialogBase *dialog= new KDialogBase( 00728 caption.isEmpty() ? i18n("Error") : caption, 00729 KDialogBase::Yes | KDialogBase::Details, 00730 KDialogBase::Yes, KDialogBase::Yes, 00731 parent, "error", true, true, 00732 KStdGuiItem::ok() ); 00733 if( parent == NULL && parent_id != 0 ) 00734 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00735 00736 createKMessageBox(dialog, QMessageBox::Critical, text, QStringList(), QString::null, 0, options, details); 00737 } 00738 00739 void 00740 KMessageBox::queuedDetailedError(QWidget *parent, const QString &text, 00741 const QString &details, 00742 const QString &caption) 00743 { 00744 return queuedDetailedErrorWId( parent ? parent->winId() : 0, text, details, caption ); 00745 } 00746 00747 void 00748 KMessageBox::queuedDetailedErrorWId(WId parent_id, const QString &text, 00749 const QString &details, 00750 const QString &caption) 00751 { 00752 KMessageBox_queue = true; 00753 (void) detailedErrorWId(parent_id, text, details, caption); 00754 KMessageBox_queue = false; 00755 } 00756 00757 00758 void 00759 KMessageBox::sorry(QWidget *parent, const QString &text, 00760 const QString &caption, int options) 00761 { 00762 return sorryWId( parent ? parent->winId() : 0, text, caption, options ); 00763 } 00764 00765 void 00766 KMessageBox::sorryWId(WId parent_id, const QString &text, 00767 const QString &caption, int options) 00768 { 00769 QWidget* parent = QWidget::find( parent_id ); 00770 KDialogBase *dialog= new KDialogBase( 00771 caption.isEmpty() ? i18n("Sorry") : caption, 00772 KDialogBase::Yes, 00773 KDialogBase::Yes, KDialogBase::Yes, 00774 parent, "sorry", true, true, 00775 KStdGuiItem::ok() ); 00776 if( parent == NULL && parent_id != 0 ) 00777 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00778 00779 createKMessageBox(dialog, QMessageBox::Warning, text, QStringList(), QString::null, 0, options); 00780 } 00781 00782 void 00783 KMessageBox::detailedSorry(QWidget *parent, const QString &text, 00784 const QString &details, 00785 const QString &caption, int options) 00786 { 00787 return detailedSorryWId( parent ? parent->winId() : 0, text, details, caption, options ); 00788 } 00789 00790 void 00791 KMessageBox::detailedSorryWId(WId parent_id, const QString &text, 00792 const QString &details, 00793 const QString &caption, int options) 00794 { 00795 QWidget* parent = QWidget::find( parent_id ); 00796 KDialogBase *dialog= new KDialogBase( 00797 caption.isEmpty() ? i18n("Sorry") : caption, 00798 KDialogBase::Yes | KDialogBase::Details, 00799 KDialogBase::Yes, KDialogBase::Yes, 00800 parent, "sorry", true, true, 00801 KStdGuiItem::ok() ); 00802 if( parent == NULL && parent_id != 0 ) 00803 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00804 00805 createKMessageBox(dialog, QMessageBox::Warning, text, QStringList(), QString::null, 0, options, details); 00806 } 00807 00808 void 00809 KMessageBox::information(QWidget *parent,const QString &text, 00810 const QString &caption, const QString &dontShowAgainName, int options) 00811 { 00812 informationList(parent, text, QStringList(), caption, dontShowAgainName, options); 00813 } 00814 00815 void 00816 KMessageBox::informationWId(WId parent_id,const QString &text, 00817 const QString &caption, const QString &dontShowAgainName, int options) 00818 { 00819 informationListWId(parent_id, text, QStringList(), caption, dontShowAgainName, options); 00820 } 00821 00822 void 00823 KMessageBox::informationList(QWidget *parent,const QString &text, const QStringList & strlist, 00824 const QString &caption, const QString &dontShowAgainName, int options) 00825 { 00826 return informationListWId( parent ? parent->winId() : 0, text, strlist, caption, 00827 dontShowAgainName, options ); 00828 } 00829 00830 void 00831 KMessageBox::informationListWId(WId parent_id,const QString &text, const QStringList & strlist, 00832 const QString &caption, const QString &dontShowAgainName, int options) 00833 { 00834 if ( !shouldBeShownContinue(dontShowAgainName) ) 00835 return; 00836 00837 QWidget* parent = QWidget::find( parent_id ); 00838 KDialogBase *dialog= new KDialogBase( 00839 caption.isEmpty() ? i18n("Information") : caption, 00840 KDialogBase::Yes, 00841 KDialogBase::Yes, KDialogBase::Yes, 00842 parent, "information", true, true, 00843 KStdGuiItem::ok() ); 00844 if( parent == NULL && parent_id != 0 ) 00845 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id ); 00846 00847 bool checkboxResult = false; 00848 00849 createKMessageBox(dialog, QMessageBox::Information, text, strlist, 00850 dontShowAgainName.isEmpty() ? QString::null : i18n("&Do not show this message again"), 00851 &checkboxResult, options); 00852 00853 if (checkboxResult) 00854 saveDontShowAgainContinue(dontShowAgainName); 00855 } 00856 00857 void 00858 KMessageBox::enableAllMessages() 00859 { 00860 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00861 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00862 if (!config->hasGroup(grpNotifMsgs)) 00863 return; 00864 00865 KConfigGroupSaver saver( config, grpNotifMsgs ); 00866 00867 typedef QMap<QString, QString> configMap; 00868 00869 configMap map = config->entryMap(grpNotifMsgs); 00870 00871 configMap::Iterator it; 00872 for (it = map.begin(); it != map.end(); ++it) 00873 config->deleteEntry( it.key() ); 00874 config->sync(); 00875 } 00876 00877 void 00878 KMessageBox::enableMessage(const QString &dontShowAgainName) 00879 { 00880 KConfig *config = againConfig ? againConfig : KGlobal::config(); 00881 QString grpNotifMsgs = QString::fromLatin1("Notification Messages"); 00882 if (!config->hasGroup(grpNotifMsgs)) 00883 return; 00884 00885 KConfigGroupSaver saver( config, grpNotifMsgs ); 00886 00887 config->deleteEntry(dontShowAgainName); 00888 config->sync(); 00889 } 00890 00891 void 00892 KMessageBox::about(QWidget *parent, const QString &text, 00893 const QString &caption, int /* options */) 00894 { 00895 QString _caption = caption; 00896 if (_caption.isEmpty()) 00897 _caption = i18n("About %1").arg(kapp->caption()); 00898 00899 QMessageBox *box = new QMessageBox( _caption, text, 00900 QMessageBox::Information, 00901 QMessageBox::Ok | QMessageBox::Default | QMessageBox::Escape, 00902 0, 0, 00903 parent, "about" ); 00904 00905 box->setButtonText(QMessageBox::Ok, i18n("&OK")); 00906 box->setIconPixmap(kapp->icon()); 00907 box->adjustSize(); 00908 box->setFixedSize(box->size()); 00909 00910 box->exec(); 00911 delete box; 00912 return; 00913 } 00914 00915 int KMessageBox::messageBox( QWidget *parent, DialogType type, const QString &text, 00916 const QString &caption, const KGuiItem &buttonYes, 00917 const KGuiItem &buttonNo, const QString &dontShowAskAgainName, 00918 int options ) 00919 { 00920 return messageBoxWId( parent ? parent->winId() : 0, type, text, caption, 00921 buttonYes, buttonNo, dontShowAskAgainName, options ); 00922 } 00923 00924 int KMessageBox::messageBox( QWidget *parent, DialogType type, const QString &text, 00925 const QString &caption, const KGuiItem &buttonYes, 00926 const KGuiItem &buttonNo, int options ) 00927 { 00928 return messageBoxWId( parent ? parent->winId() : 0, type, text, caption, 00929 buttonYes, buttonNo, QString::null, options ); 00930 } 00931 00932 int KMessageBox::messageBoxWId( WId parent_id, DialogType type, const QString &text, 00933 const QString &caption, const KGuiItem &buttonYes, 00934 const KGuiItem &buttonNo, const QString &dontShow, 00935 int options ) 00936 { 00937 switch (type) { 00938 case QuestionYesNo: 00939 return KMessageBox::questionYesNoWId( parent_id, 00940 text, caption, buttonYes, buttonNo, dontShow, options ); 00941 case QuestionYesNoCancel: 00942 return KMessageBox::questionYesNoCancelWId( parent_id, 00943 text, caption, buttonYes, buttonNo, dontShow, options ); 00944 case WarningYesNo: 00945 return KMessageBox::warningYesNoWId( parent_id, 00946 text, caption, buttonYes, buttonNo, dontShow, options ); 00947 case WarningContinueCancel: 00948 return KMessageBox::warningContinueCancelWId( parent_id, 00949 text, caption, buttonYes.text(), dontShow, options ); 00950 case WarningYesNoCancel: 00951 return KMessageBox::warningYesNoCancelWId( parent_id, 00952 text, caption, buttonYes, buttonNo, dontShow, options ); 00953 case Information: 00954 KMessageBox::informationWId( parent_id, 00955 text, caption, dontShow, options ); 00956 return KMessageBox::Ok; 00957 00958 case Error: 00959 KMessageBox::errorWId( parent_id, text, caption, options ); 00960 return KMessageBox::Ok; 00961 00962 case Sorry: 00963 KMessageBox::sorryWId( parent_id, text, caption, options ); 00964 return KMessageBox::Ok; 00965 } 00966 return KMessageBox::Cancel; 00967 } 00968 00969 void KMessageBox::queuedMessageBox( QWidget *parent, DialogType type, const QString &text, const QString &caption, int options ) 00970 { 00971 return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption, options ); 00972 } 00973 00974 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const QString &text, const QString &caption, int options ) 00975 { 00976 KMessageBox_queue = true; 00977 (void) messageBoxWId(parent_id, type, text, caption, KStdGuiItem::yes(), 00978 KStdGuiItem::no(), QString::null, options); 00979 KMessageBox_queue = false; 00980 } 00981 00982 void KMessageBox::queuedMessageBox( QWidget *parent, DialogType type, const QString &text, const QString &caption ) 00983 { 00984 return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption ); 00985 } 00986 00987 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const QString &text, const QString &caption ) 00988 { 00989 KMessageBox_queue = true; 00990 (void) messageBoxWId(parent_id, type, text, caption); 00991 KMessageBox_queue = false; 00992 }
KDE Logo
This file is part of the documentation for kdeui Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 20 09:48:45 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003