diff options
-rw-r--r-- | src/imports/templates/qtquicktemplates2plugin.cpp | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickabstractbutton.cpp | 18 | ||||
-rw-r--r-- | src/quicktemplates2/qquickabstractbutton_p.h | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickabstractbutton_p_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickswitch.cpp | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickswitchdelegate.cpp | 2 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_button.qml | 4 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_checkbox.qml | 8 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_radiobutton.qml | 4 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_switch.qml | 11 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_switchdelegate.qml | 9 |
11 files changed, 53 insertions, 9 deletions
diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp index ef6787f4..203cba30 100644 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ b/src/imports/templates/qtquicktemplates2plugin.cpp @@ -223,6 +223,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) qmlRegisterType<QQuickTumbler, 1>(uri, 2, 1, "Tumbler"); // QtQuick.Templates 2.2 (new types and revisions in Qt 5.9) + qmlRegisterRevision<QQuickAbstractButton, 2>(uri, 2, 2); qmlRegisterType<QQuickComboBox, 2>(uri, 2, 2, "ComboBox"); qmlRegisterType<QQuickDial, 2>(uri, 2, 2, "Dial"); qmlRegisterType<QQuickDrawer, 2>(uri, 2, 2, "Drawer"); diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp index ffd8efa2..1724ead1 100644 --- a/src/quicktemplates2/qquickabstractbutton.cpp +++ b/src/quicktemplates2/qquickabstractbutton.cpp @@ -93,6 +93,13 @@ static const int AUTO_REPEAT_INTERVAL = 100; */ /*! + \since QtQuick.Controls 2.2 + \qmlsignal QtQuick.Controls::AbstractButton::toggled() + + This signal is emitted when a checkable button is interactively toggled by the user. +*/ + +/*! \qmlsignal QtQuick.Controls::AbstractButton::pressAndHold() This signal is emitted when the button is interactively pressed and held down by the user. @@ -162,6 +169,15 @@ void QQuickAbstractButtonPrivate::stopPressRepeat() } } +void QQuickAbstractButtonPrivate::toggle(bool value) +{ + Q_Q(QQuickAbstractButton); + const bool wasChecked = checked; + q->setChecked(value); + if (wasChecked != checked) + emit q->toggled(); +} + QQuickAbstractButton *QQuickAbstractButtonPrivate::findCheckedButton() const { Q_Q(const QQuickAbstractButton); @@ -621,7 +637,7 @@ void QQuickAbstractButton::nextCheckState() { Q_D(QQuickAbstractButton); if (d->checkable && (!d->checked || d->findCheckedButton() != this)) - setChecked(!d->checked); + d->toggle(!d->checked); } void QQuickAbstractButton::checkableChange() diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h index 524dd130..00378bce 100644 --- a/src/quicktemplates2/qquickabstractbutton_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p.h @@ -102,6 +102,7 @@ Q_SIGNALS: void released(); void canceled(); void clicked(); + Q_REVISION(2) void toggled(); void pressAndHold(); void doubleClicked(); void textChanged(); diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h index 688ad804..aa9d98d5 100644 --- a/src/quicktemplates2/qquickabstractbutton_p_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p_p.h @@ -78,6 +78,8 @@ public: QQuickAbstractButton *findCheckedButton() const; QList<QQuickAbstractButton *> findExclusiveButtons() const; + void toggle(bool value); + QString text; bool down; bool explicitDown; diff --git a/src/quicktemplates2/qquickswitch.cpp b/src/quicktemplates2/qquickswitch.cpp index fa08a1d8..b967fe56 100644 --- a/src/quicktemplates2/qquickswitch.cpp +++ b/src/quicktemplates2/qquickswitch.cpp @@ -187,7 +187,7 @@ void QQuickSwitch::nextCheckState() { Q_D(QQuickSwitch); if (keepMouseGrab()) - setChecked(d->position > 0.5); + d->toggle(d->position > 0.5); else QQuickAbstractButton::nextCheckState(); } diff --git a/src/quicktemplates2/qquickswitchdelegate.cpp b/src/quicktemplates2/qquickswitchdelegate.cpp index 81e282d9..4c0b430f 100644 --- a/src/quicktemplates2/qquickswitchdelegate.cpp +++ b/src/quicktemplates2/qquickswitchdelegate.cpp @@ -192,7 +192,7 @@ void QQuickSwitchDelegate::nextCheckState() { Q_D(QQuickSwitchDelegate); if (keepMouseGrab()) - setChecked(d->position > 0.5); + d->toggle(d->position > 0.5); else QQuickItemDelegate::nextCheckState(); } diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml index dcce20d7..ddfd72b7 100644 --- a/tests/auto/controls/data/tst_button.qml +++ b/tests/auto/controls/data/tst_button.qml @@ -58,7 +58,7 @@ TestCase { Component { id: signalSequenceSpy SignalSequenceSpy { - signals: ["pressed", "released", "canceled", "clicked", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"] + signals: ["pressed", "released", "canceled", "clicked", "toggled", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"] } } @@ -306,6 +306,7 @@ TestCase { ["pressedChanged", { "pressed": false }], ["downChanged", { "down": false }], ["checkedChanged", { "checked": true }], + "toggled", "released", "clicked"] control.checkable = true @@ -319,6 +320,7 @@ TestCase { ["pressedChanged", { "pressed": false }], ["downChanged", { "down": false }], ["checkedChanged", { "checked": false }], + "toggled", "released", "clicked"] mouseClick(control) diff --git a/tests/auto/controls/data/tst_checkbox.qml b/tests/auto/controls/data/tst_checkbox.qml index b88e6deb..41187aca 100644 --- a/tests/auto/controls/data/tst_checkbox.qml +++ b/tests/auto/controls/data/tst_checkbox.qml @@ -40,7 +40,7 @@ import QtQuick 2.2 import QtTest 1.0 -import QtQuick.Controls 2.1 +import QtQuick.Controls 2.2 TestCase { id: testCase @@ -58,7 +58,7 @@ TestCase { Component { id: signalSequenceSpy SignalSequenceSpy { - signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged", "checkStateChanged"] + signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged", "checkStateChanged"] } } @@ -147,6 +147,7 @@ TestCase { sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -164,6 +165,7 @@ TestCase { sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -219,6 +221,7 @@ TestCase { ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], + "toggled", "released", "clicked"] keyClick(Qt.Key_Space) @@ -232,6 +235,7 @@ TestCase { ["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }], ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }], + "toggled", "released", "clicked"] keyClick(Qt.Key_Space) diff --git a/tests/auto/controls/data/tst_radiobutton.qml b/tests/auto/controls/data/tst_radiobutton.qml index 9b6a2ae5..56d61b47 100644 --- a/tests/auto/controls/data/tst_radiobutton.qml +++ b/tests/auto/controls/data/tst_radiobutton.qml @@ -58,7 +58,7 @@ TestCase { Component { id: signalSequenceSpy SignalSequenceSpy { - signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"] + signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"] } } @@ -112,6 +112,7 @@ TestCase { verify(sequenceSpy.success) sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -177,6 +178,7 @@ TestCase { "pressed", ["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] keyClick(Qt.Key_Space) diff --git a/tests/auto/controls/data/tst_switch.qml b/tests/auto/controls/data/tst_switch.qml index f3843cf7..4c2147f8 100644 --- a/tests/auto/controls/data/tst_switch.qml +++ b/tests/auto/controls/data/tst_switch.qml @@ -58,7 +58,7 @@ TestCase { Component { id: signalSequenceSpy SignalSequenceSpy { - signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"] + signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"] } } @@ -131,6 +131,7 @@ TestCase { verify(spy.success) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -146,6 +147,7 @@ TestCase { verify(spy.success) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -163,6 +165,7 @@ TestCase { compare(control.pressed, true) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton) @@ -180,6 +183,7 @@ TestCase { compare(control.pressed, true) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton) @@ -225,6 +229,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control.indicator, control.indicator.width) @@ -259,6 +264,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, control.width) @@ -293,6 +299,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width) @@ -317,6 +324,7 @@ TestCase { "pressed", ["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] keyClick(Qt.Key_Space) @@ -328,6 +336,7 @@ TestCase { "pressed", ["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] keyClick(Qt.Key_Space) diff --git a/tests/auto/controls/data/tst_switchdelegate.qml b/tests/auto/controls/data/tst_switchdelegate.qml index 4a5d711f..b1c6c82d 100644 --- a/tests/auto/controls/data/tst_switchdelegate.qml +++ b/tests/auto/controls/data/tst_switchdelegate.qml @@ -58,7 +58,7 @@ TestCase { Component { id: signalSequenceSpy SignalSequenceSpy { - signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"] + signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"] } } @@ -127,6 +127,7 @@ TestCase { verify(spy.success) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -142,6 +143,7 @@ TestCase { verify(spy.success) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -159,6 +161,7 @@ TestCase { compare(control.pressed, true) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton) @@ -176,6 +179,7 @@ TestCase { compare(control.pressed, true) spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton) @@ -221,6 +225,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control.indicator, control.indicator.width) @@ -255,6 +260,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }], ["checkedChanged", { "pressed": false, "checked": false }], + "toggled", "released", "clicked"] mouseRelease(control, control.width) @@ -289,6 +295,7 @@ TestCase { spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }], ["checkedChanged", { "pressed": false, "checked": true }], + "toggled", "released", "clicked"] mouseRelease(control, control.width) |