summaryrefslogtreecommitdiff
path: root/src/dialogs
diff options
context:
space:
mode:
Diffstat (limited to 'src/dialogs')
-rw-r--r--src/dialogs/DefaultDialogWrapper.qml66
-rw-r--r--src/dialogs/Private/dialogsprivateplugin.cpp9
-rw-r--r--src/dialogs/plugin.cpp9
-rw-r--r--src/dialogs/qquickdialog.cpp25
4 files changed, 78 insertions, 31 deletions
diff --git a/src/dialogs/DefaultDialogWrapper.qml b/src/dialogs/DefaultDialogWrapper.qml
index b446c316..3ca030c4 100644
--- a/src/dialogs/DefaultDialogWrapper.qml
+++ b/src/dialogs/DefaultDialogWrapper.qml
@@ -47,6 +47,9 @@ import "qml"
AbstractDialog {
id: root
default property alias data: defaultContentItem.data
+
+ signal actionChosen(var action)
+
onVisibilityChanged: if (visible && contentItem) contentItem.forceActiveFocus()
Rectangle {
@@ -63,19 +66,7 @@ AbstractDialog {
defaultContentItem.implicitWidth, buttonsRowImplicitWidth, Screen.pixelDensity * 50) + outerSpacing * 2)
color: palette.window
Keys.onPressed: {
- event.accepted = true
- switch (event.key) {
- case Qt.Key_Escape:
- case Qt.Key_Back:
- reject()
- break
- case Qt.Key_Enter:
- case Qt.Key_Return:
- accept()
- break
- default:
- event.accepted = false
- }
+ event.accepted = handleKey(event.key)
}
SystemPalette { id: palette }
@@ -109,7 +100,7 @@ AbstractDialog {
id: buttonsLeftRepeater
Button {
text: (buttonsLeftRepeater.model && buttonsLeftRepeater.model[index] ? buttonsLeftRepeater.model[index].text : index)
- onClicked: root.click(buttonsLeftRepeater.model[index].standardButton)
+ onClicked: content.handleButton(buttonsLeftRepeater.model[index].standardButton)
}
}
@@ -136,9 +127,54 @@ AbstractDialog {
// TODO maybe: insert gaps if the button requires it (destructive buttons only)
Button {
text: (buttonsRightRepeater.model && buttonsRightRepeater.model[index] ? buttonsRightRepeater.model[index].text : index)
- onClicked: root.click(buttonsRightRepeater.model[index].standardButton)
+ onClicked: content.handleButton(buttonsRightRepeater.model[index].standardButton)
+ }
+ }
+ }
+
+ function handleButton(button) {
+ var action = {
+ "button": button,
+ "key": 0,
+ "accepted": true,
+ }
+ root.actionChosen(action)
+ if (action.accepted) {
+ click(button)
+ }
+ }
+
+ function handleKey(key) {
+ var button = 0
+ switch (key) {
+ case Qt.Key_Escape:
+ case Qt.Key_Back:
+ button = StandardButton.Cancel
+ break
+ case Qt.Key_Enter:
+ case Qt.Key_Return:
+ button = StandardButton.Ok
+ break
+ default:
+ return false
+ }
+ var action = {
+ "button": button,
+ "key": key,
+ "accepted": true,
+ }
+ root.actionChosen(action)
+ if (action.accepted) {
+ switch (button) {
+ case StandardButton.Cancel:
+ reject()
+ break
+ case StandardButton.Ok:
+ accept()
+ break
}
}
+ return true
}
}
function setupButtons() {
diff --git a/src/dialogs/Private/dialogsprivateplugin.cpp b/src/dialogs/Private/dialogsprivateplugin.cpp
index ba8aabe3..a785f388 100644
--- a/src/dialogs/Private/dialogsprivateplugin.cpp
+++ b/src/dialogs/Private/dialogsprivateplugin.cpp
@@ -42,13 +42,6 @@
#include "qquickwritingsystemlistmodel_p.h"
#include "qquickfontlistmodel_p.h"
-static void initResources()
-{
-#ifdef QT_STATIC
- Q_INIT_RESOURCE(qmake_QtQuick_Dialogs_Private);
-#endif
-}
-
QT_BEGIN_NAMESPACE
class QtQuick2DialogsPrivatePlugin : public QQmlExtensionPlugin
@@ -57,7 +50,7 @@ class QtQuick2DialogsPrivatePlugin : public QQmlExtensionPlugin
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
- QtQuick2DialogsPrivatePlugin(QObject *parent = 0) : QQmlExtensionPlugin(parent) { initResources(); }
+ QtQuick2DialogsPrivatePlugin(QObject *parent = 0) : QQmlExtensionPlugin(parent) { }
virtual void registerTypes(const char *uri)
{
Q_ASSERT(QLatin1String(uri) == QLatin1String("QtQuick.Dialogs.Private"));
diff --git a/src/dialogs/plugin.cpp b/src/dialogs/plugin.cpp
index 1e6740d5..8c10786f 100644
--- a/src/dialogs/plugin.cpp
+++ b/src/dialogs/plugin.cpp
@@ -62,13 +62,6 @@
Q_LOGGING_CATEGORY(lcRegistration, "qt.quick.dialogs.registration")
-static void initResources()
-{
-#ifdef QT_STATIC
- Q_INIT_RESOURCE(qmake_QtQuick_Dialogs);
-#endif
-}
-
QT_BEGIN_NAMESPACE
/*!
@@ -92,7 +85,7 @@ class QtQuick2DialogsPlugin : public QQmlExtensionPlugin
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
- QtQuick2DialogsPlugin() : QQmlExtensionPlugin(), m_useResources(true) { initResources(); }
+ QtQuick2DialogsPlugin() : QQmlExtensionPlugin(), m_useResources(true) { }
virtual void initializeEngine(QQmlEngine *engine, const char * uri) {
qCDebug(lcRegistration) << uri << m_decorationComponentUrl;
diff --git a/src/dialogs/qquickdialog.cpp b/src/dialogs/qquickdialog.cpp
index 485eeb43..ef6a9a1f 100644
--- a/src/dialogs/qquickdialog.cpp
+++ b/src/dialogs/qquickdialog.cpp
@@ -154,6 +154,31 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \qmlsignal Dialog::actionChosen(var action)
+
+ This signal is emitted when the user has pressed any button or a key
+ associated with some role (such as the Enter or Escape keys). The \a
+ action parameter carries information about the event:
+
+ \list
+ \li StandardButton button - The role of the button which was pressed. If a
+ key was pressed instead, this will be \c StandardButton.Ok if accepted
+ and \c StandardButton.Cancel if rejected.
+ \li Qt.Key key - The key which was pressed, or \c 0 if none
+ \li bool accepted - Set this to \c false to stop the event from triggering
+ its predefined action
+ \endlist
+
+ By handling this signal and setting the \c action.accepted field to \c
+ false, it's possible to implement some validation on the dialog contents
+ before accepting it, for example.
+
+ The corresponding handler is \c onActionChosen.
+
+ \since QtQuick.Controls 1.8
+*/
+
+/*!
\qmlproperty bool Dialog::visible
This property holds whether the dialog is visible. By default this is