diff options
Diffstat (limited to 'src/dialogs')
-rw-r--r-- | src/dialogs/DefaultDialogWrapper.qml | 66 | ||||
-rw-r--r-- | src/dialogs/Private/dialogsprivateplugin.cpp | 9 | ||||
-rw-r--r-- | src/dialogs/plugin.cpp | 9 | ||||
-rw-r--r-- | src/dialogs/qquickdialog.cpp | 25 |
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 |