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 }