From 8457830abdca9d5769e2ec1bdbfb793a05e6c5dd Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Mon, 21 Feb 2011 16:30:31 +0100 Subject: init commit --- .../libinstaller/messageboxhandler.cpp | 216 +++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 installerbuilder/libinstaller/messageboxhandler.cpp (limited to 'installerbuilder/libinstaller/messageboxhandler.cpp') diff --git a/installerbuilder/libinstaller/messageboxhandler.cpp b/installerbuilder/libinstaller/messageboxhandler.cpp new file mode 100644 index 000000000..2428843cd --- /dev/null +++ b/installerbuilder/libinstaller/messageboxhandler.cpp @@ -0,0 +1,216 @@ +/************************************************************************** +** +** This file is part of Qt SDK** +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).* +** +** Contact: Nokia Corporation qt-info@nokia.com** +** +** 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 +** +** 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 are unsure which license is appropriate for your use, please contact +** (qt-info@nokia.com). +** +**************************************************************************/ +#include "messageboxhandler.h" + +#include +#include +#include +#include + +QScriptValue QInstaller::registerMessageBox( QScriptEngine* scriptEngine ) { + QScriptValue messageBox = scriptEngine->newQObject(MessageBoxHandler::instance()); + // register QMessageBox::StandardButton enum in the script connection + 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; +} + +using namespace QInstaller; + +MessageBoxHandler *MessageBoxHandler::m_instance = 0; + +MessageBoxHandler::MessageBoxHandler(QObject *parent) + : QObject(parent), m_defaultAction( MessageBoxHandler::AskUser ) +{ + +} + + +MessageBoxHandler::~MessageBoxHandler() +{ + +} + +MessageBoxHandler* MessageBoxHandler::instance() +{ + if (m_instance == 0) + m_instance = new MessageBoxHandler(qApp); + return m_instance; +} + +void MessageBoxHandler::setAutomaticAnswer(const QString& identifier, QMessageBox::StandardButton answer) +{ + m_automaticAnswers.insert( identifier, answer ); +} + +template +static QList reversed( const QList& list ) { + QList res = list; + qCopyBackward( list.begin(), list.end(), res.end() ); + return res; +} + +void MessageBoxHandler::setDefaultAction(DefaultAction defaultAction) +{ + if ( m_defaultAction == defaultAction ) + return; + m_defaultAction = defaultAction; + m_buttonOrder.clear(); + if ( m_defaultAction != AskUser ) + m_buttonOrder << QMessageBox::YesToAll << QMessageBox::Yes << QMessageBox::Ok << QMessageBox::Apply + << QMessageBox::SaveAll << QMessageBox::Save <activeModalWidget()) + return qApp->activeModalWidget(); + + return qApp->activeWindow(); +} + +QMessageBox::StandardButton MessageBoxHandler::showMessageBox(MessageType messageType, QWidget* parent, const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) const +{ + if (QApplication::type() == QApplication::Tty) + return button; + if ( m_automaticAnswers.contains( identifier ) ) + return m_automaticAnswers.value( identifier ); + if ( m_defaultAction == AskUser ) { + if (!identifier.isEmpty()) + qDebug() << QString(QLatin1String("create message box with identifier: '%1'")).arg(identifier); + switch( messageType ) { + case criticalType: + return QMessageBox::critical( parent, title, text, buttons, button ); + case informationType: + return QMessageBox::information( parent, title, text, buttons, button ); + case questionType: + return QMessageBox::question( parent, title, text, buttons, button ); + case warningType: + return QMessageBox::warning( parent, title, text, buttons, button ); + } + } + else + return autoReply( buttons ); + Q_ASSERT_X(false, Q_FUNC_INFO, "Something went realy wrong."); + return button; +} + +QMessageBox::StandardButton MessageBoxHandler::critical(QWidget* parent, const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) +{ + return instance()->showMessageBox(criticalType, parent, identifier, title, text, buttons, button); +} + +QMessageBox::StandardButton MessageBoxHandler::information(QWidget* parent, const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) +{ + return instance()->showMessageBox(informationType, parent, identifier, title, text, buttons, button); +} + +QMessageBox::StandardButton MessageBoxHandler::question(QWidget* parent, const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) +{ + return instance()->showMessageBox(questionType, parent, identifier, title, text, buttons, button); +} + +QMessageBox::StandardButton MessageBoxHandler::warning(QWidget* parent, const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) +{ + return instance()->showMessageBox(warningType, parent, identifier, title, text, buttons, button); +} + +int MessageBoxHandler::critical(const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) const +{ + return showMessageBox(criticalType, currentBestSuitParent(), identifier, title, text, buttons, button); +} + +int MessageBoxHandler::information(const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) const +{ + return showMessageBox(informationType, currentBestSuitParent(), identifier, title, text, buttons, button); +} + +int MessageBoxHandler::question(const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) const +{ + return showMessageBox(questionType, currentBestSuitParent(), identifier, title, text, buttons, button); +} + +int MessageBoxHandler::warning(const QString& identifier, const QString& title, const QString& text, + QMessageBox::StandardButtons buttons, QMessageBox::StandardButton button) const +{ + return showMessageBox(warningType, currentBestSuitParent(), identifier, title, text, buttons, button); +} -- cgit v1.2.3