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
#ifdef Q_WS_X11
00049
#include <X11/Xlib.h>
00050
#endif
00051
00061
static bool KMessageBox_queue =
false;
00062
00063
static QPixmap themedMessageBoxIcon(QMessageBox::Icon icon)
00064 {
00065
QString icon_name;
00066
00067
switch(icon)
00068 {
00069
case QMessageBox::NoIcon:
00070
return QPixmap();
00071
break;
00072
case QMessageBox::Information:
00073 icon_name =
"messagebox_info";
00074
break;
00075
case QMessageBox::Warning:
00076 icon_name =
"messagebox_warning";
00077
break;
00078
case QMessageBox::Critical:
00079 icon_name =
"messagebox_critical";
00080
break;
00081
default:
00082
break;
00083 }
00084
00085
QPixmap ret =
KApplication::kApplication()->
iconLoader()->
loadIcon(icon_name, KIcon::NoGroup, KIcon::SizeMedium, KIcon::DefaultState, 0,
true);
00086
00087
if (ret.isNull())
00088
return QMessageBox::standardIcon(icon);
00089
else
00090
return ret;
00091 }
00092
00093
static void sendNotification(
QString message,
00094
const QStringList& strlist,
00095 QMessageBox::Icon icon,
00096 WId parent_id )
00097 {
00098
00099
QString messageType;
00100
switch ( icon )
00101 {
00102
case QMessageBox::Warning:
00103 messageType =
"messageWarning";
00104
break;
00105
case QMessageBox::Critical:
00106 messageType =
"messageCritical";
00107
break;
00108
#if QT_VERSION >= 0x030200
00109
case QMessageBox::Question:
00110 messageType =
"messageQuestion";
00111
break;
00112
#endif
00113
default:
00114 messageType =
"messageInformation";
00115
break;
00116 }
00117
00118
if ( !strlist.isEmpty() )
00119 {
00120
for ( QStringList::ConstIterator it = strlist.begin(); it != strlist.end(); ++it )
00121 message +=
"\n" + *it;
00122 }
00123
00124
if ( !message.isEmpty() )
00125
KNotifyClient::event( (
int)parent_id, messageType, message );
00126 }
00127
00128
static QString qrichtextify(
const QString& text )
00129 {
00130
if ( text.isEmpty() || text[0] ==
'<' )
00131
return text;
00132
00133
QStringList lines = QStringList::split(
'\n', text);
00134
for(QStringList::Iterator it = lines.begin(); it != lines.end(); ++it)
00135 {
00136 *it = QStyleSheet::convertFromPlainText( *it, QStyleSheetItem::WhiteSpaceNormal );
00137 }
00138
00139
return lines.join(QString::null);
00140 }
00141
00142 int KMessageBox::createKMessageBox(
KDialogBase *dialog, QMessageBox::Icon icon,
00143
const QString &text,
const QStringList &strlist,
00144
const QString &ask,
bool *checkboxReturn,
00145
int options,
const QString &details)
00146 {
00147
return createKMessageBox(dialog, themedMessageBoxIcon(icon), text, strlist,
00148 ask, checkboxReturn, options, details, icon);
00149 }
00150
00151 int KMessageBox::createKMessageBox(
KDialogBase *dialog,
QPixmap icon,
00152
const QString &text,
const QStringList &strlist,
00153
const QString &ask,
bool *checkboxReturn,
int options,
00154
const QString &details, QMessageBox::Icon notifyType)
00155 {
00156
QVBox *topcontents =
new QVBox (dialog);
00157 topcontents->setSpacing(KDialog::spacingHint()*2);
00158 topcontents->setMargin(KDialog::marginHint());
00159
00160
QWidget *contents =
new QWidget(topcontents);
00161
QHBoxLayout * lay =
new QHBoxLayout(contents);
00162 lay->setSpacing(KDialog::spacingHint());
00163
00164
QLabel *label1 =
new QLabel( contents);
00165
00166
if (!icon.isNull())
00167 label1->setPixmap(icon);
00168
00169 lay->addWidget( label1, 0, Qt::AlignCenter );
00170 lay->addSpacing(KDialog::spacingHint());
00171
00172
QString qt_text = qrichtextify( text );
00173
00174
int pref_width = 0;
00175
int pref_height = 0;
00176
00177 {
00178
QSimpleRichText rt(qt_text, dialog->font());
00179
QRect d = KGlobalSettings::desktopGeometry(dialog);
00180
00181 pref_width = d.width() / 3;
00182 rt.setWidth(pref_width);
00183
int used_width = rt.widthUsed();
00184 pref_height = rt.height();
00185
if (3*pref_height > 2*d.height())
00186 {
00187
00188 pref_width = d.width() / 2;
00189 rt.setWidth(pref_width);
00190 used_width = rt.widthUsed();
00191 pref_height = rt.height();
00192 }
00193
if (used_width <= pref_width)
00194 {
00195
while(
true)
00196 {
00197
int new_width = (used_width * 9) / 10;
00198 rt.setWidth(new_width);
00199
int new_height = rt.height();
00200
if (new_height > pref_height)
00201
break;
00202 used_width = rt.widthUsed();
00203
if (used_width > new_width)
00204
break;
00205 }
00206 pref_width = used_width;
00207 }
00208
else
00209 {
00210
if (used_width > (pref_width *2))
00211 pref_width = pref_width *2;
00212
else
00213 pref_width = used_width;
00214 }
00215 }
00216
KActiveLabel *label2 =
new KActiveLabel( qt_text, contents );
00217
if (!(options & KMessageBox::AllowLink))
00218 {
00219 QObject::disconnect(label2, SIGNAL(linkClicked(
const QString &)),
00220 label2, SLOT(openLink(
const QString &)));
00221 }
00222
00223
00224
00225 label2->setFixedSize(
QSize(pref_width+10, pref_height));
00226 lay->addWidget( label2 );
00227 lay->addStretch();
00228
00229
KListBox *listbox = 0;
00230
if (!strlist.isEmpty())
00231 {
00232 listbox=
new KListBox( topcontents );
00233 listbox->insertStringList( strlist );
00234 listbox->setSelectionMode( QListBox::NoSelection );
00235 topcontents->setStretchFactor(listbox, 1);
00236 }
00237
00238
QGuardedPtr<QCheckBox> checkbox = 0;
00239
if (!ask.isEmpty())
00240 {
00241 checkbox =
new QCheckBox(ask, topcontents);
00242
if (checkboxReturn)
00243 checkbox->setChecked(*checkboxReturn);
00244 }
00245
00246
if (!details.isEmpty())
00247 {
00248
QVGroupBox *detailsGroup =
new QVGroupBox( i18n(
"Details"), dialog);
00249
if ( details.length() < 512 ) {
00250 KActiveLabel *label3 =
new KActiveLabel(qrichtextify(details),
00251 detailsGroup);
00252 label3->setMinimumSize(label3->
sizeHint());
00253
if (!(options & KMessageBox::AllowLink))
00254 {
00255 QObject::disconnect(label3, SIGNAL(linkClicked(
const QString &)),
00256 label3, SLOT(openLink(
const QString &)));
00257 }
00258 }
else {
00259
QTextEdit* te =
new QTextEdit(details, QString::null, detailsGroup);
00260 te->setReadOnly(
true );
00261 te->setMinimumHeight( te->fontMetrics().lineSpacing() * 11 );
00262 }
00263 dialog->
setDetailsWidget(detailsGroup);
00264 }
00265
00266 dialog->
setMainWidget(topcontents);
00267 dialog->
enableButtonSeparator(
false);
00268
if (!listbox)
00269 dialog->
disableResize();
00270
00271
const KDialogBase::ButtonCode buttons[] = {
00272 KDialogBase::Help,
00273 KDialogBase::Default,
00274 KDialogBase::Ok,
00275 KDialogBase::Apply,
00276 KDialogBase::Try,
00277 KDialogBase::Cancel,
00278 KDialogBase::Close,
00279 KDialogBase::User1,
00280 KDialogBase::User2,
00281 KDialogBase::User3,
00282 KDialogBase::No,
00283 KDialogBase::Yes,
00284 KDialogBase::Details };
00285
for(
unsigned int i = 0;
00286 i <
sizeof( buttons )/
sizeof( buttons[ 0 ] );
00287 ++i )
00288
if(
QPushButton* btn = dialog->
actionButton( buttons[ i ] ))
00289
if( btn->isDefault())
00290 btn->setFocus();
00291
00292
if ( (options & KMessageBox::Notify) )
00293 sendNotification( text, strlist, notifyType, dialog->topLevelWidget()->winId());
00294
00295
if (KMessageBox_queue)
00296 {
00297 KDialogQueue::queueDialog(dialog);
00298
return KMessageBox::Cancel;
00299 }
00300
00301
if ( (options &
KMessageBox::NoExec) )
00302 {
00303
return KMessageBox::Cancel;
00304 }
00305
00306
00307
00308
00309
QGuardedPtr<KDialogBase> guardedDialog = dialog;
00310
00311
int result = guardedDialog->exec();
00312
if (checkbox && checkboxReturn)
00313 *checkboxReturn = checkbox->isChecked();
00314
delete (
KDialogBase *) guardedDialog;
00315
return result;
00316 }
00317
00318
int
00319 KMessageBox::questionYesNo(
QWidget *parent,
const QString &text,
00320
const QString &caption,
00321
const KGuiItem &buttonYes,
00322
const KGuiItem &buttonNo,
00323
const QString &dontAskAgainName,
00324
int options)
00325 {
00326
return questionYesNoList(parent, text,
QStringList(), caption,
00327 buttonYes, buttonNo, dontAskAgainName, options);
00328 }
00329
00330
int
00331 KMessageBox::questionYesNoWId(WId parent_id,
const QString &text,
00332
const QString &caption,
00333
const KGuiItem &buttonYes,
00334
const KGuiItem &buttonNo,
00335
const QString &dontAskAgainName,
00336
int options)
00337 {
00338
return questionYesNoListWId(parent_id, text,
QStringList(), caption,
00339 buttonYes, buttonNo, dontAskAgainName, options);
00340 }
00341
00342
bool
00343 KMessageBox::shouldBeShownYesNo(
const QString &dontShowAgainName,
00344 ButtonCode &result)
00345 {
00346
if ( dontShowAgainName.isEmpty() )
return true;
00347
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00348
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00349
KConfigGroupSaver saver( config, grpNotifMsgs );
00350
QString dontAsk = config->
readEntry(dontShowAgainName).lower();
00351
if (dontAsk ==
"yes") {
00352 result = Yes;
00353
return false;
00354 }
00355
if (dontAsk ==
"no") {
00356 result = No;
00357
return false;
00358 }
00359
return true;
00360 }
00361
00362
bool
00363 KMessageBox::shouldBeShownContinue(
const QString &dontShowAgainName)
00364 {
00365
if ( dontShowAgainName.isEmpty() )
return true;
00366
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00367
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00368
KConfigGroupSaver saver( config, grpNotifMsgs );
00369
return config->
readBoolEntry(dontShowAgainName,
true);
00370 }
00371
00372
void
00373 KMessageBox::saveDontShowAgainYesNo(
const QString &dontShowAgainName,
00374 ButtonCode result)
00375 {
00376
if ( dontShowAgainName.isEmpty() )
return;
00377
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00378
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00379
KConfigGroupSaver saver( config, grpNotifMsgs );
00380 config->
writeEntry( dontShowAgainName, result==Yes ?
"yes" :
"no",
true, (dontShowAgainName[0] ==
':'));
00381 config->
sync();
00382 }
00383
00384
void
00385 KMessageBox::saveDontShowAgainContinue(
const QString &dontShowAgainName)
00386 {
00387
if ( dontShowAgainName.isEmpty() )
return;
00388
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00389
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00390
KConfigGroupSaver saver( config, grpNotifMsgs );
00391 config->
writeEntry( dontShowAgainName,
false,
true, (dontShowAgainName[0] ==
':'));
00392 config->
sync();
00393 }
00394
00395
KConfig* KMessageBox::againConfig = NULL;
00396
void
00397 KMessageBox::setDontShowAskAgainConfig(
KConfig* cfg)
00398 {
00399 againConfig = cfg;
00400 }
00401
00402
int
00403 KMessageBox::questionYesNoList(
QWidget *parent,
const QString &text,
00404
const QStringList &strlist,
00405
const QString &caption,
00406
const KGuiItem &buttonYes,
00407
const KGuiItem &buttonNo,
00408
const QString &dontAskAgainName,
00409
int options)
00410 {
00411
return questionYesNoListWId( parent ? parent->winId() : 0, text, strlist,
00412 caption, buttonYes, buttonNo, dontAskAgainName, options );
00413 }
00414
00415
int
00416 KMessageBox::questionYesNoListWId(WId parent_id,
const QString &text,
00417
const QStringList &strlist,
00418
const QString &caption,
00419
const KGuiItem &buttonYes,
00420
const KGuiItem &buttonNo,
00421
const QString &dontAskAgainName,
00422
int options)
00423 {
00424
ButtonCode res;
00425
if ( !
shouldBeShownYesNo(dontAskAgainName, res) )
00426
return res;
00427
00428
QWidget* parent = QWidget::find( parent_id );
00429
KDialogBase *dialog=
new KDialogBase(
00430 caption.isEmpty() ? i18n(
"Question") : caption,
00431 KDialogBase::Yes | KDialogBase::No,
00432 KDialogBase::Yes, KDialogBase::No,
00433 parent,
"questionYesNo",
true,
true,
00434 buttonYes, buttonNo);
00435
if( options &
PlainCaption )
00436 dialog->
setPlainCaption( caption );
00437
#ifdef Q_WS_X11
00438
if( parent == NULL && parent_id )
00439 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00440
#endif
00441
00442
bool checkboxResult =
false;
00443
int result =
createKMessageBox(dialog, QMessageBox::Information, text, strlist,
00444 dontAskAgainName.isEmpty() ? QString::null : i18n(
"Do not ask again"),
00445 &checkboxResult, options);
00446 res = (result==KDialogBase::Yes ? Yes : No);
00447
00448
if (checkboxResult)
00449
saveDontShowAgainYesNo(dontAskAgainName, res);
00450
return res;
00451 }
00452
00453
int
00454 KMessageBox::questionYesNoCancel(
QWidget *parent,
00455
const QString &text,
00456
const QString &caption,
00457
const KGuiItem &buttonYes,
00458
const KGuiItem &buttonNo,
00459
const QString &dontAskAgainName,
00460
int options)
00461 {
00462
return questionYesNoCancelWId( parent ? parent->winId() : 0, text, caption, buttonYes, buttonNo,
00463 dontAskAgainName, options );
00464 }
00465
00466
int
00467 KMessageBox::questionYesNoCancelWId(WId parent_id,
00468
const QString &text,
00469
const QString &caption,
00470
const KGuiItem &buttonYes,
00471
const KGuiItem &buttonNo,
00472
const QString &dontAskAgainName,
00473
int options)
00474 {
00475
ButtonCode res;
00476
if ( !
shouldBeShownYesNo(dontAskAgainName, res) )
00477
return res;
00478
00479
QWidget* parent = QWidget::find( parent_id );
00480
KDialogBase *dialog=
new KDialogBase(
00481 caption.isEmpty() ? i18n(
"Question") : caption,
00482 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
00483 KDialogBase::Yes, KDialogBase::Cancel,
00484 parent,
"questionYesNoCancel",
true,
true,
00485 buttonYes, buttonNo);
00486
if( options &
PlainCaption )
00487 dialog->
setPlainCaption( caption );
00488
#ifdef Q_WS_X11
00489
if( parent == NULL && parent_id )
00490 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00491
#endif
00492
00493
bool checkboxResult =
false;
00494
int result =
createKMessageBox(dialog, QMessageBox::Information,
00495 text,
QStringList(),
00496 dontAskAgainName.isEmpty() ? QString::null : i18n(
"Do not ask again"),
00497 &checkboxResult, options);
00498
if ( result==KDialogBase::Cancel )
return Cancel;
00499 res = (result==KDialogBase::Yes ? Yes : No);
00500
00501
if (checkboxResult)
00502
saveDontShowAgainYesNo(dontAskAgainName, res);
00503
return res;
00504 }
00505
00506
int
00507 KMessageBox::warningYesNo(
QWidget *parent,
const QString &text,
00508
const QString &caption,
00509
const KGuiItem &buttonYes,
00510
const KGuiItem &buttonNo,
00511
const QString &dontAskAgainName,
00512
int options)
00513 {
00514
return warningYesNoList(parent, text,
QStringList(), caption,
00515 buttonYes, buttonNo, dontAskAgainName, options);
00516 }
00517
00518
int
00519 KMessageBox::warningYesNoWId(WId parent_id,
const QString &text,
00520
const QString &caption,
00521
const KGuiItem &buttonYes,
00522
const KGuiItem &buttonNo,
00523
const QString &dontAskAgainName,
00524
int options)
00525 {
00526
return warningYesNoListWId(parent_id, text,
QStringList(), caption,
00527 buttonYes, buttonNo, dontAskAgainName, options);
00528 }
00529
00530
int
00531 KMessageBox::warningYesNoList(
QWidget *parent,
const QString &text,
00532
const QStringList &strlist,
00533
const QString &caption,
00534
const KGuiItem &buttonYes,
00535
const KGuiItem &buttonNo,
00536
const QString &dontAskAgainName,
00537
int options)
00538 {
00539
return warningYesNoListWId( parent ? parent->winId() : 0, text, strlist, caption,
00540 buttonYes, buttonNo, dontAskAgainName, options );
00541 }
00542
00543
int
00544 KMessageBox::warningYesNoListWId(WId parent_id,
const QString &text,
00545
const QStringList &strlist,
00546
const QString &caption,
00547
const KGuiItem &buttonYes,
00548
const KGuiItem &buttonNo,
00549
const QString &dontAskAgainName,
00550
int options)
00551 {
00552
00553
00554
00555 options |= Dangerous;
00556
00557
ButtonCode res;
00558
if ( !
shouldBeShownYesNo(dontAskAgainName, res) )
00559
return res;
00560
00561
QWidget* parent = QWidget::find( parent_id );
00562
KDialogBase *dialog=
new KDialogBase(
00563 caption.isEmpty() ? i18n(
"Warning") : caption,
00564 KDialogBase::Yes | KDialogBase::No,
00565 KDialogBase::No, KDialogBase::No,
00566 parent,
"warningYesNoList",
true,
true,
00567 buttonYes, buttonNo);
00568
if( options &
PlainCaption )
00569 dialog->
setPlainCaption( caption );
00570
#ifdef Q_WS_X11
00571
if( parent == NULL && parent_id )
00572 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00573
#endif
00574
00575
bool checkboxResult =
false;
00576
int result =
createKMessageBox(dialog, QMessageBox::Warning, text, strlist,
00577 dontAskAgainName.isEmpty() ? QString::null : i18n(
"Do not ask again"),
00578 &checkboxResult, options);
00579 res = (result==KDialogBase::Yes ? Yes : No);
00580
00581
if (checkboxResult)
00582
saveDontShowAgainYesNo(dontAskAgainName, res);
00583
return res;
00584 }
00585
00586
int
00587 KMessageBox::warningContinueCancel(
QWidget *parent,
00588
const QString &text,
00589
const QString &caption,
00590
const KGuiItem &buttonContinue,
00591
const QString &dontAskAgainName,
00592
int options)
00593 {
00594
return warningContinueCancelList(parent, text,
QStringList(), caption,
00595 buttonContinue, dontAskAgainName, options);
00596 }
00597
00598
int
00599 KMessageBox::warningContinueCancelWId(WId parent_id,
00600
const QString &text,
00601
const QString &caption,
00602
const KGuiItem &buttonContinue,
00603
const QString &dontAskAgainName,
00604
int options)
00605 {
00606
return warningContinueCancelListWId(parent_id, text,
QStringList(), caption,
00607 buttonContinue, dontAskAgainName, options);
00608 }
00609
00610
int
00611 KMessageBox::warningContinueCancelList(
QWidget *parent,
const QString &text,
00612
const QStringList &strlist,
00613
const QString &caption,
00614
const KGuiItem &buttonContinue,
00615
const QString &dontAskAgainName,
00616
int options)
00617 {
00618
return warningContinueCancelListWId( parent ? parent->winId() : 0, text, strlist,
00619 caption, buttonContinue, dontAskAgainName, options );
00620 }
00621
00622
int
00623 KMessageBox::warningContinueCancelListWId(WId parent_id,
const QString &text,
00624
const QStringList &strlist,
00625
const QString &caption,
00626
const KGuiItem &buttonContinue,
00627
const QString &dontAskAgainName,
00628
int options)
00629 {
00630
if ( !
shouldBeShownContinue(dontAskAgainName) )
00631
return Continue;
00632
00633
QWidget* parent = QWidget::find( parent_id );
00634
KDialogBase *dialog=
new KDialogBase(
00635 caption.isEmpty() ? i18n(
"Warning") : caption,
00636 KDialogBase::Yes | KDialogBase::No,
00637 KDialogBase::Yes, KDialogBase::No,
00638 parent,
"warningYesNo",
true,
true,
00639 buttonContinue, KStdGuiItem::cancel() );
00640
if( options &
PlainCaption )
00641 dialog->
setPlainCaption( caption );
00642
#ifdef Q_WS_X11
00643
if( parent == NULL && parent_id )
00644 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00645
#endif
00646
00647
bool checkboxResult =
false;
00648
int result =
createKMessageBox(dialog, QMessageBox::Warning, text, strlist,
00649 dontAskAgainName.isEmpty() ? QString::null : i18n(
"Do not ask again"),
00650 &checkboxResult, options);
00651
00652
if ( result==KDialogBase::No )
00653
return Cancel;
00654
if (checkboxResult)
00655
saveDontShowAgainContinue(dontAskAgainName);
00656
return Continue;
00657 }
00658
00659
int
00660 KMessageBox::warningYesNoCancel(
QWidget *parent,
const QString &text,
00661
const QString &caption,
00662
const KGuiItem &buttonYes,
00663
const KGuiItem &buttonNo,
00664
const QString &dontAskAgainName,
00665
int options)
00666 {
00667
return warningYesNoCancelList(parent, text,
QStringList(), caption,
00668 buttonYes, buttonNo, dontAskAgainName, options);
00669 }
00670
00671
int
00672 KMessageBox::warningYesNoCancelWId(WId parent_id,
const QString &text,
00673
const QString &caption,
00674
const KGuiItem &buttonYes,
00675
const KGuiItem &buttonNo,
00676
const QString &dontAskAgainName,
00677
int options)
00678 {
00679
return warningYesNoCancelListWId(parent_id, text,
QStringList(), caption,
00680 buttonYes, buttonNo, dontAskAgainName, options);
00681 }
00682
00683
int
00684 KMessageBox::warningYesNoCancelList(
QWidget *parent,
const QString &text,
00685
const QStringList &strlist,
00686
const QString &caption,
00687
const KGuiItem &buttonYes,
00688
const KGuiItem &buttonNo,
00689
const QString &dontAskAgainName,
00690
int options)
00691 {
00692
return warningYesNoCancelListWId( parent ? parent->winId() : 0, text, strlist,
00693 caption, buttonYes, buttonNo, dontAskAgainName, options );
00694 }
00695
00696
int
00697 KMessageBox::warningYesNoCancelListWId(WId parent_id,
const QString &text,
00698
const QStringList &strlist,
00699
const QString &caption,
00700
const KGuiItem &buttonYes,
00701
const KGuiItem &buttonNo,
00702
const QString &dontAskAgainName,
00703
int options)
00704 {
00705
ButtonCode res;
00706
if ( !
shouldBeShownYesNo(dontAskAgainName, res) )
00707
return res;
00708
00709
QWidget* parent = QWidget::find( parent_id );
00710
KDialogBase *dialog=
new KDialogBase(
00711 caption.isEmpty() ? i18n(
"Warning") : caption,
00712 KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
00713 KDialogBase::Yes, KDialogBase::Cancel,
00714 parent,
"warningYesNoCancel",
true,
true,
00715 buttonYes, buttonNo);
00716
if( options &
PlainCaption )
00717 dialog->
setPlainCaption( caption );
00718
#ifdef Q_WS_X11
00719
if( parent == NULL && parent_id )
00720 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00721
#endif
00722
00723
bool checkboxResult =
false;
00724
int result =
createKMessageBox(dialog, QMessageBox::Warning, text, strlist,
00725 dontAskAgainName.isEmpty() ? QString::null : i18n(
"Do not ask again"),
00726 &checkboxResult, options);
00727
if ( result==KDialogBase::Cancel )
return Cancel;
00728 res = (result==KDialogBase::Yes ? Yes : No);
00729
00730
if (checkboxResult)
00731
saveDontShowAgainYesNo(dontAskAgainName, res);
00732
return res;
00733 }
00734
00735
void
00736 KMessageBox::error(
QWidget *parent,
const QString &text,
00737
const QString &caption,
int options)
00738 {
00739
return errorListWId( parent ? parent->winId() : 0, text,
QStringList(), caption, options );
00740 }
00741
00742
void
00743 KMessageBox::errorWId(WId parent_id,
const QString &text,
00744
const QString &caption,
int options)
00745 {
00746
errorListWId( parent_id, text,
QStringList(), caption, options );
00747 }
00748
00749
void
00750 KMessageBox::errorList(
QWidget *parent,
const QString &text,
const QStringList &strlist,
00751
const QString &caption,
int options)
00752 {
00753
return errorListWId( parent ? parent->winId() : 0, text, strlist, caption, options );
00754 }
00755
00756
void
00757 KMessageBox::errorListWId(WId parent_id,
const QString &text,
const QStringList &strlist,
00758
const QString &caption,
int options)
00759 {
00760
QWidget* parent = QWidget::find( parent_id );
00761
KDialogBase *dialog=
new KDialogBase(
00762 caption.isEmpty() ? i18n(
"Error") : caption,
00763 KDialogBase::Yes,
00764 KDialogBase::Yes, KDialogBase::Yes,
00765 parent,
"error",
true,
true,
00766 KStdGuiItem::ok() );
00767
if( options &
PlainCaption )
00768 dialog->
setPlainCaption( caption );
00769
#ifdef Q_WS_X11
00770
if( parent == NULL && parent_id )
00771 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00772
#endif
00773
00774
createKMessageBox(dialog, QMessageBox::Critical, text, strlist, QString::null, 0, options);
00775 }
00776
00777
void
00778 KMessageBox::detailedError(
QWidget *parent,
const QString &text,
00779
const QString &details,
00780
const QString &caption,
int options)
00781 {
00782
return detailedErrorWId( parent ? parent->winId() : 0, text, details, caption, options );
00783 }
00784
00785
void
00786 KMessageBox::detailedErrorWId(WId parent_id,
const QString &text,
00787
const QString &details,
00788
const QString &caption,
int options)
00789 {
00790
QWidget* parent = QWidget::find( parent_id );
00791
KDialogBase *dialog=
new KDialogBase(
00792 caption.isEmpty() ? i18n(
"Error") : caption,
00793 KDialogBase::Yes | KDialogBase::Details,
00794 KDialogBase::Yes, KDialogBase::Yes,
00795 parent,
"error",
true,
true,
00796 KStdGuiItem::ok() );
00797
if( options &
PlainCaption )
00798 dialog->
setPlainCaption( caption );
00799
#ifdef Q_WS_X11
00800
if( parent == NULL && parent_id )
00801 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00802
#endif
00803
00804
createKMessageBox(dialog, QMessageBox::Critical, text,
QStringList(), QString::null, 0, options, details);
00805 }
00806
00807
void
00808 KMessageBox::queuedDetailedError(
QWidget *parent,
const QString &text,
00809
const QString &details,
00810
const QString &caption)
00811 {
00812
return queuedDetailedErrorWId( parent ? parent->winId() : 0, text, details, caption );
00813 }
00814
00815
void
00816 KMessageBox::queuedDetailedErrorWId(WId parent_id,
const QString &text,
00817
const QString &details,
00818
const QString &caption)
00819 {
00820 KMessageBox_queue =
true;
00821 (
void)
detailedErrorWId(parent_id, text, details, caption);
00822 KMessageBox_queue =
false;
00823 }
00824
00825
00826
void
00827 KMessageBox::sorry(
QWidget *parent,
const QString &text,
00828
const QString &caption,
int options)
00829 {
00830
return sorryWId( parent ? parent->winId() : 0, text, caption, options );
00831 }
00832
00833
void
00834 KMessageBox::sorryWId(WId parent_id,
const QString &text,
00835
const QString &caption,
int options)
00836 {
00837
QWidget* parent = QWidget::find( parent_id );
00838
KDialogBase *dialog=
new KDialogBase(
00839 caption.isEmpty() ? i18n(
"Sorry") : caption,
00840 KDialogBase::Yes,
00841 KDialogBase::Yes, KDialogBase::Yes,
00842 parent,
"sorry",
true,
true,
00843 KStdGuiItem::ok() );
00844
if( options &
PlainCaption )
00845 dialog->
setPlainCaption( caption );
00846
#ifdef Q_WS_X11
00847
if( parent == NULL && parent_id )
00848 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00849
#endif
00850
00851
createKMessageBox(dialog, QMessageBox::Warning, text,
QStringList(), QString::null, 0, options);
00852 }
00853
00854
void
00855 KMessageBox::detailedSorry(
QWidget *parent,
const QString &text,
00856
const QString &details,
00857
const QString &caption,
int options)
00858 {
00859
return detailedSorryWId( parent ? parent->winId() : 0, text, details, caption, options );
00860 }
00861
00862
void
00863 KMessageBox::detailedSorryWId(WId parent_id,
const QString &text,
00864
const QString &details,
00865
const QString &caption,
int options)
00866 {
00867
QWidget* parent = QWidget::find( parent_id );
00868
KDialogBase *dialog=
new KDialogBase(
00869 caption.isEmpty() ? i18n(
"Sorry") : caption,
00870 KDialogBase::Yes | KDialogBase::Details,
00871 KDialogBase::Yes, KDialogBase::Yes,
00872 parent,
"sorry",
true,
true,
00873 KStdGuiItem::ok() );
00874
if( options &
PlainCaption )
00875 dialog->
setPlainCaption( caption );
00876
#ifdef Q_WS_X11
00877
if( parent == NULL && parent_id )
00878 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00879
#endif
00880
00881
createKMessageBox(dialog, QMessageBox::Warning, text,
QStringList(), QString::null, 0, options, details);
00882 }
00883
00884
void
00885 KMessageBox::information(
QWidget *parent,
const QString &text,
00886
const QString &caption,
const QString &dontShowAgainName,
int options)
00887 {
00888
informationList(parent, text,
QStringList(), caption, dontShowAgainName, options);
00889 }
00890
00891
void
00892 KMessageBox::informationWId(WId parent_id,
const QString &text,
00893
const QString &caption,
const QString &dontShowAgainName,
int options)
00894 {
00895
informationListWId(parent_id, text,
QStringList(), caption, dontShowAgainName, options);
00896 }
00897
00898
void
00899 KMessageBox::informationList(
QWidget *parent,
const QString &text,
const QStringList & strlist,
00900
const QString &caption,
const QString &dontShowAgainName,
int options)
00901 {
00902
return informationListWId( parent ? parent->winId() : 0, text, strlist, caption,
00903 dontShowAgainName, options );
00904 }
00905
00906
void
00907 KMessageBox::informationListWId(WId parent_id,
const QString &text,
const QStringList & strlist,
00908
const QString &caption,
const QString &dontShowAgainName,
int options)
00909 {
00910
if ( !
shouldBeShownContinue(dontShowAgainName) )
00911
return;
00912
00913
QWidget* parent = QWidget::find( parent_id );
00914
KDialogBase *dialog=
new KDialogBase(
00915 caption.isEmpty() ? i18n(
"Information") : caption,
00916 KDialogBase::Yes,
00917 KDialogBase::Yes, KDialogBase::Yes,
00918 parent,
"information",
true,
true,
00919 KStdGuiItem::ok() );
00920
if( options &
PlainCaption )
00921 dialog->
setPlainCaption( caption );
00922
#ifdef Q_WS_X11
00923
if( parent == NULL && parent_id )
00924 XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
00925
#endif
00926
00927
bool checkboxResult =
false;
00928
00929
createKMessageBox(dialog, QMessageBox::Information, text, strlist,
00930 dontShowAgainName.isEmpty() ? QString::null : i18n(
"Do not show this message again"),
00931 &checkboxResult, options);
00932
00933
if (checkboxResult)
00934
saveDontShowAgainContinue(dontShowAgainName);
00935 }
00936
00937
void
00938 KMessageBox::enableAllMessages()
00939 {
00940
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00941
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00942
if (!config->
hasGroup(grpNotifMsgs))
00943
return;
00944
00945
KConfigGroupSaver saver( config, grpNotifMsgs );
00946
00947
typedef QMap<QString, QString> configMap;
00948
00949 configMap map = config->
entryMap(grpNotifMsgs);
00950
00951 configMap::Iterator it;
00952
for (it = map.begin(); it != map.end(); ++it)
00953 config->
deleteEntry( it.key() );
00954 config->
sync();
00955 }
00956
00957
void
00958 KMessageBox::enableMessage(
const QString &dontShowAgainName)
00959 {
00960
KConfig *config = againConfig ? againConfig :
KGlobal::config();
00961
QString grpNotifMsgs = QString::fromLatin1(
"Notification Messages");
00962
if (!config->
hasGroup(grpNotifMsgs))
00963
return;
00964
00965
KConfigGroupSaver saver( config, grpNotifMsgs );
00966
00967 config->
deleteEntry(dontShowAgainName);
00968 config->
sync();
00969 }
00970
00971
void
00972 KMessageBox::about(
QWidget *parent,
const QString &text,
00973
const QString &caption,
int options)
00974 {
00975
QString _caption = caption;
00976
if (_caption.isEmpty())
00977 _caption = i18n(
"About %1").arg(kapp->caption());
00978
00979
KDialogBase *dialog =
new KDialogBase(
00980 caption,
00981 KDialogBase::Yes,
00982 KDialogBase::Yes, KDialogBase::Yes,
00983 parent,
"about",
true,
true,
00984 KStdGuiItem::ok() );
00985
00986
QPixmap ret =
KApplication::kApplication()->
icon();
00987
if (ret.isNull())
00988 ret = QMessageBox::standardIcon(QMessageBox::Information);
00989 dialog->setIcon(ret);
00990
00991
createKMessageBox(dialog, ret, text,
QStringList(), QString::null, 0, options);
00992
00993
return;
00994 }
00995
00996 int KMessageBox::messageBox(
QWidget *parent, DialogType type,
const QString &text,
00997
const QString &caption,
const KGuiItem &buttonYes,
00998
const KGuiItem &buttonNo,
const QString &dontShowAskAgainName,
00999
int options )
01000 {
01001
return messageBoxWId( parent ? parent->winId() : 0, type, text, caption,
01002 buttonYes, buttonNo, dontShowAskAgainName, options );
01003 }
01004
01005 int KMessageBox::messageBox(
QWidget *parent, DialogType type,
const QString &text,
01006
const QString &caption,
const KGuiItem &buttonYes,
01007
const KGuiItem &buttonNo,
int options )
01008 {
01009
return messageBoxWId( parent ? parent->winId() : 0, type, text, caption,
01010 buttonYes, buttonNo, QString::null, options );
01011 }
01012
01013 int KMessageBox::messageBoxWId( WId parent_id, DialogType type,
const QString &text,
01014
const QString &caption,
const KGuiItem &buttonYes,
01015
const KGuiItem &buttonNo,
const QString &dontShow,
01016
int options )
01017 {
01018
switch (type) {
01019
case QuestionYesNo:
01020
return KMessageBox::questionYesNoWId( parent_id,
01021 text, caption, buttonYes, buttonNo, dontShow, options );
01022
case QuestionYesNoCancel:
01023
return KMessageBox::questionYesNoCancelWId( parent_id,
01024 text, caption, buttonYes, buttonNo, dontShow, options );
01025
case WarningYesNo:
01026
return KMessageBox::warningYesNoWId( parent_id,
01027 text, caption, buttonYes, buttonNo, dontShow, options );
01028
case WarningContinueCancel:
01029
return KMessageBox::warningContinueCancelWId( parent_id,
01030 text, caption, buttonYes.
text(), dontShow, options );
01031
case WarningYesNoCancel:
01032
return KMessageBox::warningYesNoCancelWId( parent_id,
01033 text, caption, buttonYes, buttonNo, dontShow, options );
01034
case Information:
01035
KMessageBox::informationWId( parent_id,
01036 text, caption, dontShow, options );
01037
return KMessageBox::Ok;
01038
01039
case Error:
01040
KMessageBox::errorWId( parent_id, text, caption, options );
01041
return KMessageBox::Ok;
01042
01043
case Sorry:
01044
KMessageBox::sorryWId( parent_id, text, caption, options );
01045
return KMessageBox::Ok;
01046 }
01047
return KMessageBox::Cancel;
01048 }
01049
01050 void KMessageBox::queuedMessageBox(
QWidget *parent, DialogType type,
const QString &text,
const QString &caption,
int options )
01051 {
01052
return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption, options );
01053 }
01054
01055 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type,
const QString &text,
const QString &caption,
int options )
01056 {
01057 KMessageBox_queue =
true;
01058 (
void)
messageBoxWId(parent_id, type, text, caption, KStdGuiItem::yes(),
01059 KStdGuiItem::no(), QString::null, options);
01060 KMessageBox_queue =
false;
01061 }
01062
01063 void KMessageBox::queuedMessageBox(
QWidget *parent, DialogType type,
const QString &text,
const QString &caption )
01064 {
01065
return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption );
01066 }
01067
01068 void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type,
const QString &text,
const QString &caption )
01069 {
01070 KMessageBox_queue =
true;
01071 (
void)
messageBoxWId(parent_id, type, text, caption);
01072 KMessageBox_queue =
false;
01073 }