summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-01-06 14:44:00 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-01-06 14:44:00 +0100
commit40736c5763bf61337c8c14e16d8587db021a87d4 (patch)
treeb17a9c00042ad89cb1308e2484491799aa14e9f8 /Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp
downloadqtwebkit-40736c5763bf61337c8c14e16d8587db021a87d4.tar.gz
Imported WebKit commit 2ea9d364d0f6efa8fa64acf19f451504c59be0e4 (http://svn.webkit.org/repository/webkit/trunk@104285)
Diffstat (limited to 'Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp')
-rw-r--r--Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp b/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp
new file mode 100644
index 000000000..32de21af7
--- /dev/null
+++ b/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this program; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "QtDialogRunner.h"
+
+#include <QtDeclarative/QDeclarativeComponent>
+#include <QtDeclarative/QDeclarativeContext>
+#include <QtDeclarative/QDeclarativeEngine>
+#include <QtQuick/QQuickItem>
+#include <wtf/PassOwnPtr.h>
+
+QtDialogRunner::QtDialogRunner()
+ : QEventLoop()
+ , m_wasAccepted(false)
+{
+}
+
+QtDialogRunner::~QtDialogRunner()
+{
+}
+
+class DialogContextObject : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString message READ message CONSTANT)
+ Q_PROPERTY(QString defaultValue READ defaultValue CONSTANT)
+
+public:
+ DialogContextObject(const QString& message, const QString& defaultValue = QString())
+ : QObject()
+ , m_message(message)
+ , m_defaultValue(defaultValue)
+ {
+ }
+ QString message() const { return m_message; }
+ QString defaultValue() const { return m_defaultValue; }
+
+public slots:
+ void dismiss() { emit dismissed(); }
+ void accept() { emit accepted(); }
+ void accept(const QString& result) { emit accepted(result); }
+ void reject() { emit rejected(); }
+
+signals:
+ void dismissed();
+ void accepted();
+ void accepted(const QString& result);
+ void rejected();
+
+private:
+ QString m_message;
+ QString m_defaultValue;
+};
+
+bool QtDialogRunner::initForAlert(QDeclarativeComponent* component, QQuickItem* dialogParent, const QString& message)
+{
+ DialogContextObject* contextObject = new DialogContextObject(message);
+ if (!createDialog(component, dialogParent, contextObject))
+ return false;
+
+ connect(contextObject, SIGNAL(dismissed()), SLOT(quit()));
+ return true;
+}
+
+bool QtDialogRunner::initForConfirm(QDeclarativeComponent* component, QQuickItem* dialogParent, const QString& message)
+{
+ DialogContextObject* contextObject = new DialogContextObject(message);
+ if (!createDialog(component, dialogParent, contextObject))
+ return false;
+
+ connect(contextObject, SIGNAL(accepted()), SLOT(onAccepted()));
+ connect(contextObject, SIGNAL(accepted()), SLOT(quit()));
+ connect(contextObject, SIGNAL(rejected()), SLOT(quit()));
+ return true;
+}
+
+bool QtDialogRunner::initForPrompt(QDeclarativeComponent* component, QQuickItem* dialogParent, const QString& message, const QString& defaultValue)
+{
+ DialogContextObject* contextObject = new DialogContextObject(message, defaultValue);
+ if (!createDialog(component, dialogParent, contextObject))
+ return false;
+
+ connect(contextObject, SIGNAL(accepted(QString)), SLOT(onAccepted(QString)));
+ connect(contextObject, SIGNAL(accepted(QString)), SLOT(quit()));
+ connect(contextObject, SIGNAL(rejected()), SLOT(quit()));
+ return true;
+}
+
+bool QtDialogRunner::createDialog(QDeclarativeComponent* component, QQuickItem* dialogParent, QObject* contextObject)
+{
+ QDeclarativeContext* baseContext = component->creationContext();
+ if (!baseContext)
+ baseContext = QDeclarativeEngine::contextForObject(dialogParent);
+ m_dialogContext = adoptPtr(new QDeclarativeContext(baseContext));
+
+ // This makes both "message" and "model.message" work for the dialog, just like QtQuick's ListView delegates.
+ contextObject->setParent(m_dialogContext.get());
+ m_dialogContext->setContextProperty(QLatin1String("model"), contextObject);
+ m_dialogContext->setContextObject(contextObject);
+
+ QObject* object = component->create(m_dialogContext.get());
+ if (!object) {
+ m_dialogContext.clear();
+ return false;
+ }
+
+ m_dialog = adoptPtr(qobject_cast<QQuickItem*>(object));
+ if (!m_dialog) {
+ m_dialogContext.clear();
+ m_dialog.clear();
+ return false;
+ }
+
+ m_dialog->setParentItem(dialogParent);
+ return true;
+}
+
+#include "QtDialogRunner.moc"
+#include "moc_QtDialogRunner.cpp"