summaryrefslogtreecommitdiffstats
path: root/src/gui/dialogs/qmessagebox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/dialogs/qmessagebox.cpp')
-rw-r--r--src/gui/dialogs/qmessagebox.cpp2751
1 files changed, 0 insertions, 2751 deletions
diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp
deleted file mode 100644
index d6dbcf6e78..0000000000
--- a/src/gui/dialogs/qmessagebox.cpp
+++ /dev/null
@@ -1,2751 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/qmessagebox.h>
-
-#ifndef QT_NO_MESSAGEBOX
-
-#include <QtGui/qdialogbuttonbox.h>
-#include "private/qlabel_p.h"
-#include "private/qapplication_p.h"
-#include <QtCore/qlist.h>
-#include <QtCore/qdebug.h>
-#include <QtGui/qstyle.h>
-#include <QtGui/qstyleoption.h>
-#include <QtGui/qgridlayout.h>
-#include <QtGui/qdesktopwidget.h>
-#include <QtGui/qpushbutton.h>
-#include <QtGui/qaccessible.h>
-#include <QtGui/qicon.h>
-#include <QtGui/qtextdocument.h>
-#include <QtGui/qapplication.h>
-#include <QtGui/qtextedit.h>
-#include <QtGui/qtextbrowser.h>
-#include <QtGui/qmenu.h>
-#include "qdialog_p.h"
-#include <QtGui/qfont.h>
-#include <QtGui/qfontmetrics.h>
-#include <QtGui/qclipboard.h>
-
-#ifndef QT_NO_STYLE_S60
-#include <qs60style.h>
-#endif
-
-#ifdef Q_WS_WINCE
-extern bool qt_wince_is_mobile(); //defined in qguifunctions_wince.cpp
-extern bool qt_wince_is_smartphone();//defined in qguifunctions_wince.cpp
-extern bool qt_wince_is_pocket_pc(); //defined in qguifunctions_wince.cpp
-
-#include "qguifunctions_wince.h"
-#endif
-
-QT_BEGIN_NAMESPACE
-
-enum Button { Old_Ok = 1, Old_Cancel = 2, Old_Yes = 3, Old_No = 4, Old_Abort = 5, Old_Retry = 6,
- Old_Ignore = 7, Old_YesAll = 8, Old_NoAll = 9, Old_ButtonMask = 0xFF,
- NewButtonMask = 0xFFFFFC00 };
-
-enum DetailButtonLabel { ShowLabel = 0, HideLabel = 1 };
-#ifndef QT_NO_TEXTEDIT
-class QMessageBoxDetailsText : public QWidget
-{
-public:
- class TextEdit : public QTextEdit
- {
- public:
- TextEdit(QWidget *parent=0) : QTextEdit(parent) { }
- void contextMenuEvent(QContextMenuEvent * e)
- {
-#ifndef QT_NO_CONTEXTMENU
- QMenu *menu = createStandardContextMenu();
- menu->setAttribute(Qt::WA_DeleteOnClose);
- menu->popup(e->globalPos());
-#else
- Q_UNUSED(e);
-#endif
- }
- };
-
- QMessageBoxDetailsText(QWidget *parent=0)
- : QWidget(parent)
- {
- QVBoxLayout *layout = new QVBoxLayout;
- layout->setMargin(0);
- QFrame *line = new QFrame(this);
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
- layout->addWidget(line);
- textEdit = new TextEdit();
- textEdit->setFixedHeight(100);
- textEdit->setFocusPolicy(Qt::NoFocus);
- textEdit->setReadOnly(true);
- layout->addWidget(textEdit);
- setLayout(layout);
- }
- void setText(const QString &text) { textEdit->setPlainText(text); }
- QString text() const { return textEdit->toPlainText(); }
-private:
- TextEdit *textEdit;
-};
-#endif // QT_NO_TEXTEDIT
-
-class DetailButton : public QPushButton
-{
-public:
- DetailButton(QWidget *parent) : QPushButton(label(ShowLabel), parent)
- {
- setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- }
-
- QString label(DetailButtonLabel label) const
- { return label == ShowLabel ? QMessageBox::tr("Show Details...") : QMessageBox::tr("Hide Details..."); }
-
- void setLabel(DetailButtonLabel lbl)
- { setText(label(lbl)); }
-
- QSize sizeHint() const
- {
- ensurePolished();
- QStyleOptionButton opt;
- initStyleOption(&opt);
- const QFontMetrics fm = fontMetrics();
- opt.text = label(ShowLabel);
- QSize sz = fm.size(Qt::TextShowMnemonic, opt.text);
- QSize ret = style()->sizeFromContents(QStyle::CT_PushButton, &opt, sz, this).
- expandedTo(QApplication::globalStrut());
- opt.text = label(HideLabel);
- sz = fm.size(Qt::TextShowMnemonic, opt.text);
- ret.expandedTo(style()->sizeFromContents(QStyle::CT_PushButton, &opt, sz, this).
- expandedTo(QApplication::globalStrut()));
- return ret;
- }
-};
-
-
-class QMessageBoxPrivate : public QDialogPrivate
-{
- Q_DECLARE_PUBLIC(QMessageBox)
-
-public:
- QMessageBoxPrivate() : escapeButton(0), defaultButton(0), clickedButton(0), detailsButton(0),
-#ifndef QT_NO_TEXTEDIT
- detailsText(0),
-#endif
- compatMode(false), autoAddOkButton(true),
- detectedEscapeButton(0), informativeLabel(0) { }
-
- void init(const QString &title = QString(), const QString &text = QString());
- void _q_buttonClicked(QAbstractButton *);
-
- QAbstractButton *findButton(int button0, int button1, int button2, int flags);
- void addOldButtons(int button0, int button1, int button2);
-
- QAbstractButton *abstractButtonForId(int id) const;
- int execReturnCode(QAbstractButton *button);
-
- void detectEscapeButton();
- void updateSize();
- int layoutMinimumWidth();
- void retranslateStrings();
-
-#ifdef Q_WS_WINCE
- void hideSpecial();
-#endif
-
- static int showOldMessageBox(QWidget *parent, QMessageBox::Icon icon,
- const QString &title, const QString &text,
- int button0, int button1, int button2);
- static int showOldMessageBox(QWidget *parent, QMessageBox::Icon icon,
- const QString &title, const QString &text,
- const QString &button0Text,
- const QString &button1Text,
- const QString &button2Text,
- int defaultButtonNumber,
- int escapeButtonNumber);
-
- static QMessageBox::StandardButton showNewMessageBox(QWidget *parent,
- QMessageBox::Icon icon, const QString& title, const QString& text,
- QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton);
-
- static QPixmap standardIcon(QMessageBox::Icon icon, QMessageBox *mb);
-
- QLabel *label;
- QMessageBox::Icon icon;
- QLabel *iconLabel;
- QDialogButtonBox *buttonBox;
- QList<QAbstractButton *> customButtonList;
- QAbstractButton *escapeButton;
- QPushButton *defaultButton;
- QAbstractButton *clickedButton;
- DetailButton *detailsButton;
-#ifndef QT_NO_TEXTEDIT
- QMessageBoxDetailsText *detailsText;
-#endif
- bool compatMode;
- bool autoAddOkButton;
- QAbstractButton *detectedEscapeButton;
- QLabel *informativeLabel;
-#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
- QTextBrowser *textBrowser;
-#endif
- QPointer<QObject> receiverToDisconnectOnClose;
- QByteArray memberToDisconnectOnClose;
- QByteArray signalToDisconnectOnClose;
-};
-
-void QMessageBoxPrivate::init(const QString &title, const QString &text)
-{
- Q_Q(QMessageBox);
-
- label = new QLabel;
- label->setObjectName(QLatin1String("qt_msgbox_label"));
- label->setTextInteractionFlags(Qt::TextInteractionFlags(q->style()->styleHint(QStyle::SH_MessageBox_TextInteractionFlags, 0, q)));
- label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
- label->setOpenExternalLinks(true);
-#if defined(Q_WS_MAC)
- label->setContentsMargins(16, 0, 0, 0);
-#elif !defined(Q_WS_QWS)
- label->setContentsMargins(2, 0, 0, 0);
- label->setIndent(9);
-#endif
- icon = QMessageBox::NoIcon;
- iconLabel = new QLabel;
- iconLabel->setObjectName(QLatin1String("qt_msgboxex_icon_label"));
- iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-
- buttonBox = new QDialogButtonBox;
- buttonBox->setObjectName(QLatin1String("qt_msgbox_buttonbox"));
- buttonBox->setCenterButtons(q->style()->styleHint(QStyle::SH_MessageBox_CenterButtons, 0, q));
- QObject::connect(buttonBox, SIGNAL(clicked(QAbstractButton*)),
- q, SLOT(_q_buttonClicked(QAbstractButton*)));
-
- QGridLayout *grid = new QGridLayout;
-#ifndef Q_WS_MAC
- grid->addWidget(iconLabel, 0, 0, 2, 1, Qt::AlignTop);
- grid->addWidget(label, 0, 1, 1, 1);
- // -- leave space for information label --
- grid->addWidget(buttonBox, 2, 0, 1, 2);
-#else
- grid->setMargin(0);
- grid->setVerticalSpacing(8);
- grid->setHorizontalSpacing(0);
- q->setContentsMargins(24, 15, 24, 20);
- grid->addWidget(iconLabel, 0, 0, 2, 1, Qt::AlignTop | Qt::AlignLeft);
- grid->addWidget(label, 0, 1, 1, 1);
- // -- leave space for information label --
- grid->setRowStretch(1, 100);
- grid->setRowMinimumHeight(2, 6);
- grid->addWidget(buttonBox, 3, 1, 1, 1);
-#endif
-
- grid->setSizeConstraint(QLayout::SetNoConstraint);
- q->setLayout(grid);
-
- if (!title.isEmpty() || !text.isEmpty()) {
- q->setWindowTitle(title);
- q->setText(text);
- }
- q->setModal(true);
-
-#ifdef Q_WS_MAC
- QFont f = q->font();
- f.setBold(true);
- label->setFont(f);
-#endif
- retranslateStrings();
-}
-
-int QMessageBoxPrivate::layoutMinimumWidth()
-{
- layout->activate();
- return layout->totalMinimumSize().width();
-}
-
-void QMessageBoxPrivate::updateSize()
-{
- Q_Q(QMessageBox);
-
- if (!q->isVisible())
- return;
-
- QSize screenSize = QApplication::desktop()->availableGeometry(QCursor::pos()).size();
-#if defined(Q_WS_QWS) || defined(Q_WS_WINCE) || defined(Q_OS_SYMBIAN)
- // the width of the screen, less the window border.
- int hardLimit = screenSize.width() - (q->frameGeometry().width() - q->geometry().width());
-#else
- int hardLimit = qMin(screenSize.width() - 480, 1000); // can never get bigger than this
- // on small screens allows the messagebox be the same size as the screen
- if (screenSize.width() <= 1024)
- hardLimit = screenSize.width();
-#endif
-#ifdef Q_WS_MAC
- int softLimit = qMin(screenSize.width()/2, 420);
-#elif defined(Q_WS_QWS)
- int softLimit = qMin(hardLimit, 500);
-#else
- // note: ideally on windows, hard and soft limits but it breaks compat
-#ifndef Q_WS_WINCE
- int softLimit = qMin(screenSize.width()/2, 500);
-#else
- int softLimit = qMin(screenSize.width() * 3 / 4, 500);
-#endif //Q_WS_WINCE
-#endif
-
- if (informativeLabel)
- informativeLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
-
- label->setWordWrap(false); // makes the label return min size
- int width = layoutMinimumWidth();
-
- if (width > softLimit) {
- label->setWordWrap(true);
- width = qMax(softLimit, layoutMinimumWidth());
-
- if (width > hardLimit) {
- label->d_func()->ensureTextControl();
- if (QTextControl *control = label->d_func()->control) {
- QTextOption opt = control->document()->defaultTextOption();
- opt.setWrapMode(QTextOption::WrapAnywhere);
- control->document()->setDefaultTextOption(opt);
- }
- width = hardLimit;
- }
- }
-#ifdef Q_WS_S60
- // in S60 portait messageBoxes should always occupy maximum width
- if (QApplication::desktop()->size().height() > QApplication::desktop()->size().width()){
- width = hardLimit;
- } else {
- // in landscape the messageBoxes should be of same width as in portrait
- width = qMin(QApplication::desktop()->size().height(), hardLimit);
- }
-#endif
-
- if (informativeLabel) {
- label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
- QSizePolicy policy(QSizePolicy::Minimum, QSizePolicy::Preferred);
- policy.setHeightForWidth(true);
- informativeLabel->setSizePolicy(policy);
- width = qMax(width, layoutMinimumWidth());
- if (width > hardLimit) { // longest word is really big, so wrap anywhere
- informativeLabel->d_func()->ensureTextControl();
- if (QTextControl *control = informativeLabel->d_func()->control) {
- QTextOption opt = control->document()->defaultTextOption();
- opt.setWrapMode(QTextOption::WrapAnywhere);
- control->document()->setDefaultTextOption(opt);
- }
- width = hardLimit;
- }
- policy.setHeightForWidth(label->wordWrap());
- label->setSizePolicy(policy);
- }
-
- QFontMetrics fm(QApplication::font("QWorkspaceTitleBar"));
- int windowTitleWidth = qMin(fm.width(q->windowTitle()) + 50, hardLimit);
- if (windowTitleWidth > width)
- width = windowTitleWidth;
-
- layout->activate();
- int height = (layout->hasHeightForWidth())
- ? layout->totalHeightForWidth(width)
- : layout->totalMinimumSize().height();
-
-#ifndef QT_NO_STYLE_S60
- QS60Style *s60Style = 0;
- s60Style = qobject_cast<QS60Style *>(QApplication::style());
-
- //use custom pixel metric to deduce the minimum height of the messagebox
- if (s60Style)
- height = qMax(height, s60Style->pixelMetric((QStyle::PixelMetric)PM_MessageBoxHeight));
-#endif
-
- q->setFixedSize(width, height);
- QCoreApplication::removePostedEvents(q, QEvent::LayoutRequest);
-}
-
-
-#ifdef Q_WS_WINCE
-/*!
- \internal
- Hides special buttons which are rather shown in the title bar
- on WinCE, to conserve screen space.
-*/
-
-void QMessageBoxPrivate::hideSpecial()
-{
- Q_Q(QMessageBox);
- QList<QPushButton*> list = q->findChildren<QPushButton*>();
- for (int i=0; i<list.size(); ++i) {
- QPushButton *pb = list.at(i);
- QString text = pb->text();
- text.remove(QChar::fromLatin1('&'));
- if (text == QApplication::translate("QMessageBox", "OK" ))
- pb->setFixedSize(0,0);
- }
-}
-#endif
-
-static int oldButton(int button)
-{
- switch (button & QMessageBox::ButtonMask) {
- case QMessageBox::Ok:
- return Old_Ok;
- case QMessageBox::Cancel:
- return Old_Cancel;
- case QMessageBox::Yes:
- return Old_Yes;
- case QMessageBox::No:
- return Old_No;
- case QMessageBox::Abort:
- return Old_Abort;
- case QMessageBox::Retry:
- return Old_Retry;
- case QMessageBox::Ignore:
- return Old_Ignore;
- case QMessageBox::YesToAll:
- return Old_YesAll;
- case QMessageBox::NoToAll:
- return Old_NoAll;
- default:
- return 0;
- }
-}
-
-int QMessageBoxPrivate::execReturnCode(QAbstractButton *button)
-{
- int ret = buttonBox->standardButton(button);
- if (ret == QMessageBox::NoButton) {
- ret = customButtonList.indexOf(button); // if button == 0, correctly sets ret = -1
- } else if (compatMode) {
- ret = oldButton(ret);
- }
- return ret;
-}
-
-void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button)
-{
- Q_Q(QMessageBox);
-#ifndef QT_NO_TEXTEDIT
- if (detailsButton && detailsText && button == detailsButton) {
- detailsButton->setLabel(detailsText->isHidden() ? HideLabel : ShowLabel);
- detailsText->setHidden(!detailsText->isHidden());
- updateSize();
- } else
-#endif
- {
- clickedButton = button;
- q->done(execReturnCode(button)); // does not trigger closeEvent
- emit q->buttonClicked(button);
-
- if (receiverToDisconnectOnClose) {
- QObject::disconnect(q, signalToDisconnectOnClose, receiverToDisconnectOnClose,
- memberToDisconnectOnClose);
- receiverToDisconnectOnClose = 0;
- }
- signalToDisconnectOnClose.clear();
- memberToDisconnectOnClose.clear();
- }
-}
-
-/*!
- \class QMessageBox
-
- \brief The QMessageBox class provides a modal dialog for informing
- the user or for asking the user a question and receiving an answer.
-
- \ingroup standard-dialogs
-
-
- A message box displays a primary \l{QMessageBox::text}{text} to
- alert the user to a situation, an \l{QMessageBox::informativeText}
- {informative text} to further explain the alert or to ask the user
- a question, and an optional \l{QMessageBox::detailedText}
- {detailed text} to provide even more data if the user requests
- it. A message box can also display an \l{QMessageBox::icon} {icon}
- and \l{QMessageBox::standardButtons} {standard buttons} for
- accepting a user response.
-
- Two APIs for using QMessageBox are provided, the property-based
- API, and the static functions. Calling one of the static functions
- is the simpler approach, but it is less flexible than using the
- property-based API, and the result is less informative. Using the
- property-based API is recommended.
-
- \section1 The Property-based API
-
- To use the property-based API, construct an instance of
- QMessageBox, set the desired properties, and call exec() to show
- the message. The simplest configuration is to set only the
- \l{QMessageBox::text} {message text} property.
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 5
-
- The user must click the \gui{OK} button to dismiss the message
- box. The rest of the GUI is blocked until the message box is
- dismissed.
-
- \image msgbox1.png
-
- A better approach than just alerting the user to an event is to
- also ask the user what to do about it. Store the question in the
- \l{QMessageBox::informativeText} {informative text} property, and
- set the \l{QMessageBox::standardButtons} {standard buttons}
- property to the set of buttons you want as the set of user
- responses. The buttons are specified by combining values from
- StandardButtons using the bitwise OR operator. The display order
- for the buttons is platform-dependent. For example, on Windows,
- \gui{Save} is displayed to the left of \gui{Cancel}, whereas on
- Mac OS, the order is reversed.
-
- Mark one of your standard buttons to be your
- \l{QMessageBox::defaultButton()} {default button}.
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 6
-
- This is the approach recommended in the
- \l{http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGWindows/chapter_18_section_7.html}
- {Mac OS X Guidlines}. Similar guidlines apply for the other
- platforms, but note the different ways the
- \l{QMessageBox::informativeText} {informative text} is handled for
- different platforms.
-
- \image msgbox2.png
-
- The exec() slot returns the StandardButtons value of the button
- that was clicked.
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 7
-
- To give the user more information to help him answer the question,
- set the \l{QMessageBox::detailedText} {detailed text} property. If
- the \l{QMessageBox::detailedText} {detailed text} property is set,
- the \gui{Show Details...} button will be shown.
-
- \image msgbox3.png
-
- Clicking the \gui{Show Details...} button displays the detailed text.
-
- \image msgbox4.png
-
- \section2 Rich Text and the Text Format Property
-
- The \l{QMessageBox::detailedText} {detailed text} property is
- always interpreted as plain text. The \l{QMessageBox::text} {main
- text} and \l{QMessageBox::informativeText} {informative text}
- properties can be either plain text or rich text. These strings
- are interpreted according to the setting of the
- \l{QMessageBox::textFormat} {text format} property. The default
- setting is \l{Qt::AutoText} {auto-text}.
-
- Note that for some plain text strings containing XML
- meta-characters, the auto-text \l{Qt::mightBeRichText()} {rich
- text detection test} may fail causing your plain text string to be
- interpreted incorrectly as rich text. In these rare cases, use
- Qt::convertFromPlainText() to convert your plain text string to a
- visually equivalent rich text string, or set the
- \l{QMessageBox::textFormat} {text format} property explicitly with
- setTextFormat().
-
- \section2 Severity Levels and the Icon and Pixmap Properties
-
- QMessageBox supports four predefined message severity levels, or message
- types, which really only differ in the predefined icon they each show.
- Specify one of the four predefined message types by setting the
- \l{QMessageBox::icon}{icon} property to one of the
- \l{QMessageBox::Icon}{predefined icons}. The following rules are
- guidelines:
-
- \table
- \row
- \o \img qmessagebox-quest.png
- \o \l Question
- \o For asking a question during normal operations.
- \row
- \o \img qmessagebox-info.png
- \o \l Information
- \o For reporting information about normal operations.
- \row
- \o \img qmessagebox-warn.png
- \o \l Warning
- \o For reporting non-critical errors.
- \row
- \o \img qmessagebox-crit.png
- \o \l Critical
- \o For reporting critical errors.
- \endtable
-
- \l{QMessageBox::Icon}{Predefined icons} are not defined by QMessageBox, but
- provided by the style. The default value is \l{QMessageBox::NoIcon}
- {No Icon}. The message boxes are otherwise the same for all cases. When
- using a standard icon, use the one recommended in the table, or use the
- one recommended by the style guidelines for your platform. If none of the
- standard icons is right for your message box, you can use a custom icon by
- setting the \l{QMessageBox::iconPixmap}{icon pixmap} property instead of
- setting the \l{QMessageBox::icon}{icon} property.
-
- In summary, to set an icon, use \e{either} setIcon() for one of the
- standard icons, \e{or} setIconPixmap() for a custom icon.
-
- \section1 The Static Functions API
-
- Building message boxes with the static functions API, although
- convenient, is less flexible than using the property-based API,
- because the static function signatures lack parameters for setting
- the \l{QMessageBox::informativeText} {informative text} and
- \l{QMessageBox::detailedText} {detailed text} properties. One
- work-around for this has been to use the \c{title} parameter as
- the message box main text and the \c{text} parameter as the
- message box informative text. Because this has the obvious
- drawback of making a less readable message box, platform
- guidelines do not recommend it. The \e{Microsoft Windows User
- Interface Guidelines} recommend using the
- \l{QCoreApplication::applicationName} {application name} as the
- \l{QMessageBox::setWindowTitle()} {window's title}, which means
- that if you have an informative text in addition to your main
- text, you must concatenate it to the \c{text} parameter.
-
- Note that the static function signatures have changed with respect
- to their button parameters, which are now used to set the
- \l{QMessageBox::standardButtons} {standard buttons} and the
- \l{QMessageBox::defaultButton()} {default button}.
-
- Static functions are available for creating information(),
- question(), warning(), and critical() message boxes.
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 0
-
- The \l{dialogs/standarddialogs}{Standard Dialogs} example shows
- how to use QMessageBox and the other built-in Qt dialogs.
-
- \section1 Advanced Usage
-
- If the \l{QMessageBox::StandardButtons} {standard buttons} are not
- flexible enough for your message box, you can use the addButton()
- overload that takes a text and a ButtonRoleto to add custom
- buttons. The ButtonRole is used by QMessageBox to determine the
- ordering of the buttons on screen (which varies according to the
- platform). You can test the value of clickedButton() after calling
- exec(). For example,
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 2
-
- \section1 Default and Escape Keys
-
- The default button (i.e., the button activated when \key Enter is
- pressed) can be specified using setDefaultButton(). If a default
- button is not specified, QMessageBox tries to find one based on
- the \l{ButtonRole} {button roles} of the buttons used in the
- message box.
-
- The escape button (the button activated when \key Esc is pressed)
- can be specified using setEscapeButton(). If an escape button is
- not specified, QMessageBox tries to find one using these rules:
-
- \list 1
-
- \o If there is only one button, it is the button activated when
- \key Esc is pressed.
-
- \o If there is a \l Cancel button, it is the button activated when
- \key Esc is pressed.
-
- \o If there is exactly one button having either
- \l{QMessageBox::RejectRole} {the Reject role} or the
- \l{QMessageBox::NoRole} {the No role}, it is the button
- activated when \key Esc is pressed.
-
- \endlist
-
- When an escape button can't be determined using these rules,
- pressing \key Esc has no effect.
-
- \sa QDialogButtonBox, {fowler}{GUI Design Handbook: Message Box}, {Standard Dialogs Example}, {Application Example}
-*/
-
-/*!
- \enum QMessageBox::StandardButton
- \since 4.2
-
- These enums describe flags for standard buttons. Each button has a
- defined \l ButtonRole.
-
- \value Ok An "OK" button defined with the \l AcceptRole.
- \value Open A "Open" button defined with the \l AcceptRole.
- \value Save A "Save" button defined with the \l AcceptRole.
- \value Cancel A "Cancel" button defined with the \l RejectRole.
- \value Close A "Close" button defined with the \l RejectRole.
- \value Discard A "Discard" or "Don't Save" button, depending on the platform,
- defined with the \l DestructiveRole.
- \value Apply An "Apply" button defined with the \l ApplyRole.
- \value Reset A "Reset" button defined with the \l ResetRole.
- \value RestoreDefaults A "Restore Defaults" button defined with the \l ResetRole.
- \value Help A "Help" button defined with the \l HelpRole.
- \value SaveAll A "Save All" button defined with the \l AcceptRole.
- \value Yes A "Yes" button defined with the \l YesRole.
- \value YesToAll A "Yes to All" button defined with the \l YesRole.
- \value No A "No" button defined with the \l NoRole.
- \value NoToAll A "No to All" button defined with the \l NoRole.
- \value Abort An "Abort" button defined with the \l RejectRole.
- \value Retry A "Retry" button defined with the \l AcceptRole.
- \value Ignore An "Ignore" button defined with the \l AcceptRole.
-
- \value NoButton An invalid button.
-
- \omitvalue FirstButton
- \omitvalue LastButton
-
- The following values are obsolete:
-
- \value YesAll Use YesToAll instead.
- \value NoAll Use NoToAll instead.
- \value Default Use the \c defaultButton argument of
- information(), warning(), etc. instead, or call
- setDefaultButton().
- \value Escape Call setEscapeButton() instead.
- \value FlagMask
- \value ButtonMask
-
- \sa ButtonRole, standardButtons
-*/
-
-/*!
- \fn void QMessageBox::buttonClicked(QAbstractButton *button)
-
- This signal is emitted whenever a button is clicked inside the QMessageBox.
- The button that was clicked in returned in \a button.
-*/
-
-/*!
- Constructs a message box with no text and no buttons. \a parent is
- passed to the QDialog constructor.
-
- On Mac OS X, if you want your message box to appear
- as a Qt::Sheet of its \a parent, set the message box's
- \l{setWindowModality()} {window modality} to Qt::WindowModal or use open().
- Otherwise, the message box will be a standard dialog.
-
-*/
-QMessageBox::QMessageBox(QWidget *parent)
- : QDialog(*new QMessageBoxPrivate, parent, Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint)
-{
- Q_D(QMessageBox);
- d->init();
-}
-
-/*!
- Constructs a message box with the given \a icon, \a title, \a
- text, and standard \a buttons. Standard or custom buttons can be
- added at any time using addButton(). The \a parent and \a f
- arguments are passed to the QDialog constructor.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- On Mac OS X, if \a parent is not 0 and you want your message box
- to appear as a Qt::Sheet of that parent, set the message box's
- \l{setWindowModality()} {window modality} to Qt::WindowModal
- (default). Otherwise, the message box will be a standard dialog.
-
- \sa setWindowTitle(), setText(), setIcon(), setStandardButtons()
-*/
-QMessageBox::QMessageBox(Icon icon, const QString &title, const QString &text,
- StandardButtons buttons, QWidget *parent,
- Qt::WindowFlags f)
-: QDialog(*new QMessageBoxPrivate, parent, f | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint)
-{
- Q_D(QMessageBox);
- d->init(title, text);
- setIcon(icon);
- if (buttons != NoButton)
- setStandardButtons(buttons);
-}
-
-/*!
- Destroys the message box.
-*/
-QMessageBox::~QMessageBox()
-{
-}
-
-/*!
- \since 4.2
-
- Adds the given \a button to the message box with the specified \a
- role.
-
- \sa removeButton(), button(), setStandardButtons()
-*/
-void QMessageBox::addButton(QAbstractButton *button, ButtonRole role)
-{
- Q_D(QMessageBox);
- if (!button)
- return;
- removeButton(button);
- d->buttonBox->addButton(button, (QDialogButtonBox::ButtonRole)role);
- d->customButtonList.append(button);
- d->autoAddOkButton = false;
-}
-
-/*!
- \since 4.2
- \overload
-
- Creates a button with the given \a text, adds it to the message box for the
- specified \a role, and returns it.
-*/
-QPushButton *QMessageBox::addButton(const QString& text, ButtonRole role)
-{
- Q_D(QMessageBox);
- QPushButton *pushButton = new QPushButton(text);
- addButton(pushButton, role);
- d->updateSize();
- return pushButton;
-}
-
-/*!
- \since 4.2
- \overload
-
- Adds a standard \a button to the message box if it is valid to do so, and
- returns the push button.
-
- \sa setStandardButtons()
-*/
-QPushButton *QMessageBox::addButton(StandardButton button)
-{
- Q_D(QMessageBox);
- QPushButton *pushButton = d->buttonBox->addButton((QDialogButtonBox::StandardButton)button);
- if (pushButton)
- d->autoAddOkButton = false;
- return pushButton;
-}
-
-/*!
- \since 4.2
-
- Removes \a button from the button box without deleting it.
-
- \sa addButton(), setStandardButtons()
-*/
-void QMessageBox::removeButton(QAbstractButton *button)
-{
- Q_D(QMessageBox);
- d->customButtonList.removeAll(button);
- if (d->escapeButton == button)
- d->escapeButton = 0;
- if (d->defaultButton == button)
- d->defaultButton = 0;
- d->buttonBox->removeButton(button);
- d->updateSize();
-}
-
-/*!
- \property QMessageBox::standardButtons
- \brief collection of standard buttons in the message box
- \since 4.2
-
- This property controls which standard buttons are used by the message box.
-
- By default, this property contains no standard buttons.
-
- \sa addButton()
-*/
-void QMessageBox::setStandardButtons(StandardButtons buttons)
-{
- Q_D(QMessageBox);
- d->buttonBox->setStandardButtons(QDialogButtonBox::StandardButtons(int(buttons)));
-
- QList<QAbstractButton *> buttonList = d->buttonBox->buttons();
- if (!buttonList.contains(d->escapeButton))
- d->escapeButton = 0;
- if (!buttonList.contains(d->defaultButton))
- d->defaultButton = 0;
- d->autoAddOkButton = false;
- d->updateSize();
-}
-
-QMessageBox::StandardButtons QMessageBox::standardButtons() const
-{
- Q_D(const QMessageBox);
- return QMessageBox::StandardButtons(int(d->buttonBox->standardButtons()));
-}
-
-/*!
- \since 4.2
-
- Returns the standard button enum value corresponding to the given \a button,
- or NoButton if the given \a button isn't a standard button.
-
- \sa button(), standardButtons()
-*/
-QMessageBox::StandardButton QMessageBox::standardButton(QAbstractButton *button) const
-{
- Q_D(const QMessageBox);
- return (QMessageBox::StandardButton)d->buttonBox->standardButton(button);
-}
-
-/*!
- \since 4.2
-
- Returns a pointer corresponding to the standard button \a which,
- or 0 if the standard button doesn't exist in this message box.
-
- \sa standardButtons, standardButton()
-*/
-QAbstractButton *QMessageBox::button(StandardButton which) const
-{
- Q_D(const QMessageBox);
- return d->buttonBox->button(QDialogButtonBox::StandardButton(which));
-}
-
-/*!
- \since 4.2
-
- Returns the button that is activated when escape is pressed.
-
- By default, QMessageBox attempts to automatically detect an
- escape button as follows:
-
- \list 1
- \o If there is only one button, it is made the escape button.
- \o If there is a \l Cancel button, it is made the escape button.
- \o On Mac OS X only, if there is exactly one button with the role
- QMessageBox::RejectRole, it is made the escape button.
- \endlist
-
- When an escape button could not be automatically detected, pressing
- \key Esc has no effect.
-
- \sa addButton()
-*/
-QAbstractButton *QMessageBox::escapeButton() const
-{
- Q_D(const QMessageBox);
- return d->escapeButton;
-}
-
-/*!
- \since 4.2
-
- Sets the button that gets activated when the \key Escape key is
- pressed to \a button.
-
- \sa addButton(), clickedButton()
-*/
-void QMessageBox::setEscapeButton(QAbstractButton *button)
-{
- Q_D(QMessageBox);
- if (d->buttonBox->buttons().contains(button))
- d->escapeButton = button;
-}
-
-/*!
- \since 4.3
-
- Sets the buttons that gets activated when the \key Escape key is
- pressed to \a button.
-
- \sa addButton(), clickedButton()
-*/
-void QMessageBox::setEscapeButton(QMessageBox::StandardButton button)
-{
- Q_D(QMessageBox);
- setEscapeButton(d->buttonBox->button(QDialogButtonBox::StandardButton(button)));
-}
-
-void QMessageBoxPrivate::detectEscapeButton()
-{
- if (escapeButton) { // escape button explicitly set
- detectedEscapeButton = escapeButton;
- return;
- }
-
- // Cancel button automatically becomes escape button
- detectedEscapeButton = buttonBox->button(QDialogButtonBox::Cancel);
- if (detectedEscapeButton)
- return;
-
- // If there is only one button, make it the escape button
- const QList<QAbstractButton *> buttons = buttonBox->buttons();
- if (buttons.count() == 1) {
- detectedEscapeButton = buttons.first();
- return;
- }
-
- // if the message box has one RejectRole button, make it the escape button
- for (int i = 0; i < buttons.count(); i++) {
- if (buttonBox->buttonRole(buttons.at(i)) == QDialogButtonBox::RejectRole) {
- if (detectedEscapeButton) { // already detected!
- detectedEscapeButton = 0;
- break;
- }
- detectedEscapeButton = buttons.at(i);
- }
- }
- if (detectedEscapeButton)
- return;
-
- // if the message box has one NoRole button, make it the escape button
- for (int i = 0; i < buttons.count(); i++) {
- if (buttonBox->buttonRole(buttons.at(i)) == QDialogButtonBox::NoRole) {
- if (detectedEscapeButton) { // already detected!
- detectedEscapeButton = 0;
- break;
- }
- detectedEscapeButton = buttons.at(i);
- }
- }
-}
-
-/*!
- \since 4.2
-
- Returns the button that was clicked by the user,
- or 0 if the user hit the \key Esc key and
- no \l{setEscapeButton()}{escape button} was set.
-
- If exec() hasn't been called yet, returns 0.
-
- Example:
-
- \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 3
-
- \sa standardButton(), button()
-*/
-QAbstractButton *QMessageBox::clickedButton() const
-{
- Q_D(const QMessageBox);
- return d->clickedButton;
-}
-
-/*!
- \since 4.2
-
- Returns the button that should be the message box's
- \l{QPushButton::setDefault()}{default button}. Returns 0
- if no default button was set.
-
- \sa addButton(), QPushButton::setDefault()
-*/
-QPushButton *QMessageBox::defaultButton() const
-{
- Q_D(const QMessageBox);
- return d->defaultButton;
-}
-
-/*!
- \since 4.2
-
- Sets the message box's \l{QPushButton::setDefault()}{default button}
- to \a button.
-
- \sa addButton(), QPushButton::setDefault()
-*/
-void QMessageBox::setDefaultButton(QPushButton *button)
-{
- Q_D(QMessageBox);
- if (!d->buttonBox->buttons().contains(button))
- return;
- d->defaultButton = button;
- button->setDefault(true);
- button->setFocus();
-}
-
-/*!
- \since 4.3
-
- Sets the message box's \l{QPushButton::setDefault()}{default button}
- to \a button.
-
- \sa addButton(), QPushButton::setDefault()
-*/
-void QMessageBox::setDefaultButton(QMessageBox::StandardButton button)
-{
- Q_D(QMessageBox);
- setDefaultButton(d->buttonBox->button(QDialogButtonBox::StandardButton(button)));
-}
-
-/*!
- \property QMessageBox::text
- \brief the message box text to be displayed.
-
- The text will be interpreted either as a plain text or as rich text,
- depending on the text format setting (\l QMessageBox::textFormat).
- The default setting is Qt::AutoText, i.e., the message box will try
- to auto-detect the format of the text.
-
- The default value of this property is an empty string.
-
- \sa textFormat, QMessageBox::informativeText, QMessageBox::detailedText
-*/
-QString QMessageBox::text() const
-{
- Q_D(const QMessageBox);
- return d->label->text();
-}
-
-void QMessageBox::setText(const QString &text)
-{
- Q_D(QMessageBox);
- d->label->setText(text);
- d->label->setWordWrap(d->label->textFormat() == Qt::RichText
- || (d->label->textFormat() == Qt::AutoText && Qt::mightBeRichText(text)));
- d->updateSize();
-}
-
-/*!
- \enum QMessageBox::Icon
-
- This enum has the following values:
-
- \value NoIcon the message box does not have any icon.
-
- \value Question an icon indicating that
- the message is asking a question.
-
- \value Information an icon indicating that
- the message is nothing out of the ordinary.
-
- \value Warning an icon indicating that the
- message is a warning, but can be dealt with.
-
- \value Critical an icon indicating that
- the message represents a critical problem.
-
-*/
-
-/*!
- \property QMessageBox::icon
- \brief the message box's icon
-
- The icon of the message box can be specified with one of the
- values:
-
- \list
- \o QMessageBox::NoIcon
- \o QMessageBox::Question
- \o QMessageBox::Information
- \o QMessageBox::Warning
- \o QMessageBox::Critical
- \endlist
-
- The default is QMessageBox::NoIcon.
-
- The pixmap used to display the actual icon depends on the current
- \l{QWidget::style()} {GUI style}. You can also set a custom pixmap
- for the icon by setting the \l{QMessageBox::iconPixmap} {icon
- pixmap} property.
-
- \sa iconPixmap
-*/
-QMessageBox::Icon QMessageBox::icon() const
-{
- Q_D(const QMessageBox);
- return d->icon;
-}
-
-void QMessageBox::setIcon(Icon icon)
-{
- Q_D(QMessageBox);
- setIconPixmap(QMessageBoxPrivate::standardIcon((QMessageBox::Icon)icon,
- this));
- d->icon = icon;
-}
-
-/*!
- \property QMessageBox::iconPixmap
- \brief the current icon
-
- The icon currently used by the message box. Note that it's often
- hard to draw one pixmap that looks appropriate in all GUI styles;
- you may want to supply a different pixmap for each platform.
-
- By default, this property is undefined.
-
- \sa icon
-*/
-QPixmap QMessageBox::iconPixmap() const
-{
- Q_D(const QMessageBox);
- if (d->iconLabel && d->iconLabel->pixmap())
- return *d->iconLabel->pixmap();
- return QPixmap();
-}
-
-void QMessageBox::setIconPixmap(const QPixmap &pixmap)
-{
- Q_D(QMessageBox);
- d->iconLabel->setPixmap(pixmap);
- d->updateSize();
- d->icon = NoIcon;
-}
-
-/*!
- \property QMessageBox::textFormat
- \brief the format of the text displayed by the message box
-
- The current text format used by the message box. See the \l
- Qt::TextFormat enum for an explanation of the possible options.
-
- The default format is Qt::AutoText.
-
- \sa setText()
-*/
-Qt::TextFormat QMessageBox::textFormat() const
-{
- Q_D(const QMessageBox);
- return d->label->textFormat();
-}
-
-void QMessageBox::setTextFormat(Qt::TextFormat format)
-{
- Q_D(QMessageBox);
- d->label->setTextFormat(format);
- d->label->setWordWrap(format == Qt::RichText
- || (format == Qt::AutoText && Qt::mightBeRichText(d->label->text())));
- d->updateSize();
-}
-
-/*!
- \reimp
-*/
-bool QMessageBox::event(QEvent *e)
-{
- bool result =QDialog::event(e);
- switch (e->type()) {
- case QEvent::LayoutRequest:
- d_func()->updateSize();
- break;
- case QEvent::LanguageChange:
- d_func()->retranslateStrings();
- break;
-#ifdef Q_WS_WINCE
- case QEvent::OkRequest:
- case QEvent::HelpRequest: {
- QString bName =
- (e->type() == QEvent::OkRequest)
- ? QApplication::translate("QMessageBox", "OK")
- : QApplication::translate("QMessageBox", "Help");
- QList<QPushButton*> list = findChildren<QPushButton*>();
- for (int i=0; i<list.size(); ++i) {
- QPushButton *pb = list.at(i);
- if (pb->text() == bName) {
- if (pb->isEnabled())
- pb->click();
- return pb->isEnabled();
- }
- }
- }
-#endif
- default:
- break;
- }
- return result;
-}
-
-/*!
- \reimp
-*/
-void QMessageBox::resizeEvent(QResizeEvent *event)
-{
- QDialog::resizeEvent(event);
-}
-
-/*!
- \reimp
-*/
-void QMessageBox::closeEvent(QCloseEvent *e)
-{
- Q_D(QMessageBox);
- if (!d->detectedEscapeButton) {
- e->ignore();
- return;
- }
- QDialog::closeEvent(e);
- d->clickedButton = d->detectedEscapeButton;
- setResult(d->execReturnCode(d->detectedEscapeButton));
-}
-
-/*!
- \reimp
-*/
-void QMessageBox::changeEvent(QEvent *ev)
-{
- Q_D(QMessageBox);
- switch (ev->type()) {
- case QEvent::StyleChange:
- {
- if (d->icon != NoIcon)
- setIcon(d->icon);
- Qt::TextInteractionFlags flags(style()->styleHint(QStyle::SH_MessageBox_TextInteractionFlags, 0, this));
- d->label->setTextInteractionFlags(flags);
- d->buttonBox->setCenterButtons(style()->styleHint(QStyle::SH_MessageBox_CenterButtons, 0, this));
- if (d->informativeLabel)
- d->informativeLabel->setTextInteractionFlags(flags);
- // intentional fall through
- }
- case QEvent::FontChange:
- case QEvent::ApplicationFontChange:
-#ifdef Q_WS_MAC
- {
- QFont f = font();
- f.setBold(true);
- d->label->setFont(f);
- }
-#endif
- default:
- break;
- }
- QDialog::changeEvent(ev);
-}
-
-/*!
- \reimp
-*/
-void QMessageBox::keyPressEvent(QKeyEvent *e)
-{
- Q_D(QMessageBox);
- if (e->key() == Qt::Key_Escape
-#ifdef Q_WS_MAC
- || (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period)
-#endif
- ) {
- if (d->detectedEscapeButton) {
-#ifdef Q_WS_MAC
- d->detectedEscapeButton->animateClick();
-#else
- d->detectedEscapeButton->click();
-#endif
- }
- return;
- }
-
-#if defined (Q_OS_WIN) && !defined(QT_NO_CLIPBOARD) && !defined(QT_NO_SHORTCUT)
- if (e == QKeySequence::Copy) {
- QString separator = QString::fromLatin1("---------------------------\n");
- QString textToCopy = separator;
- separator.prepend(QLatin1Char('\n'));
- textToCopy += windowTitle() + separator; // title
- textToCopy += d->label->text() + separator; // text
-
- if (d->informativeLabel)
- textToCopy += d->informativeLabel->text() + separator;
-
- QString buttonTexts;
- QList<QAbstractButton *> buttons = d->buttonBox->buttons();
- for (int i = 0; i < buttons.count(); i++) {
- buttonTexts += buttons[i]->text() + QLatin1String(" ");
- }
- textToCopy += buttonTexts + separator;
-
- QApplication::clipboard()->setText(textToCopy);
- return;
- }
-#endif //QT_NO_SHORTCUT QT_NO_CLIPBOARD Q_OS_WIN
-
-#ifndef QT_NO_SHORTCUT
- if (!(e->modifiers() & Qt::AltModifier)) {
- int key = e->key() & ~((int)Qt::MODIFIER_MASK|(int)Qt::UNICODE_ACCEL);
- if (key) {
- const QList<QAbstractButton *> buttons = d->buttonBox->buttons();
- for (int i = 0; i < buttons.count(); ++i) {
- QAbstractButton *pb = buttons.at(i);
- int acc = pb->shortcut() & ~((int)Qt::MODIFIER_MASK|(int)Qt::UNICODE_ACCEL);
- if (acc == key) {
- pb->animateClick();
- return;
- }
- }
- }
- }
-#endif
- QDialog::keyPressEvent(e);
-}
-
-#ifdef Q_WS_WINCE
-/*!
- \reimp
-*/
-void QMessageBox::setVisible(bool visible)
-{
- Q_D(QMessageBox);
- if (visible)
- d->hideSpecial();
- QDialog::setVisible(visible);
-}
-#endif
-
-
-/*!
- \overload
-
- Opens the dialog and connects its finished() or buttonClicked() signal to
- the slot specified by \a receiver and \a member. If the slot in \a member
- has a pointer for its first parameter the connection is to buttonClicked(),
- otherwise the connection is to finished().
-
- The signal will be disconnected from the slot when the dialog is closed.
-*/
-void QMessageBox::open(QObject *receiver, const char *member)
-{
- Q_D(QMessageBox);
- const char *signal = member && strchr(member, '*') ? SIGNAL(buttonClicked(QAbstractButton*))
- : SIGNAL(finished(int));
- connect(this, signal, receiver, member);
- d->signalToDisconnectOnClose = signal;
- d->receiverToDisconnectOnClose = receiver;
- d->memberToDisconnectOnClose = member;
- QDialog::open();
-}
-
-/*!
- \since 4.5
-
- Returns a list of all the buttons that have been added to the message box.
-
- \sa buttonRole(), addButton(), removeButton()
-*/
-QList<QAbstractButton *> QMessageBox::buttons() const
-{
- Q_D(const QMessageBox);
- return d->buttonBox->buttons();
-}
-
-/*!
- \since 4.5
-
- Returns the button role for the specified \a button. This function returns
- \l InvalidRole if \a button is 0 or has not been added to the message box.
-
- \sa buttons(), addButton()
-*/
-QMessageBox::ButtonRole QMessageBox::buttonRole(QAbstractButton *button) const
-{
- Q_D(const QMessageBox);
- return QMessageBox::ButtonRole(d->buttonBox->buttonRole(button));
-}
-
-/*!
- \reimp
-*/
-void QMessageBox::showEvent(QShowEvent *e)
-{
- Q_D(QMessageBox);
- if (d->autoAddOkButton) {
- addButton(Ok);
-#if defined(Q_WS_WINCE)
- d->hideSpecial();
-#endif
- }
- if (d->detailsButton)
- addButton(d->detailsButton, QMessageBox::ActionRole);
- d->detectEscapeButton();
- d->updateSize();
-
-#ifndef QT_NO_ACCESSIBILITY
- QAccessible::updateAccessibility(this, 0, QAccessible::Alert);
-#endif
-#ifdef Q_WS_WIN
- HMENU systemMenu = GetSystemMenu((HWND)winId(), FALSE);
- if (!d->detectedEscapeButton) {
- EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
- }
- else {
- EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND|MF_ENABLED);
- }
-#endif
- QDialog::showEvent(e);
-}
-
-
-static QMessageBox::StandardButton showNewMessageBox(QWidget *parent,
- QMessageBox::Icon icon,
- const QString& title, const QString& text,
- QMessageBox::StandardButtons buttons,
- QMessageBox::StandardButton defaultButton)
-{
- // necessary for source compatibility with Qt 4.0 and 4.1
- // handles (Yes, No) and (Yes|Default, No)
- if (defaultButton && !(buttons & defaultButton))
- return (QMessageBox::StandardButton)
- QMessageBoxPrivate::showOldMessageBox(parent, icon, title,
- text, int(buttons),
- int(defaultButton), 0);
-
- QMessageBox msgBox(icon, title, text, QMessageBox::NoButton, parent);
- QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
- Q_ASSERT(buttonBox != 0);
-
- uint mask = QMessageBox::FirstButton;
- while (mask <= QMessageBox::LastButton) {
- uint sb = buttons & mask;
- mask <<= 1;
- if (!sb)
- continue;
- QPushButton *button = msgBox.addButton((QMessageBox::StandardButton)sb);
- // Choose the first accept role as the default
- if (msgBox.defaultButton())
- continue;
- if ((defaultButton == QMessageBox::NoButton && buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole)
- || (defaultButton != QMessageBox::NoButton && sb == uint(defaultButton)))
- msgBox.setDefaultButton(button);
- }
- if (msgBox.exec() == -1)
- return QMessageBox::Cancel;
- return msgBox.standardButton(msgBox.clickedButton());
-}
-
-/*!
- \since 4.2
-
- Opens an information message box with the given \a title and
- \a text in front of the specified \a parent widget.
-
- The standard \a buttons are added to the message box.
- \a defaultButton specifies the button used when \key Enter is pressed.
- \a defaultButton must refer to a button that was given in \a buttons.
- If \a defaultButton is QMessageBox::NoButton, QMessageBox
- chooses a suitable default automatically.
-
- Returns the identity of the standard button that was clicked. If
- \key Esc was pressed instead, the \l{Default and Escape Keys}
- {escape button} is returned.
-
- The message box is an \l{Qt::ApplicationModal}{application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa question(), warning(), critical()
-*/
-QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title,
- const QString& text, StandardButtons buttons,
- StandardButton defaultButton)
-{
- return showNewMessageBox(parent, Information, title, text, buttons,
- defaultButton);
-}
-
-
-/*!
- \since 4.2
-
- Opens a question message box with the given \a title and \a
- text in front of the specified \a parent widget.
-
- The standard \a buttons are added to the message box. \a
- defaultButton specifies the button used when \key Enter is
- pressed. \a defaultButton must refer to a button that was given in \a buttons.
- If \a defaultButton is QMessageBox::NoButton, QMessageBox
- chooses a suitable default automatically.
-
- Returns the identity of the standard button that was clicked. If
- \key Esc was pressed instead, the \l{Default and Escape Keys}
- {escape button} is returned.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), warning(), critical()
-*/
-QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title,
- const QString& text, StandardButtons buttons,
- StandardButton defaultButton)
-{
- return showNewMessageBox(parent, Question, title, text, buttons, defaultButton);
-}
-
-/*!
- \since 4.2
-
- Opens a warning message box with the given \a title and \a
- text in front of the specified \a parent widget.
-
- The standard \a buttons are added to the message box. \a
- defaultButton specifies the button used when \key Enter is
- pressed. \a defaultButton must refer to a button that was given in \a buttons.
- If \a defaultButton is QMessageBox::NoButton, QMessageBox
- chooses a suitable default automatically.
-
- Returns the identity of the standard button that was clicked. If
- \key Esc was pressed instead, the \l{Default and Escape Keys}
- {escape button} is returned.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa question(), information(), critical()
-*/
-QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString &title,
- const QString& text, StandardButtons buttons,
- StandardButton defaultButton)
-{
- return showNewMessageBox(parent, Warning, title, text, buttons, defaultButton);
-}
-
-/*!
- \since 4.2
-
- Opens a critical message box with the given \a title and \a
- text in front of the specified \a parent widget.
-
- The standard \a buttons are added to the message box. \a
- defaultButton specifies the button used when \key Enter is
- pressed. \a defaultButton must refer to a button that was given in \a buttons.
- If \a defaultButton is QMessageBox::NoButton, QMessageBox
- chooses a suitable default automatically.
-
- Returns the identity of the standard button that was clicked. If
- \key Esc was pressed instead, the \l{Default and Escape Keys}
- {escape button} is returned.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa question(), warning(), information()
-*/
-QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString &title,
- const QString& text, StandardButtons buttons,
- StandardButton defaultButton)
-{
- return showNewMessageBox(parent, Critical, title, text, buttons, defaultButton);
-}
-
-/*!
- Displays a simple about box with title \a title and text \a
- text. The about box's parent is \a parent.
-
- about() looks for a suitable icon in four locations:
-
- \list 1
- \o It prefers \link QWidget::windowIcon() parent->icon() \endlink
- if that exists.
- \o If not, it tries the top-level widget containing \a parent.
- \o If that fails, it tries the \link
- QApplication::activeWindow() active window. \endlink
- \o As a last resort it uses the Information icon.
- \endlist
-
- The about box has a single button labelled "OK". On Mac OS X, the
- about box is popped up as a modeless window; on other platforms,
- it is currently application modal.
-
- \sa QWidget::windowIcon(), QApplication::activeWindow()
-*/
-void QMessageBox::about(QWidget *parent, const QString &title, const QString &text)
-{
-#ifdef Q_WS_MAC
- static QPointer<QMessageBox> oldMsgBox;
-
- if (oldMsgBox && oldMsgBox->text() == text) {
- oldMsgBox->show();
- oldMsgBox->raise();
- oldMsgBox->activateWindow();
- return;
- }
-#endif
-
- QMessageBox *msgBox = new QMessageBox(title, text, Information, 0, 0, 0, parent
-#ifdef Q_WS_MAC
- , Qt::WindowTitleHint | Qt::WindowSystemMenuHint
-#endif
- );
- msgBox->setAttribute(Qt::WA_DeleteOnClose);
- QIcon icon = msgBox->windowIcon();
- QSize size = icon.actualSize(QSize(64, 64));
- msgBox->setIconPixmap(icon.pixmap(size));
-
- // should perhaps be a style hint
-#ifdef Q_WS_MAC
- oldMsgBox = msgBox;
-#if 0
- // ### doesn't work until close button is enabled in title bar
- msgBox->d_func()->autoAddOkButton = false;
-#else
- msgBox->d_func()->buttonBox->setCenterButtons(true);
-#endif
- msgBox->show();
-#else
- msgBox->exec();
-#endif
-}
-
-/*!
- Displays a simple message box about Qt, with the given \a title
- and centered over \a parent (if \a parent is not 0). The message
- includes the version number of Qt being used by the application.
-
- This is useful for inclusion in the \gui Help menu of an application,
- as shown in the \l{mainwindows/menus}{Menus} example.
-
- QApplication provides this functionality as a slot.
-
- On Mac OS X, the about box is popped up as a modeless window; on
- other platforms, it is currently application modal.
-
- \sa QApplication::aboutQt()
-*/
-void QMessageBox::aboutQt(QWidget *parent, const QString &title)
-{
-#ifdef Q_WS_MAC
- static QPointer<QMessageBox> oldMsgBox;
-
- if (oldMsgBox) {
- oldMsgBox->show();
- oldMsgBox->raise();
- oldMsgBox->activateWindow();
- return;
- }
-#endif
-
- QString translatedTextAboutQtCaption;
- translatedTextAboutQtCaption = QMessageBox::tr(
- "<h3>About Qt</h3>"
- "<p>This program uses Qt version %1.</p>"
- ).arg(QLatin1String(QT_VERSION_STR));
- QString translatedTextAboutQtText;
- translatedTextAboutQtText = QMessageBox::tr(
- "<p>Qt is a C++ toolkit for cross-platform application "
- "development.</p>"
- "<p>Qt provides single-source portability across MS&nbsp;Windows, "
- "Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. "
- "Qt is also available for embedded devices as Qt for Embedded Linux "
- "and Qt for Windows CE.</p>"
- "<p>Qt is available under three different licensing options designed "
- "to accommodate the needs of our various users.</p>"
- "<p>Qt licensed under our commercial license agreement is appropriate "
- "for development of proprietary/commercial software where you do not "
- "want to share any source code with third parties or otherwise cannot "
- "comply with the terms of the GNU LGPL version 2.1 or GNU GPL version "
- "3.0.</p>"
- "<p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the "
- "development of Qt applications (proprietary or open source) provided "
- "you can comply with the terms and conditions of the GNU LGPL version "
- "2.1.</p>"
- "<p>Qt licensed under the GNU General Public License version 3.0 is "
- "appropriate for the development of Qt applications where you wish to "
- "use such applications in combination with software subject to the "
- "terms of the GNU GPL version 3.0 or where you are otherwise willing "
- "to comply with the terms of the GNU GPL version 3.0.</p>"
- "<p>Please see <a href=\"http://qt.nokia.com/products/licensing\">qt.nokia.com/products/licensing</a> "
- "for an overview of Qt licensing.</p>"
- "<p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p>"
- "<p>Qt is a Nokia product. See <a href=\"http://qt.nokia.com/\">qt.nokia.com</a> "
- "for more information.</p>"
- );
- QMessageBox *msgBox = new QMessageBox(parent);
- msgBox->setAttribute(Qt::WA_DeleteOnClose);
- msgBox->setWindowTitle(title.isEmpty() ? tr("About Qt") : title);
- msgBox->setText(translatedTextAboutQtCaption);
- msgBox->setInformativeText(translatedTextAboutQtText);
-
- QPixmap pm(QLatin1String(":/trolltech/qmessagebox/images/qtlogo-64.png"));
- if (!pm.isNull())
- msgBox->setIconPixmap(pm);
-#if defined(Q_WS_WINCE)
- msgBox->setDefaultButton(msgBox->addButton(QMessageBox::Ok));
-#endif
-
- // should perhaps be a style hint
-#ifdef Q_WS_MAC
- oldMsgBox = msgBox;
-#if 0
- // ### doesn't work until close button is enabled in title bar
- msgBox->d_func()->autoAddOkButton = false;
-#else
- msgBox->d_func()->buttonBox->setCenterButtons(true);
-#endif
- msgBox->show();
-#else
- msgBox->exec();
-#endif
-}
-
-/*!
- \internal
-*/
-QSize QMessageBox::sizeHint() const
-{
- // ### Qt 5: remove
- return QDialog::sizeHint();
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Source and binary compatibility routines for 4.0 and 4.1
-
-static QMessageBox::StandardButton newButton(int button)
-{
- // this is needed for source compatibility with Qt 4.0 and 4.1
- if (button == QMessageBox::NoButton || (button & NewButtonMask))
- return QMessageBox::StandardButton(button & QMessageBox::ButtonMask);
-
-#if QT_VERSION < 0x050000
- // this is needed for binary compatibility with Qt 4.0 and 4.1
- switch (button & Old_ButtonMask) {
- case Old_Ok:
- return QMessageBox::Ok;
- case Old_Cancel:
- return QMessageBox::Cancel;
- case Old_Yes:
- return QMessageBox::Yes;
- case Old_No:
- return QMessageBox::No;
- case Old_Abort:
- return QMessageBox::Abort;
- case Old_Retry:
- return QMessageBox::Retry;
- case Old_Ignore:
- return QMessageBox::Ignore;
- case Old_YesAll:
- return QMessageBox::YesToAll;
- case Old_NoAll:
- return QMessageBox::NoToAll;
- default:
- return QMessageBox::NoButton;
- }
-#endif
-}
-
-static bool detectedCompat(int button0, int button1, int button2)
-{
- if (button0 != 0 && !(button0 & NewButtonMask))
- return true;
- if (button1 != 0 && !(button1 & NewButtonMask))
- return true;
- if (button2 != 0 && !(button2 & NewButtonMask))
- return true;
- return false;
-}
-
-QAbstractButton *QMessageBoxPrivate::findButton(int button0, int button1, int button2, int flags)
-{
- Q_Q(QMessageBox);
- int button = 0;
-
- if (button0 & flags) {
- button = button0;
- } else if (button1 & flags) {
- button = button1;
- } else if (button2 & flags) {
- button = button2;
- }
- return q->button(newButton(button));
-}
-
-void QMessageBoxPrivate::addOldButtons(int button0, int button1, int button2)
-{
- Q_Q(QMessageBox);
- q->addButton(newButton(button0));
- q->addButton(newButton(button1));
- q->addButton(newButton(button2));
- q->setDefaultButton(
- static_cast<QPushButton *>(findButton(button0, button1, button2, QMessageBox::Default)));
- q->setEscapeButton(findButton(button0, button1, button2, QMessageBox::Escape));
- compatMode = detectedCompat(button0, button1, button2);
-}
-
-QAbstractButton *QMessageBoxPrivate::abstractButtonForId(int id) const
-{
- Q_Q(const QMessageBox);
- QAbstractButton *result = customButtonList.value(id);
- if (result)
- return result;
- if (id & QMessageBox::FlagMask) // for compatibility with Qt 4.0/4.1 (even if it is silly)
- return 0;
- return q->button(newButton(id));
-}
-
-int QMessageBoxPrivate::showOldMessageBox(QWidget *parent, QMessageBox::Icon icon,
- const QString &title, const QString &text,
- int button0, int button1, int button2)
-{
- QMessageBox messageBox(icon, title, text, QMessageBox::NoButton, parent);
- messageBox.d_func()->addOldButtons(button0, button1, button2);
- return messageBox.exec();
-}
-
-int QMessageBoxPrivate::showOldMessageBox(QWidget *parent, QMessageBox::Icon icon,
- const QString &title, const QString &text,
- const QString &button0Text,
- const QString &button1Text,
- const QString &button2Text,
- int defaultButtonNumber,
- int escapeButtonNumber)
-{
- QMessageBox messageBox(icon, title, text, QMessageBox::NoButton, parent);
- QString myButton0Text = button0Text;
- if (myButton0Text.isEmpty())
- myButton0Text = QDialogButtonBox::tr("OK");
- messageBox.addButton(myButton0Text, QMessageBox::ActionRole);
- if (!button1Text.isEmpty())
- messageBox.addButton(button1Text, QMessageBox::ActionRole);
- if (!button2Text.isEmpty())
- messageBox.addButton(button2Text, QMessageBox::ActionRole);
-
- const QList<QAbstractButton *> &buttonList = messageBox.d_func()->customButtonList;
- messageBox.setDefaultButton(static_cast<QPushButton *>(buttonList.value(defaultButtonNumber)));
- messageBox.setEscapeButton(buttonList.value(escapeButtonNumber));
-
- return messageBox.exec();
-}
-
-void QMessageBoxPrivate::retranslateStrings()
-{
-#ifndef QT_NO_TEXTEDIT
- if (detailsButton)
- detailsButton->setLabel(detailsText->isHidden() ? ShowLabel : HideLabel);
-#endif
-}
-
-/*!
- \obsolete
-
- Constructs a message box with a \a title, a \a text, an \a icon,
- and up to three buttons.
-
- The \a icon must be one of the following:
- \list
- \o QMessageBox::NoIcon
- \o QMessageBox::Question
- \o QMessageBox::Information
- \o QMessageBox::Warning
- \o QMessageBox::Critical
- \endlist
-
- Each button, \a button0, \a button1 and \a button2, can have one
- of the following values:
- \list
- \o QMessageBox::NoButton
- \o QMessageBox::Ok
- \o QMessageBox::Cancel
- \o QMessageBox::Yes
- \o QMessageBox::No
- \o QMessageBox::Abort
- \o QMessageBox::Retry
- \o QMessageBox::Ignore
- \o QMessageBox::YesAll
- \o QMessageBox::NoAll
- \endlist
-
- Use QMessageBox::NoButton for the later parameters to have fewer
- than three buttons in your message box. If you don't specify any
- buttons at all, QMessageBox will provide an Ok button.
-
- One of the buttons can be OR-ed with the QMessageBox::Default
- flag to make it the default button (clicked when Enter is
- pressed).
-
- One of the buttons can be OR-ed with the QMessageBox::Escape flag
- to make it the cancel or close button (clicked when \key Esc is
- pressed).
-
- \snippet doc/src/snippets/dialogs/dialogs.cpp 2
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- The \a parent and \a f arguments are passed to
- the QDialog constructor.
-
- \sa setWindowTitle(), setText(), setIcon()
-*/
-QMessageBox::QMessageBox(const QString &title, const QString &text, Icon icon,
- int button0, int button1, int button2, QWidget *parent,
- Qt::WindowFlags f)
- : QDialog(*new QMessageBoxPrivate, parent,
- f /*| Qt::MSWindowsFixedSizeDialogHint #### */| Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint)
-{
- Q_D(QMessageBox);
- d->init(title, text);
- setIcon(icon);
- d->addOldButtons(button0, button1, button2);
-}
-
-/*!
- \obsolete
-
- Opens an information message box with the given \a title and the
- \a text. The dialog may have up to three buttons. Each of the
- buttons, \a button0, \a button1 and \a button2 may be set to one
- of the following values:
-
- \list
- \o QMessageBox::NoButton
- \o QMessageBox::Ok
- \o QMessageBox::Cancel
- \o QMessageBox::Yes
- \o QMessageBox::No
- \o QMessageBox::Abort
- \o QMessageBox::Retry
- \o QMessageBox::Ignore
- \o QMessageBox::YesAll
- \o QMessageBox::NoAll
- \endlist
-
- If you don't want all three buttons, set the last button, or last
- two buttons to QMessageBox::NoButton.
-
- One button can be OR-ed with QMessageBox::Default, and one
- button can be OR-ed with QMessageBox::Escape.
-
- Returns the identity (QMessageBox::Ok, or QMessageBox::No, etc.)
- of the button that was clicked.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa question(), warning(), critical()
-*/
-int QMessageBox::information(QWidget *parent, const QString &title, const QString& text,
- int button0, int button1, int button2)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Information, title, text,
- button0, button1, button2);
-}
-
-/*!
- \obsolete
- \overload
-
- Displays an information message box with the given \a title and
- \a text, as well as one, two or three buttons. Returns the index
- of the button that was clicked (0, 1 or 2).
-
- \a button0Text is the text of the first button, and is optional.
- If \a button0Text is not supplied, "OK" (translated) will be
- used. \a button1Text is the text of the second button, and is
- optional. \a button2Text is the text of the third button, and is
- optional. \a defaultButtonNumber (0, 1 or 2) is the index of the
- default button; pressing Return or Enter is the same as clicking
- the default button. It defaults to 0 (the first button). \a
- escapeButtonNumber is the index of the escape button; pressing
- \key Esc is the same as clicking this button. It defaults to -1;
- supply 0, 1 or 2 to make pressing \key Esc equivalent to clicking
- the relevant button.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa question(), warning(), critical()
-*/
-
-int QMessageBox::information(QWidget *parent, const QString &title, const QString& text,
- const QString& button0Text, const QString& button1Text,
- const QString& button2Text, int defaultButtonNumber,
- int escapeButtonNumber)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Information, title, text,
- button0Text, button1Text, button2Text,
- defaultButtonNumber, escapeButtonNumber);
-}
-
-/*!
- \obsolete
-
- Opens a question message box with the given \a title and \a text.
- The dialog may have up to three buttons. Each of the buttons, \a
- button0, \a button1 and \a button2 may be set to one of the
- following values:
-
- \list
- \o QMessageBox::NoButton
- \o QMessageBox::Ok
- \o QMessageBox::Cancel
- \o QMessageBox::Yes
- \o QMessageBox::No
- \o QMessageBox::Abort
- \o QMessageBox::Retry
- \o QMessageBox::Ignore
- \o QMessageBox::YesAll
- \o QMessageBox::NoAll
- \endlist
-
- If you don't want all three buttons, set the last button, or last
- two buttons to QMessageBox::NoButton.
-
- One button can be OR-ed with QMessageBox::Default, and one
- button can be OR-ed with QMessageBox::Escape.
-
- Returns the identity (QMessageBox::Yes, or QMessageBox::No, etc.)
- of the button that was clicked.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), warning(), critical()
-*/
-int QMessageBox::question(QWidget *parent, const QString &title, const QString& text,
- int button0, int button1, int button2)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Question, title, text,
- button0, button1, button2);
-}
-
-/*!
- \obsolete
- \overload
-
- Displays a question message box with the given \a title and \a
- text, as well as one, two or three buttons. Returns the index of
- the button that was clicked (0, 1 or 2).
-
- \a button0Text is the text of the first button, and is optional.
- If \a button0Text is not supplied, "OK" (translated) will be used.
- \a button1Text is the text of the second button, and is optional.
- \a button2Text is the text of the third button, and is optional.
- \a defaultButtonNumber (0, 1 or 2) is the index of the default
- button; pressing Return or Enter is the same as clicking the
- default button. It defaults to 0 (the first button). \a
- escapeButtonNumber is the index of the Escape button; pressing
- Escape is the same as clicking this button. It defaults to -1;
- supply 0, 1 or 2 to make pressing Escape equivalent to clicking
- the relevant button.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), warning(), critical()
-*/
-int QMessageBox::question(QWidget *parent, const QString &title, const QString& text,
- const QString& button0Text, const QString& button1Text,
- const QString& button2Text, int defaultButtonNumber,
- int escapeButtonNumber)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Question, title, text,
- button0Text, button1Text, button2Text,
- defaultButtonNumber, escapeButtonNumber);
-}
-
-
-/*!
- \obsolete
-
- Opens a warning message box with the given \a title and \a text.
- The dialog may have up to three buttons. Each of the button
- parameters, \a button0, \a button1 and \a button2 may be set to
- one of the following values:
-
- \list
- \o QMessageBox::NoButton
- \o QMessageBox::Ok
- \o QMessageBox::Cancel
- \o QMessageBox::Yes
- \o QMessageBox::No
- \o QMessageBox::Abort
- \o QMessageBox::Retry
- \o QMessageBox::Ignore
- \o QMessageBox::YesAll
- \o QMessageBox::NoAll
- \endlist
-
- If you don't want all three buttons, set the last button, or last
- two buttons to QMessageBox::NoButton.
-
- One button can be OR-ed with QMessageBox::Default, and one
- button can be OR-ed with QMessageBox::Escape.
-
- Returns the identity (QMessageBox::Ok or QMessageBox::No or ...)
- of the button that was clicked.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), question(), critical()
-*/
-int QMessageBox::warning(QWidget *parent, const QString &title, const QString& text,
- int button0, int button1, int button2)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Warning, title, text,
- button0, button1, button2);
-}
-
-/*!
- \obsolete
- \overload
-
- Displays a warning message box with the given \a title and \a
- text, as well as one, two, or three buttons. Returns the number
- of the button that was clicked (0, 1, or 2).
-
- \a button0Text is the text of the first button, and is optional.
- If \a button0Text is not supplied, "OK" (translated) will be used.
- \a button1Text is the text of the second button, and is optional,
- and \a button2Text is the text of the third button, and is
- optional. \a defaultButtonNumber (0, 1 or 2) is the index of the
- default button; pressing Return or Enter is the same as clicking
- the default button. It defaults to 0 (the first button). \a
- escapeButtonNumber is the index of the Escape button; pressing
- Escape is the same as clicking this button. It defaults to -1;
- supply 0, 1, or 2 to make pressing Escape equivalent to clicking
- the relevant button.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), question(), critical()
-*/
-int QMessageBox::warning(QWidget *parent, const QString &title, const QString& text,
- const QString& button0Text, const QString& button1Text,
- const QString& button2Text, int defaultButtonNumber,
- int escapeButtonNumber)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Warning, title, text,
- button0Text, button1Text, button2Text,
- defaultButtonNumber, escapeButtonNumber);
-}
-
-/*!
- \obsolete
-
- Opens a critical message box with the given \a title and \a text.
- The dialog may have up to three buttons. Each of the button
- parameters, \a button0, \a button1 and \a button2 may be set to
- one of the following values:
-
- \list
- \o QMessageBox::NoButton
- \o QMessageBox::Ok
- \o QMessageBox::Cancel
- \o QMessageBox::Yes
- \o QMessageBox::No
- \o QMessageBox::Abort
- \o QMessageBox::Retry
- \o QMessageBox::Ignore
- \o QMessageBox::YesAll
- \o QMessageBox::NoAll
- \endlist
-
- If you don't want all three buttons, set the last button, or last
- two buttons to QMessageBox::NoButton.
-
- One button can be OR-ed with QMessageBox::Default, and one
- button can be OR-ed with QMessageBox::Escape.
-
- Returns the identity (QMessageBox::Ok, or QMessageBox::No, etc.)
- of the button that was clicked.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), question(), warning()
-*/
-
-int QMessageBox::critical(QWidget *parent, const QString &title, const QString& text,
- int button0, int button1, int button2)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Critical, title, text,
- button0, button1, button2);
-}
-
-/*!
- \obsolete
- \overload
-
- Displays a critical error message box with the given \a title and
- \a text, as well as one, two, or three buttons. Returns the
- number of the button that was clicked (0, 1 or 2).
-
- \a button0Text is the text of the first button, and is optional.
- If \a button0Text is not supplied, "OK" (translated) will be used.
- \a button1Text is the text of the second button, and is optional,
- and \a button2Text is the text of the third button, and is
- optional. \a defaultButtonNumber (0, 1 or 2) is the index of the
- default button; pressing Return or Enter is the same as clicking
- the default button. It defaults to 0 (the first button). \a
- escapeButtonNumber is the index of the Escape button; pressing
- Escape is the same as clicking this button. It defaults to -1;
- supply 0, 1, or 2 to make pressing Escape equivalent to clicking
- the relevant button.
-
- The message box is an \l{Qt::ApplicationModal} {application modal}
- dialog box.
-
- \warning Do not delete \a parent during the execution of the dialog.
- If you want to do this, you should create the dialog
- yourself using one of the QMessageBox constructors.
-
- \sa information(), question(), warning()
-*/
-int QMessageBox::critical(QWidget *parent, const QString &title, const QString& text,
- const QString& button0Text, const QString& button1Text,
- const QString& button2Text, int defaultButtonNumber,
- int escapeButtonNumber)
-{
- return QMessageBoxPrivate::showOldMessageBox(parent, Critical, title, text,
- button0Text, button1Text, button2Text,
- defaultButtonNumber, escapeButtonNumber);
-}
-
-
-/*!
- \obsolete
-
- Returns the text of the message box button \a button, or
- an empty string if the message box does not contain the button.
-
- Use button() and QPushButton::text() instead.
-*/
-QString QMessageBox::buttonText(int button) const
-{
- Q_D(const QMessageBox);
-
- if (QAbstractButton *abstractButton = d->abstractButtonForId(button)) {
- return abstractButton->text();
- } else if (d->buttonBox->buttons().isEmpty() && (button == Ok || button == Old_Ok)) {
- // for compatibility with Qt 4.0/4.1
- return QDialogButtonBox::tr("OK");
- }
- return QString();
-}
-
-/*!
- \obsolete
-
- Sets the text of the message box button \a button to \a text.
- Setting the text of a button that is not in the message box is
- silently ignored.
-
- Use addButton() instead.
-*/
-void QMessageBox::setButtonText(int button, const QString &text)
-{
- Q_D(QMessageBox);
- if (QAbstractButton *abstractButton = d->abstractButtonForId(button)) {
- abstractButton->setText(text);
- } else if (d->buttonBox->buttons().isEmpty() && (button == Ok || button == Old_Ok)) {
- // for compatibility with Qt 4.0/4.1
- addButton(QMessageBox::Ok)->setText(text);
- }
-}
-
-#ifndef QT_NO_TEXTEDIT
-/*!
- \property QMessageBox::detailedText
- \brief the text to be displayed in the details area.
- \since 4.2
-
- The text will be interpreted as a plain text.
-
- By default, this property contains an empty string.
-
- \sa QMessageBox::text, QMessageBox::informativeText
-*/
-QString QMessageBox::detailedText() const
-{
- Q_D(const QMessageBox);
- return d->detailsText ? d->detailsText->text() : QString();
-}
-
-void QMessageBox::setDetailedText(const QString &text)
-{
- Q_D(QMessageBox);
- if (text.isEmpty()) {
- delete d->detailsText;
- d->detailsText = 0;
- removeButton(d->detailsButton);
- delete d->detailsButton;
- d->detailsButton = 0;
- return;
- }
-
- if (!d->detailsText) {
- d->detailsText = new QMessageBoxDetailsText(this);
- QGridLayout* grid = qobject_cast<QGridLayout*>(layout());
- if (grid)
- grid->addWidget(d->detailsText, grid->rowCount(), 0, 1, grid->columnCount());
- d->detailsText->hide();
- }
- if (!d->detailsButton)
- d->detailsButton = new DetailButton(this);
- d->detailsText->setText(text);
-}
-#endif // QT_NO_TEXTEDIT
-
-/*!
- \property QMessageBox::informativeText
-
- \brief the informative text that provides a fuller description for
- the message
-
- \since 4.2
-
- Infromative text can be used to expand upon the text() to give more
- information to the user. On the Mac, this text appears in small
- system font below the text(). On other platforms, it is simply
- appended to the existing text.
-
- By default, this property contains an empty string.
-
- \sa QMessageBox::text, QMessageBox::detailedText
-*/
-QString QMessageBox::informativeText() const
-{
- Q_D(const QMessageBox);
- return d->informativeLabel ? d->informativeLabel->text() : QString();
-}
-
-void QMessageBox::setInformativeText(const QString &text)
-{
- Q_D(QMessageBox);
- if (text.isEmpty()) {
- layout()->removeWidget(d->informativeLabel);
- delete d->informativeLabel;
- d->informativeLabel = 0;
-#ifndef Q_WS_MAC
- d->label->setContentsMargins(2, 0, 0, 0);
-#endif
- d->updateSize();
- return;
- }
-
- if (!d->informativeLabel) {
- QLabel *label = new QLabel;
- label->setObjectName(QLatin1String("qt_msgbox_informativelabel"));
- label->setTextInteractionFlags(Qt::TextInteractionFlags(style()->styleHint(QStyle::SH_MessageBox_TextInteractionFlags, 0, this)));
- label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
- label->setOpenExternalLinks(true);
- label->setWordWrap(true);
-#ifndef Q_WS_MAC
- d->label->setContentsMargins(2, 0, 0, 0);
- label->setContentsMargins(2, 0, 0, 6);
- label->setIndent(9);
-#else
- label->setContentsMargins(16, 0, 0, 0);
- // apply a smaller font the information label on the mac
- label->setFont(qt_app_fonts_hash()->value("QTipLabel"));
-#endif
- label->setWordWrap(true);
- QGridLayout *grid = static_cast<QGridLayout *>(layout());
-#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
- label->hide();
- QTextBrowser *textBrowser = new QTextBrowser(this);
- textBrowser->setOpenExternalLinks(true);
- grid->addWidget(textBrowser, 1, 1, 1, 1);
- d->textBrowser = textBrowser;
-#else
- grid->addWidget(label, 1, 1, 1, 1);
-#endif
- d->informativeLabel = label;
- }
- d->informativeLabel->setText(text);
-
-#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
- //We need to put the informative label inside textBrowser to enable scrolling of long texts.
- d->textBrowser->setText(d->informativeLabel->text());
-#endif
-
- d->updateSize();
-}
-
-/*!
- \since 4.2
-
- This function shadows QWidget::setWindowTitle().
-
- Sets the title of the message box to \a title. On Mac OS X,
- the window title is ignored (as required by the Mac OS X
- Guidelines).
-*/
-void QMessageBox::setWindowTitle(const QString &title)
-{
- // Message boxes on the mac do not have a title
-#ifndef Q_WS_MAC
- QDialog::setWindowTitle(title);
-#else
- Q_UNUSED(title);
-#endif
-}
-
-
-/*!
- \since 4.2
-
- This function shadows QWidget::setWindowModality().
-
- Sets the modality of the message box to \a windowModality.
-
- On Mac OS X, if the modality is set to Qt::WindowModal and the message box
- has a parent, then the message box will be a Qt::Sheet, otherwise the
- message box will be a standard dialog.
-*/
-void QMessageBox::setWindowModality(Qt::WindowModality windowModality)
-{
- QDialog::setWindowModality(windowModality);
-
- if (parentWidget() && windowModality == Qt::WindowModal)
- setParent(parentWidget(), Qt::Sheet);
- else
- setParent(parentWidget(), Qt::Dialog);
- setDefaultButton(d_func()->defaultButton);
-}
-
-#ifdef QT3_SUPPORT
-/*!
- \compat
-
- Constructs a message box with the given \a parent, \a name, and
- window flags, \a f.
- The window title is specified by \a title, and the message box
- displays message text and an icon specified by \a text and \a icon.
-
- The buttons that the user can access to respond to the message are
- defined by \a button0, \a button1, and \a button2.
-*/
-QMessageBox::QMessageBox(const QString& title,
- const QString &text, Icon icon,
- int button0, int button1, int button2,
- QWidget *parent, const char *name,
- bool modal, Qt::WindowFlags f)
- : QDialog(*new QMessageBoxPrivate, parent,
- f | Qt::WStyle_Customize | Qt::WStyle_DialogBorder | Qt::WStyle_Title | Qt::WStyle_SysMenu | Qt::WindowCloseButtonHint)
-{
- Q_D(QMessageBox);
- setObjectName(QString::fromAscii(name));
- d->init(title, text);
- d->addOldButtons(button0, button1, button2);
- setModal(modal);
- setIcon(icon);
-}
-
-/*!
- \compat
- Constructs a message box with the given \a parent and \a name.
-*/
-QMessageBox::QMessageBox(QWidget *parent, const char *name)
- : QDialog(*new QMessageBoxPrivate, parent,
- Qt::WStyle_Customize | Qt::WStyle_DialogBorder | Qt::WStyle_Title | Qt::WStyle_SysMenu | Qt::WindowCloseButtonHint)
-{
- Q_D(QMessageBox);
- setObjectName(QString::fromAscii(name));
- d->init();
-}
-
-/*!
- Returns the pixmap used for a standard icon. This
- allows the pixmaps to be used in more complex message boxes.
- \a icon specifies the required icon, e.g. QMessageBox::Information,
- QMessageBox::Warning or QMessageBox::Critical.
-
- \a style is unused.
-*/
-
-QPixmap QMessageBox::standardIcon(Icon icon, Qt::GUIStyle style)
-{
- Q_UNUSED(style);
- return QMessageBox::standardIcon(icon);
-}
-
-/*!
- \fn int QMessageBox::message(const QString &title, const QString &text,
- const QString &buttonText, QWidget *parent = 0,
- const char *name = 0)
-
- Opens a modal message box with the given \a title and showing the
- given \a text. The message box has a single button which has the
- given \a buttonText (or tr("OK")). The message box is centred over
- its \a parent and is called \a name.
-
- Use information(), warning(), question(), or critical() instead.
-
- \oldcode
- QMessageBox::message(tr("My App"), tr("All occurrences replaced."),
- tr("Close"), this);
- \newcode
- QMessageBox::information(this, tr("My App"),
- tr("All occurrences replaced."),
- QMessageBox::Close);
- \endcode
-*/
-
-/*!
- \fn bool QMessageBox::query(const QString &caption,
- const QString& text,
- const QString& yesButtonText,
- const QString& noButtonText,
- QWidget *parent, const char *name)
-
- \obsolete
-
- Queries the user using a modal message box with up to two buttons.
- The message box has the given \a caption (although some window
- managers don't show it), and shows the given \a text. The left
- button has the \a yesButtonText (or tr("OK")), and the right button
- has the \a noButtonText (or isn't shown). The message box is centred
- over its \a parent and is called \a name.
-
- Use information(), question(), warning(), or critical() instead.
-*/
-
-#endif
-
-QPixmap QMessageBoxPrivate::standardIcon(QMessageBox::Icon icon, QMessageBox *mb)
-{
- QStyle *style = mb ? mb->style() : QApplication::style();
- int iconSize = style->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, mb);
- QIcon tmpIcon;
- switch (icon) {
- case QMessageBox::Information:
- tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, mb);
- break;
- case QMessageBox::Warning:
- tmpIcon = style->standardIcon(QStyle::SP_MessageBoxWarning, 0, mb);
- break;
- case QMessageBox::Critical:
- tmpIcon = style->standardIcon(QStyle::SP_MessageBoxCritical, 0, mb);
- break;
- case QMessageBox::Question:
- tmpIcon = style->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mb);
- default:
- break;
- }
- if (!tmpIcon.isNull())
- return tmpIcon.pixmap(iconSize, iconSize);
- return QPixmap();
-}
-
-/*!
- \obsolete
-
- Returns the pixmap used for a standard icon. This allows the
- pixmaps to be used in more complex message boxes. \a icon
- specifies the required icon, e.g. QMessageBox::Question,
- QMessageBox::Information, QMessageBox::Warning or
- QMessageBox::Critical.
-
- Call QStyle::standardIcon() with QStyle::SP_MessageBoxInformation etc.
- instead.
-*/
-
-QPixmap QMessageBox::standardIcon(Icon icon)
-{
- return QMessageBoxPrivate::standardIcon(icon, 0);
-}
-
-/*!
- \typedef QMessageBox::Button
- \obsolete
-
- Use QMessageBox::StandardButton instead.
-*/
-
-/*!
- \fn int QMessageBox::information(QWidget *parent, const QString &title,
- const QString& text, StandardButton button0,
- StandardButton button1)
- \fn int QMessageBox::warning(QWidget *parent, const QString &title,
- const QString& text, StandardButton button0,
- StandardButton button1)
- \fn int QMessageBox::critical(QWidget *parent, const QString &title,
- const QString& text, StandardButton button0,
- StandardButton button1)
- \fn int QMessageBox::question(QWidget *parent, const QString &title,
- const QString& text, StandardButton button0,
- StandardButton button1)
- \internal
-
- ### Needed for Qt 4 source compatibility
-*/
-
-/*!
- \fn int QMessageBox::exec()
-
- Shows the message box as a \l{QDialog#Modal Dialogs}{modal dialog},
- blocking until the user closes it.
-
- When using a QMessageBox with standard buttons, this functions returns a
- \l StandardButton value indicating the standard button that was clicked.
- When using QMessageBox with custom buttons, this function returns an
- opaque value; use clickedButton() to determine which button was clicked.
-
- Users cannot interact with any other window in the same
- application until they close the dialog, either by clicking a
- button or by using a mechanism provided by the window system.
-
- \sa show(), result()
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmessagebox.cpp"
-
-#endif // QT_NO_MESSAGEBOX