summaryrefslogtreecommitdiffstats
path: root/tdeui/kmessagebox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeui/kmessagebox.cpp')
-rw-r--r--tdeui/kmessagebox.cpp1071
1 files changed, 1071 insertions, 0 deletions
diff --git a/tdeui/kmessagebox.cpp b/tdeui/kmessagebox.cpp
new file mode 100644
index 000000000..87fa9d555
--- /dev/null
+++ b/tdeui/kmessagebox.cpp
@@ -0,0 +1,1071 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 1999 Waldo Bastian (bastian@kde.org)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <tqcheckbox.h>
+#include <tqguardedptr.h>
+#include <tqhbox.h>
+#include <tqlabel.h>
+#include <tqlineedit.h>
+#include <tqmessagebox.h>
+#include <tqstringlist.h>
+#include <tqvbox.h>
+#include <tqvgroupbox.h>
+#include <tqstylesheet.h>
+#include <tqsimplerichtext.h>
+#include <tqpushbutton.h>
+#include <tqlayout.h>
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kdialogbase.h>
+#include <kguiitem.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <knotifyclient.h>
+#include <kstdguiitem.h>
+#include <kactivelabel.h>
+#include <kiconloader.h>
+#include <kglobalsettings.h>
+
+#ifdef Q_WS_X11
+#include <X11/Xlib.h>
+#endif
+
+ /**
+ * Easy MessageBox Dialog.
+ *
+ * Provides convenience functions for some i18n'ed standard dialogs,
+ * as well as audible notification via @ref KNotifyClient
+ *
+ * @author Waldo Bastian (bastian@kde.org)
+ */
+
+static bool KMessageBox_queue = false;
+
+static TQPixmap themedMessageBoxIcon(TQMessageBox::Icon icon)
+{
+ TQString icon_name;
+
+ switch(icon)
+ {
+ case TQMessageBox::NoIcon:
+ return TQPixmap();
+ break;
+ case TQMessageBox::Information:
+ icon_name = "messagebox_info";
+ break;
+ case TQMessageBox::Warning:
+ icon_name = "messagebox_warning";
+ break;
+ case TQMessageBox::Critical:
+ icon_name = "messagebox_critical";
+ break;
+ default:
+ break;
+ }
+
+ TQPixmap ret = KGlobal::iconLoader()->loadIcon(icon_name, KIcon::NoGroup, KIcon::SizeMedium, KIcon::DefaultState, 0, true);
+
+ if (ret.isNull())
+ return TQMessageBox::standardIcon(icon);
+ else
+ return ret;
+}
+
+static void sendNotification( TQString message,
+ const TQStringList& strlist,
+ TQMessageBox::Icon icon,
+ WId parent_id )
+{
+ // create the message for KNotify
+ TQString messageType;
+ switch ( icon )
+ {
+ case TQMessageBox::Warning:
+ messageType = "messageWarning";
+ break;
+ case TQMessageBox::Critical:
+ messageType = "messageCritical";
+ break;
+ case TQMessageBox::Question:
+ messageType = "messageQuestion";
+ break;
+ default:
+ messageType = "messageInformation";
+ break;
+ }
+
+ if ( !strlist.isEmpty() )
+ {
+ for ( TQStringList::ConstIterator it = strlist.begin(); it != strlist.end(); ++it )
+ message += "\n" + *it;
+ }
+
+ if ( !message.isEmpty() )
+ KNotifyClient::event( (int)parent_id, messageType, message );
+}
+
+static TQString qrichtextify( const TQString& text )
+{
+ if ( text.isEmpty() || text[0] == '<' )
+ return text;
+
+ TQStringList lines = TQStringList::split('\n', text);
+ for(TQStringList::Iterator it = lines.begin(); it != lines.end(); ++it)
+ {
+ *it = TQStyleSheet::convertFromPlainText( *it, TQStyleSheetItem::WhiteSpaceNormal );
+ }
+
+ return lines.join(TQString::null);
+}
+
+int KMessageBox::createKMessageBox(KDialogBase *dialog, TQMessageBox::Icon icon,
+ const TQString &text, const TQStringList &strlist,
+ const TQString &ask, bool *checkboxReturn,
+ int options, const TQString &details)
+{
+ return createKMessageBox(dialog, themedMessageBoxIcon(icon), text, strlist,
+ ask, checkboxReturn, options, details, icon);
+}
+
+int KMessageBox::createKMessageBox(KDialogBase *dialog, TQPixmap icon,
+ const TQString &text, const TQStringList &strlist,
+ const TQString &ask, bool *checkboxReturn, int options,
+ const TQString &details, TQMessageBox::Icon notifyType)
+{
+ TQVBox *topcontents = new TQVBox (dialog);
+ topcontents->setSpacing(KDialog::spacingHint()*2);
+ topcontents->setMargin(KDialog::marginHint());
+
+ TQWidget *contents = new TQWidget(topcontents);
+ TQHBoxLayout * lay = new TQHBoxLayout(contents);
+ lay->setSpacing(KDialog::spacingHint());
+
+ TQLabel *label1 = new TQLabel( contents);
+
+ if (!icon.isNull())
+ label1->setPixmap(icon);
+
+ lay->addWidget( label1, 0, Qt::AlignCenter );
+ lay->addSpacing(KDialog::spacingHint());
+ // Enforce <p>text</p> otherwise the word-wrap doesn't work well
+ TQString qt_text = qrichtextify( text );
+
+ int pref_width = 0;
+ int pref_height = 0;
+ // Calculate a proper size for the text.
+ {
+ TQSimpleRichText rt(qt_text, dialog->font());
+ TQRect d = KGlobalSettings::desktopGeometry(dialog);
+
+ pref_width = d.width() / 3;
+ rt.setWidth(pref_width);
+ int used_width = rt.widthUsed();
+ pref_height = rt.height();
+ if (3*pref_height > 2*d.height())
+ {
+ // Very high dialog.. make it wider
+ pref_width = d.width() / 2;
+ rt.setWidth(pref_width);
+ used_width = rt.widthUsed();
+ pref_height = rt.height();
+ }
+ if (used_width <= pref_width)
+ {
+ while(true)
+ {
+ int new_width = (used_width * 9) / 10;
+ rt.setWidth(new_width);
+ int new_height = rt.height();
+ if (new_height > pref_height)
+ break;
+ used_width = rt.widthUsed();
+ if (used_width > new_width)
+ break;
+ }
+ pref_width = used_width;
+ }
+ else
+ {
+ if (used_width > (pref_width *2))
+ pref_width = pref_width *2;
+ else
+ pref_width = used_width;
+ }
+ }
+ KActiveLabel *label2 = new KActiveLabel( qt_text, contents );
+ if (!(options & KMessageBox::AllowLink))
+ {
+ TQObject::disconnect(label2, TQT_SIGNAL(linkClicked(const TQString &)),
+ label2, TQT_SLOT(openLink(const TQString &)));
+ }
+
+ // We add 10 pixels extra to compensate for some KActiveLabel margins.
+ // TODO: find out why this is 10.
+ label2->setFixedSize(TQSize(pref_width+10, pref_height));
+ lay->addWidget( label2 );
+ lay->addStretch();
+
+ KListBox *listbox = 0;
+ if (!strlist.isEmpty())
+ {
+ listbox=new KListBox( topcontents );
+ listbox->insertStringList( strlist );
+ listbox->setSelectionMode( TQListBox::NoSelection );
+ topcontents->setStretchFactor(listbox, 1);
+ }
+
+ TQGuardedPtr<TQCheckBox> checkbox = 0;
+ if (!ask.isEmpty())
+ {
+ checkbox = new TQCheckBox(ask, topcontents);
+ if (checkboxReturn)
+ checkbox->setChecked(*checkboxReturn);
+ }
+
+ if (!details.isEmpty())
+ {
+ TQVGroupBox *detailsGroup = new TQVGroupBox( i18n("Details"), dialog);
+ if ( details.length() < 512 ) {
+ KActiveLabel *label3 = new KActiveLabel(qrichtextify(details),
+ detailsGroup);
+ label3->setMinimumSize(label3->tqsizeHint());
+ if (!(options & KMessageBox::AllowLink))
+ {
+ TQObject::disconnect(label3, TQT_SIGNAL(linkClicked(const TQString &)),
+ label3, TQT_SLOT(openLink(const TQString &)));
+ }
+ } else {
+ TQTextEdit* te = new TQTextEdit(details, TQString::null, detailsGroup);
+ te->setReadOnly( true );
+ te->setMinimumHeight( te->fontMetrics().lineSpacing() * 11 );
+ }
+ dialog->setDetailsWidget(detailsGroup);
+ }
+
+ dialog->setMainWidget(topcontents);
+ dialog->enableButtonSeparator(false);
+ if (!listbox)
+ dialog->disableResize();
+
+ const KDialogBase::ButtonCode buttons[] = {
+ KDialogBase::Help,
+ KDialogBase::Default,
+ KDialogBase::Ok,
+ KDialogBase::Apply,
+ KDialogBase::Try,
+ KDialogBase::Cancel,
+ KDialogBase::Close,
+ KDialogBase::User1,
+ KDialogBase::User2,
+ KDialogBase::User3,
+ KDialogBase::No,
+ KDialogBase::Yes,
+ KDialogBase::Details };
+ for( unsigned int i = 0;
+ i < sizeof( buttons )/sizeof( buttons[ 0 ] );
+ ++i )
+ if( TQPushButton* btn = dialog->actionButton( buttons[ i ] ))
+ if( btn->isDefault())
+ btn->setFocus();
+
+ if ( (options & KMessageBox::Notify) )
+ sendNotification( text, strlist, notifyType, dialog->tqtopLevelWidget()->winId());
+
+ if (KMessageBox_queue)
+ {
+ KDialogQueue::queueDialog(dialog);
+ return KMessageBox::Cancel; // We have to return something.
+ }
+
+ if ( (options & KMessageBox::NoExec) )
+ {
+ return KMessageBox::Cancel; // We have to return something.
+ }
+
+ // We use a TQGuardedPtr because the dialog may get deleted
+ // during exec() if the parent of the dialog gets deleted.
+ // In that case the guarded ptr will reset to 0.
+ TQGuardedPtr<KDialogBase> guardedDialog = dialog;
+
+ int result = guardedDialog->exec();
+ if (checkbox && checkboxReturn)
+ *checkboxReturn = checkbox->isChecked();
+ delete (KDialogBase *) guardedDialog;
+ return result;
+}
+
+int
+KMessageBox::questionYesNo(TQWidget *parent, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return questionYesNoList(parent, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+int
+KMessageBox::questionYesNoWId(WId parent_id, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return questionYesNoListWId(parent_id, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+bool
+KMessageBox::shouldBeShownYesNo(const TQString &dontShowAgainName,
+ ButtonCode &result)
+{
+ if ( dontShowAgainName.isEmpty() ) return true;
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+ TQString dontAsk = config->readEntry(dontShowAgainName).lower();
+ if (dontAsk == "yes") {
+ result = Yes;
+ return false;
+ }
+ if (dontAsk == "no") {
+ result = No;
+ return false;
+ }
+ return true;
+}
+
+bool
+KMessageBox::shouldBeShownContinue(const TQString &dontShowAgainName)
+{
+ if ( dontShowAgainName.isEmpty() ) return true;
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+ return config->readBoolEntry(dontShowAgainName, true);
+}
+
+void
+KMessageBox::saveDontShowAgainYesNo(const TQString &dontShowAgainName,
+ ButtonCode result)
+{
+ if ( dontShowAgainName.isEmpty() ) return;
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+ config->writeEntry( dontShowAgainName, result==Yes ? "yes" : "no", true, (dontShowAgainName[0] == ':'));
+ config->sync();
+}
+
+void
+KMessageBox::saveDontShowAgainContinue(const TQString &dontShowAgainName)
+{
+ if ( dontShowAgainName.isEmpty() ) return;
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+ config->writeEntry( dontShowAgainName, false, true, (dontShowAgainName[0] == ':'));
+ config->sync();
+}
+
+KConfig* KMessageBox::againConfig = NULL;
+void
+KMessageBox::setDontShowAskAgainConfig(KConfig* cfg)
+{
+ againConfig = cfg;
+}
+
+int
+KMessageBox::questionYesNoList(TQWidget *parent, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{ // in order to avoid code duplication, convert to WId, it will be converted back
+ return questionYesNoListWId( parent ? parent->winId() : 0, text, strlist,
+ caption, buttonYes, buttonNo, dontAskAgainName, options );
+}
+
+int
+KMessageBox::questionYesNoListWId(WId parent_id, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ ButtonCode res;
+ if ( !shouldBeShownYesNo(dontAskAgainName, res) )
+ return res;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Question") : caption,
+ KDialogBase::Yes | KDialogBase::No,
+ KDialogBase::Yes, KDialogBase::No,
+ parent, "questionYesNo", true, true,
+ buttonYes, buttonNo);
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+ int result = createKMessageBox(dialog, TQMessageBox::Information, text, strlist,
+ dontAskAgainName.isEmpty() ? TQString::null : i18n("Do not ask again"),
+ &checkboxResult, options);
+ res = (result==KDialogBase::Yes ? Yes : No);
+
+ if (checkboxResult)
+ saveDontShowAgainYesNo(dontAskAgainName, res);
+ return res;
+}
+
+int
+KMessageBox::questionYesNoCancel(TQWidget *parent,
+ const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return questionYesNoCancelWId( parent ? parent->winId() : 0, text, caption, buttonYes, buttonNo,
+ dontAskAgainName, options );
+}
+
+int
+KMessageBox::questionYesNoCancelWId(WId parent_id,
+ const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ ButtonCode res;
+ if ( !shouldBeShownYesNo(dontAskAgainName, res) )
+ return res;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Question") : caption,
+ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
+ KDialogBase::Yes, KDialogBase::Cancel,
+ parent, "questionYesNoCancel", true, true,
+ buttonYes, buttonNo);
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+ int result = createKMessageBox(dialog, TQMessageBox::Information,
+ text, TQStringList(),
+ dontAskAgainName.isEmpty() ? TQString::null : i18n("Do not ask again"),
+ &checkboxResult, options);
+ if ( result==KDialogBase::Cancel ) return Cancel;
+ res = (result==KDialogBase::Yes ? Yes : No);
+
+ if (checkboxResult)
+ saveDontShowAgainYesNo(dontAskAgainName, res);
+ return res;
+}
+
+int
+KMessageBox::warningYesNo(TQWidget *parent, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoList(parent, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningYesNoWId(WId parent_id, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoListWId(parent_id, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningYesNoList(TQWidget *parent, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoListWId( parent ? parent->winId() : 0, text, strlist, caption,
+ buttonYes, buttonNo, dontAskAgainName, options );
+}
+
+int
+KMessageBox::warningYesNoListWId(WId parent_id, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ // warningYesNo and warningYesNoList are always "dangerous"
+ // ### Remove this line for KDE 4, when the 'options' default parameter
+ // takes effects.
+ options |= Dangerous;
+
+ ButtonCode res;
+ if ( !shouldBeShownYesNo(dontAskAgainName, res) )
+ return res;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Warning") : caption,
+ KDialogBase::Yes | KDialogBase::No,
+ KDialogBase::No, KDialogBase::No,
+ parent, "warningYesNoList", true, true,
+ buttonYes, buttonNo);
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+ int result = createKMessageBox(dialog, TQMessageBox::Warning, text, strlist,
+ dontAskAgainName.isEmpty() ? TQString::null : i18n("Do not ask again"),
+ &checkboxResult, options);
+ res = (result==KDialogBase::Yes ? Yes : No);
+
+ if (checkboxResult)
+ saveDontShowAgainYesNo(dontAskAgainName, res);
+ return res;
+}
+
+int
+KMessageBox::warningContinueCancel(TQWidget *parent,
+ const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonContinue,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningContinueCancelList(parent, text, TQStringList(), caption,
+ buttonContinue, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningContinueCancelWId(WId parent_id,
+ const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonContinue,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningContinueCancelListWId(parent_id, text, TQStringList(), caption,
+ buttonContinue, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningContinueCancelList(TQWidget *parent, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonContinue,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningContinueCancelListWId( parent ? parent->winId() : 0, text, strlist,
+ caption, buttonContinue, dontAskAgainName, options );
+}
+
+int
+KMessageBox::warningContinueCancelListWId(WId parent_id, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonContinue,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ if ( !shouldBeShownContinue(dontAskAgainName) )
+ return Continue;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Warning") : caption,
+ KDialogBase::Yes | KDialogBase::No,
+ KDialogBase::Yes, KDialogBase::No,
+ parent, "warningYesNo", true, true,
+ buttonContinue, KStdGuiItem::cancel() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+ int result = createKMessageBox(dialog, TQMessageBox::Warning, text, strlist,
+ dontAskAgainName.isEmpty() ? TQString::null : i18n("Do not ask again"),
+ &checkboxResult, options);
+
+ if ( result==KDialogBase::No )
+ return Cancel;
+ if (checkboxResult)
+ saveDontShowAgainContinue(dontAskAgainName);
+ return Continue;
+}
+
+int
+KMessageBox::warningYesNoCancel(TQWidget *parent, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoCancelList(parent, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningYesNoCancelWId(WId parent_id, const TQString &text,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoCancelListWId(parent_id, text, TQStringList(), caption,
+ buttonYes, buttonNo, dontAskAgainName, options);
+}
+
+int
+KMessageBox::warningYesNoCancelList(TQWidget *parent, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ return warningYesNoCancelListWId( parent ? parent->winId() : 0, text, strlist,
+ caption, buttonYes, buttonNo, dontAskAgainName, options );
+}
+
+int
+KMessageBox::warningYesNoCancelListWId(WId parent_id, const TQString &text,
+ const TQStringList &strlist,
+ const TQString &caption,
+ const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo,
+ const TQString &dontAskAgainName,
+ int options)
+{
+ ButtonCode res;
+ if ( !shouldBeShownYesNo(dontAskAgainName, res) )
+ return res;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Warning") : caption,
+ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
+ KDialogBase::Yes, KDialogBase::Cancel,
+ parent, "warningYesNoCancel", true, true,
+ buttonYes, buttonNo);
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+ int result = createKMessageBox(dialog, TQMessageBox::Warning, text, strlist,
+ dontAskAgainName.isEmpty() ? TQString::null : i18n("Do not ask again"),
+ &checkboxResult, options);
+ if ( result==KDialogBase::Cancel ) return Cancel;
+ res = (result==KDialogBase::Yes ? Yes : No);
+
+ if (checkboxResult)
+ saveDontShowAgainYesNo(dontAskAgainName, res);
+ return res;
+}
+
+void
+KMessageBox::error(TQWidget *parent, const TQString &text,
+ const TQString &caption, int options)
+{
+ return errorListWId( parent ? parent->winId() : 0, text, TQStringList(), caption, options );
+}
+
+void
+KMessageBox::errorWId(WId parent_id, const TQString &text,
+ const TQString &caption, int options)
+{
+ errorListWId( parent_id, text, TQStringList(), caption, options );
+}
+
+void
+KMessageBox::errorList(TQWidget *parent, const TQString &text, const TQStringList &strlist,
+ const TQString &caption, int options)
+{
+ return errorListWId( parent ? parent->winId() : 0, text, strlist, caption, options );
+}
+
+void
+KMessageBox::errorListWId(WId parent_id, const TQString &text, const TQStringList &strlist,
+ const TQString &caption, int options)
+{
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Error") : caption,
+ KDialogBase::Yes,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "error", true, true,
+ KStdGuiItem::ok() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ createKMessageBox(dialog, TQMessageBox::Critical, text, strlist, TQString::null, 0, options);
+}
+
+void
+KMessageBox::detailedError(TQWidget *parent, const TQString &text,
+ const TQString &details,
+ const TQString &caption, int options)
+{
+ return detailedErrorWId( parent ? parent->winId() : 0, text, details, caption, options );
+}
+
+void
+KMessageBox::detailedErrorWId(WId parent_id, const TQString &text,
+ const TQString &details,
+ const TQString &caption, int options)
+{
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Error") : caption,
+ KDialogBase::Yes | KDialogBase::Details,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "error", true, true,
+ KStdGuiItem::ok() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ createKMessageBox(dialog, TQMessageBox::Critical, text, TQStringList(), TQString::null, 0, options, details);
+}
+
+void
+KMessageBox::queuedDetailedError(TQWidget *parent, const TQString &text,
+ const TQString &details,
+ const TQString &caption)
+{
+ return queuedDetailedErrorWId( parent ? parent->winId() : 0, text, details, caption );
+}
+
+void
+KMessageBox::queuedDetailedErrorWId(WId parent_id, const TQString &text,
+ const TQString &details,
+ const TQString &caption)
+{
+ KMessageBox_queue = true;
+ (void) detailedErrorWId(parent_id, text, details, caption);
+ KMessageBox_queue = false;
+}
+
+
+void
+KMessageBox::sorry(TQWidget *parent, const TQString &text,
+ const TQString &caption, int options)
+{
+ return sorryWId( parent ? parent->winId() : 0, text, caption, options );
+}
+
+void
+KMessageBox::sorryWId(WId parent_id, const TQString &text,
+ const TQString &caption, int options)
+{
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Sorry") : caption,
+ KDialogBase::Yes,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "sorry", true, true,
+ KStdGuiItem::ok() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ createKMessageBox(dialog, TQMessageBox::Warning, text, TQStringList(), TQString::null, 0, options);
+}
+
+void
+KMessageBox::detailedSorry(TQWidget *parent, const TQString &text,
+ const TQString &details,
+ const TQString &caption, int options)
+{
+ return detailedSorryWId( parent ? parent->winId() : 0, text, details, caption, options );
+}
+
+void
+KMessageBox::detailedSorryWId(WId parent_id, const TQString &text,
+ const TQString &details,
+ const TQString &caption, int options)
+{
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Sorry") : caption,
+ KDialogBase::Yes | KDialogBase::Details,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "sorry", true, true,
+ KStdGuiItem::ok() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ createKMessageBox(dialog, TQMessageBox::Warning, text, TQStringList(), TQString::null, 0, options, details);
+}
+
+void
+KMessageBox::information(TQWidget *parent,const TQString &text,
+ const TQString &caption, const TQString &dontShowAgainName, int options)
+{
+ informationList(parent, text, TQStringList(), caption, dontShowAgainName, options);
+}
+
+void
+KMessageBox::informationWId(WId parent_id,const TQString &text,
+ const TQString &caption, const TQString &dontShowAgainName, int options)
+{
+ informationListWId(parent_id, text, TQStringList(), caption, dontShowAgainName, options);
+}
+
+void
+KMessageBox::informationList(TQWidget *parent,const TQString &text, const TQStringList & strlist,
+ const TQString &caption, const TQString &dontShowAgainName, int options)
+{
+ return informationListWId( parent ? parent->winId() : 0, text, strlist, caption,
+ dontShowAgainName, options );
+}
+
+void
+KMessageBox::informationListWId(WId parent_id,const TQString &text, const TQStringList & strlist,
+ const TQString &caption, const TQString &dontShowAgainName, int options)
+{
+ if ( !shouldBeShownContinue(dontShowAgainName) )
+ return;
+
+ TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id ));
+ KDialogBase *dialog= new KDialogBase(
+ caption.isEmpty() ? i18n("Information") : caption,
+ KDialogBase::Yes,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "information", true, true,
+ KStdGuiItem::ok() );
+ if( options & PlainCaption )
+ dialog->setPlainCaption( caption );
+#ifdef Q_WS_X11
+ if( parent == NULL && parent_id )
+ XSetTransientForHint( qt_xdisplay(), dialog->winId(), parent_id );
+#endif
+
+ bool checkboxResult = false;
+
+ createKMessageBox(dialog, TQMessageBox::Information, text, strlist,
+ dontShowAgainName.isEmpty() ? TQString::null : i18n("Do not show this message again"),
+ &checkboxResult, options);
+
+ if (checkboxResult)
+ saveDontShowAgainContinue(dontShowAgainName);
+}
+
+void
+KMessageBox::enableAllMessages()
+{
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ if (!config->hasGroup(grpNotifMsgs))
+ return;
+
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+
+ typedef TQMap<TQString, TQString> configMap;
+
+ configMap map = config->entryMap(grpNotifMsgs);
+
+ configMap::Iterator it;
+ for (it = map.begin(); it != map.end(); ++it)
+ config->deleteEntry( it.key() );
+ config->sync();
+}
+
+void
+KMessageBox::enableMessage(const TQString &dontShowAgainName)
+{
+ KConfig *config = againConfig ? againConfig : KGlobal::config();
+ TQString grpNotifMsgs = TQString::tqfromLatin1("Notification Messages");
+ if (!config->hasGroup(grpNotifMsgs))
+ return;
+
+ KConfigGroupSaver saver( config, grpNotifMsgs );
+
+ config->deleteEntry(dontShowAgainName);
+ config->sync();
+}
+
+void
+KMessageBox::about(TQWidget *parent, const TQString &text,
+ const TQString &caption, int options)
+{
+ TQString _caption = caption;
+ if (_caption.isEmpty())
+ _caption = i18n("About %1").arg(kapp->caption());
+
+ KDialogBase *dialog = new KDialogBase(
+ caption,
+ KDialogBase::Yes,
+ KDialogBase::Yes, KDialogBase::Yes,
+ parent, "about", true, true,
+ KStdGuiItem::ok() );
+
+ TQPixmap ret = KApplication::kApplication()->icon();
+ if (ret.isNull())
+ ret = TQMessageBox::standardIcon(TQMessageBox::Information);
+ dialog->setIcon(ret);
+
+ createKMessageBox(dialog, ret, text, TQStringList(), TQString::null, 0, options);
+
+ return;
+}
+
+int KMessageBox::messageBox( TQWidget *parent, DialogType type, const TQString &text,
+ const TQString &caption, const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo, const TQString &dontShowAskAgainName,
+ int options )
+{
+ return messageBoxWId( parent ? parent->winId() : 0, type, text, caption,
+ buttonYes, buttonNo, dontShowAskAgainName, options );
+}
+
+int KMessageBox::messageBox( TQWidget *parent, DialogType type, const TQString &text,
+ const TQString &caption, const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo, int options )
+{
+ return messageBoxWId( parent ? parent->winId() : 0, type, text, caption,
+ buttonYes, buttonNo, TQString::null, options );
+}
+
+int KMessageBox::messageBoxWId( WId parent_id, DialogType type, const TQString &text,
+ const TQString &caption, const KGuiItem &buttonYes,
+ const KGuiItem &buttonNo, const TQString &dontShow,
+ int options )
+{
+ switch (type) {
+ case QuestionYesNo:
+ return KMessageBox::questionYesNoWId( parent_id,
+ text, caption, buttonYes, buttonNo, dontShow, options );
+ case QuestionYesNoCancel:
+ return KMessageBox::questionYesNoCancelWId( parent_id,
+ text, caption, buttonYes, buttonNo, dontShow, options );
+ case WarningYesNo:
+ return KMessageBox::warningYesNoWId( parent_id,
+ text, caption, buttonYes, buttonNo, dontShow, options );
+ case WarningContinueCancel:
+ return KMessageBox::warningContinueCancelWId( parent_id,
+ text, caption, buttonYes.text(), dontShow, options );
+ case WarningYesNoCancel:
+ return KMessageBox::warningYesNoCancelWId( parent_id,
+ text, caption, buttonYes, buttonNo, dontShow, options );
+ case Information:
+ KMessageBox::informationWId( parent_id,
+ text, caption, dontShow, options );
+ return KMessageBox::Ok;
+
+ case Error:
+ KMessageBox::errorWId( parent_id, text, caption, options );
+ return KMessageBox::Ok;
+
+ case Sorry:
+ KMessageBox::sorryWId( parent_id, text, caption, options );
+ return KMessageBox::Ok;
+ }
+ return KMessageBox::Cancel;
+}
+
+void KMessageBox::queuedMessageBox( TQWidget *parent, DialogType type, const TQString &text, const TQString &caption, int options )
+{
+ return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption, options );
+}
+
+void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const TQString &text, const TQString &caption, int options )
+{
+ KMessageBox_queue = true;
+ (void) messageBoxWId(parent_id, type, text, caption, KStdGuiItem::yes(),
+ KStdGuiItem::no(), TQString::null, options);
+ KMessageBox_queue = false;
+}
+
+void KMessageBox::queuedMessageBox( TQWidget *parent, DialogType type, const TQString &text, const TQString &caption )
+{
+ return queuedMessageBoxWId( parent ? parent->winId() : 0, type, text, caption );
+}
+
+void KMessageBox::queuedMessageBoxWId( WId parent_id, DialogType type, const TQString &text, const TQString &caption )
+{
+ KMessageBox_queue = true;
+ (void) messageBoxWId(parent_id, type, text, caption);
+ KMessageBox_queue = false;
+}