00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
00161 QString qt_text = qrichtextify( text );
00162
00163 int pref_width = 0;
00164 int pref_height = 0;
00165
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
00205
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;
00278 }
00279
00280
00281
00282
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 {
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
00519
00520
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 )
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 }