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