diff options
Diffstat (limited to 'src/libs/installer/messageboxhandler.cpp')
-rw-r--r-- | src/libs/installer/messageboxhandler.cpp | 167 |
1 files changed, 95 insertions, 72 deletions
diff --git a/src/libs/installer/messageboxhandler.cpp b/src/libs/installer/messageboxhandler.cpp index cb9a845ff..69fc62570 100644 --- a/src/libs/installer/messageboxhandler.cpp +++ b/src/libs/installer/messageboxhandler.cpp @@ -47,76 +47,90 @@ #include <QDialogButtonBox> #include <QPushButton> -#include <QtScript/QScriptEngine> -#include <QtScript/QScriptValue> +/*! + \qmltype QMessageBox + \inqmlmodule scripting -QScriptValue QInstaller::registerMessageBox(QScriptEngine *scriptEngine) -{ - // register QMessageBox::StandardButton enum in the script connection - QScriptValue messageBox = scriptEngine->newQObject(MessageBoxHandler::instance()); - messageBox.setProperty(QLatin1String("Ok"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Yes))); - messageBox.setProperty(QLatin1String("Open"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Open))); - messageBox.setProperty(QLatin1String("Save"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Save))); - messageBox.setProperty(QLatin1String("Cancel"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Cancel))); - messageBox.setProperty(QLatin1String("Close"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Close))); - messageBox.setProperty(QLatin1String("Discard"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Discard))); - messageBox.setProperty(QLatin1String("Apply"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Apply))); - messageBox.setProperty(QLatin1String("Reset"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Reset))); - messageBox.setProperty(QLatin1String("RestoreDefaults"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::RestoreDefaults))); - messageBox.setProperty(QLatin1String("Help"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Help))); - messageBox.setProperty(QLatin1String("SaveAll"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::SaveAll))); - messageBox.setProperty(QLatin1String("Yes"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Yes))); - messageBox.setProperty(QLatin1String("YesToAll"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::YesToAll))); - messageBox.setProperty(QLatin1String("No"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::No))); - messageBox.setProperty(QLatin1String("NoToAll"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::NoToAll))); - messageBox.setProperty(QLatin1String("Abort"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Abort))); - messageBox.setProperty(QLatin1String("Retry"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Retry))); - messageBox.setProperty(QLatin1String("Ignore"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::Ignore))); - messageBox.setProperty(QLatin1String("NoButton"), - scriptEngine->newVariant(static_cast<int>(QMessageBox::NoButton))); - scriptEngine->globalObject().setProperty(QLatin1String("QMessageBox"), messageBox); - - return messageBox; -} + \brief The QMessageBox type provides a modal dialog for informing the + user or asking the user a question and receiving an answer. -using namespace QInstaller; -template <typename T> -static QList<T> reversed(const QList<T> &list) -{ - qFatal("This seems to be broken, check this!!!!"); - // TODO: Figure out what should happen here. See setDefaultAction(...). -#if 1 - // Note: This does not what the function name implies??? - QList<T> res = list; - qCopyBackward(list.begin(), list.end(), res.end()); - return res; -#else - // Note: This does what the function name implies, but we need to check if this is what we want. - QList<T> res = list; - std::reverse(res.begin(), res.end()); - return res; -#endif -} + \code + var result = QMessageBox.question("quit.question", "Installer", "Do you want to quit the installer?", + QMessageBox.Yes | QMessageBox.No); + if (result == QMessageBox.Yes) { + // ... + } + \endcode + + \section2 Buttons + + QMessageBox defines a list of common buttons: + \list + \li QMessageBox.Ok + \li QMessageBox.Open + \li QMessageBox.Save + \li QMessageBox.Cancel + \li QMessageBox.Close + \li QMessageBox.Discard + \li QMessageBox.Apply + \li QMessageBox.Reset + \li QMessageBox.RestoreDefaults + \li QMessageBox.Help + \li QMessageBox.SaveAll + \li QMessageBox.Yes + \li QMessageBox.YesToAll + \li QMessageBox.No + \li QMessageBox.NoToAll + \li QMessageBox.Abort + \li QMessageBox.Retry + \li QMessageBox.Ignore + \li QMessageBox.NoButton + \endlist + + \section2 Scripted Installations + + Sometimes it is useful to automatically close message boxes, for example during a scripted + installation. This can be achieved by calling + Installer::setMessageBoxAutomaticAnswer, Installer::autoAcceptMessageBoxes, + Installer::autoRejectMessageBoxes. The \c identifier argument in the method calls + allows to identify specific message boxes for this purpose. + */ + + +/*! + \qmlmethod Button QMessageBox::critical(string identifier, string title, string text, + Buttons buttons = QMessageBox.Ok, Button button + = QMessageBox.NoButton) + + Opens a critical message box with the given \a title and \a text. +*/ + +/*! + \qmlmethod Button QMessageBox::information(string identifier, string title, string text, + Buttons buttons = QMessageBox.Ok, Button button + = QMessageBox.NoButton) + + Opens an information message box with the given \a title and \a text. +*/ + +/*! + \qmlmethod Button QMessageBox::question(string identifier, string title, string text, + Buttons buttons = QMessageBox.Yes | QMessageBox.No, Button button + = QMessageBox.NoButton) + + Opens a question message box with the given \a title and \a text. +*/ + +/*! + \qmlmethod Button QMessageBox::warning(string identifier, string title, string text, + Buttons buttons = QMessageBox.Ok, Button button + = QMessageBox.NoButton) + + Opens a warning message box with the given \a title and \a text. +*/ +using namespace QInstaller; // -- MessageBoxHandler @@ -151,6 +165,19 @@ QWidget *MessageBoxHandler::currentBestSuitParent() return qApp->activeWindow(); } +QList<QMessageBox::Button> MessageBoxHandler::orderedButtons() +{ + static QList<QMessageBox::Button> buttons; + if (!buttons.isEmpty()) + return buttons; + buttons << QMessageBox::YesToAll << QMessageBox::Yes << QMessageBox::Ok << QMessageBox::Apply + << QMessageBox::SaveAll << QMessageBox::Save <<QMessageBox::Retry << QMessageBox::Ignore + << QMessageBox::Help << QMessageBox::RestoreDefaults << QMessageBox::Reset << QMessageBox::Open + << QMessageBox::Cancel << QMessageBox::Close << QMessageBox::Abort << QMessageBox::Discard + << QMessageBox::No << QMessageBox::NoToAll; + return buttons; +} + void MessageBoxHandler::setDefaultAction(DefaultAction defaultAction) { if (m_defaultAction == defaultAction) @@ -159,17 +186,13 @@ void MessageBoxHandler::setDefaultAction(DefaultAction defaultAction) m_buttonOrder.clear(); if (m_defaultAction != AskUser) { - m_buttonOrder << QMessageBox::YesToAll << QMessageBox::Yes << QMessageBox::Ok << QMessageBox::Apply - << QMessageBox::SaveAll << QMessageBox::Save <<QMessageBox::Retry << QMessageBox::Ignore - << QMessageBox::Help << QMessageBox::RestoreDefaults << QMessageBox::Reset << QMessageBox::Open - << QMessageBox::Cancel << QMessageBox::Close << QMessageBox::Abort << QMessageBox::Discard - << QMessageBox::No << QMessageBox::NoToAll; + m_buttonOrder = orderedButtons(); } if (m_defaultAction == Reject) { // If we want to reject everything, we need the lowest button. For example, if Cancel is existing it // could use Cancel, but if Close is existing it will use Close. - m_buttonOrder = reversed(m_buttonOrder); + std::reverse(m_buttonOrder.begin(), m_buttonOrder.end()); } } |