aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-06-22 20:59:07 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-06-22 20:59:07 +0200
commita31a5ade38ad13b699039239343f154dc1504f50 (patch)
treeb36e6b8c6d79209ac0f165a4cb1e52edaf8ce7e1
parent6d9d5d41151e790f26ba59bd88d6515485326a57 (diff)
parentc11ef4ffa905ac9ba5e5af89ed03b1786b5187a8 (diff)
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/quicktemplates2/qquickspinbox.cpp tests/auto/controls/data/tst_scrollbar.qml Change-Id: Ief9481cb648076a951db0aeffaeb11aeaf392677
-rw-r--r--src/imports/controls/material/ScrollBar.qml1
-rw-r--r--src/imports/controls/universal/ScrollBar.qml1
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp7
-rw-r--r--src/quicktemplates2/qquickspinbox.cpp57
-rw-r--r--tests/auto/controls/data/tst_scrollbar.qml40
-rw-r--r--tests/auto/controls/data/tst_spinbox.qml103
6 files changed, 108 insertions, 101 deletions
diff --git a/src/imports/controls/material/ScrollBar.qml b/src/imports/controls/material/ScrollBar.qml
index 1b014b87..8743a16e 100644
--- a/src/imports/controls/material/ScrollBar.qml
+++ b/src/imports/controls/material/ScrollBar.qml
@@ -81,6 +81,7 @@ T.ScrollBar {
Transition {
from: "active"
SequentialAnimation {
+ PropertyAction{ targets: [contentItem, background]; property: "opacity"; value: 1.0 }
PauseAnimation { duration: 2450 }
NumberAnimation { targets: [contentItem, background]; property: "opacity"; to: 0.0 }
}
diff --git a/src/imports/controls/universal/ScrollBar.qml b/src/imports/controls/universal/ScrollBar.qml
index c6ca874e..894e09e7 100644
--- a/src/imports/controls/universal/ScrollBar.qml
+++ b/src/imports/controls/universal/ScrollBar.qml
@@ -83,6 +83,7 @@ T.ScrollBar {
Transition {
from: "active"
SequentialAnimation {
+ PropertyAction{ targets: [contentItem, background]; property: "opacity"; value: 1.0 }
PauseAnimation { duration: 3000 }
NumberAnimation { targets: [contentItem, background]; property: "opacity"; to: 0.0 }
}
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp
index c1cf13db..3c9065db 100644
--- a/src/quicktemplates2/qquickrangeslider.cpp
+++ b/src/quicktemplates2/qquickrangeslider.cpp
@@ -68,6 +68,13 @@ QT_BEGIN_NAMESPACE
}
\endcode
+ In order to perform an action when the value for a particular handle changes,
+ use the following syntax:
+
+ \code
+ first.onValueChanged: console.log("first.value changed to " + first.value)
+ \endcode
+
The \l {first.position} and \l {second.position} properties are expressed as
fractions of the control's size, in the range \c {0.0 - 1.0}.
The \l {first.visualPosition} and \l {second.visualPosition} properties are
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp
index f7458011..69b315b2 100644
--- a/src/quicktemplates2/qquickspinbox.cpp
+++ b/src/quicktemplates2/qquickspinbox.cpp
@@ -124,8 +124,10 @@ public:
int boundValue(int value, bool wrap) const;
void updateValue();
- bool setValue(int value, bool wrap);
- bool stepBy(int steps);
+ bool setValue(int value, bool wrap, bool modified);
+ bool stepBy(int steps, bool modified);
+ void increase(bool modified);
+ void decrease(bool modified);
int effectiveStepSize() const;
@@ -187,16 +189,13 @@ void QQuickSpinBoxPrivate::updateValue()
QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
QJSValue loc(v4, QQmlLocale::wrap(v4, locale));
QJSValue val = q->valueFromText().call(QJSValueList() << text.toString() << loc);
- const int oldValue = value;
- setValue(val.toInt(), /* allowWrap = */ false);
- if (oldValue != value)
- emit q->valueModified();
+ setValue(val.toInt(), /* modified = */ true, /* allowWrap = */ false);
}
}
}
}
-bool QQuickSpinBoxPrivate::setValue(int newValue, bool allowWrap)
+bool QQuickSpinBoxPrivate::setValue(int newValue, bool allowWrap, bool modified)
{
Q_Q(QQuickSpinBox);
if (q->isComponentComplete())
@@ -211,12 +210,24 @@ bool QQuickSpinBoxPrivate::setValue(int newValue, bool allowWrap)
updateDownEnabled();
emit q->valueChanged();
+ if (modified)
+ emit q->valueModified();
return true;
}
-bool QQuickSpinBoxPrivate::stepBy(int steps)
+bool QQuickSpinBoxPrivate::stepBy(int steps, bool modified)
+{
+ return setValue(value + steps, wrap, modified);
+}
+
+void QQuickSpinBoxPrivate::increase(bool modified)
+{
+ setValue(value + effectiveStepSize(), wrap, modified);
+}
+
+void QQuickSpinBoxPrivate::decrease(bool modified)
{
- return setValue(value + steps, wrap);
+ setValue(value - effectiveStepSize(), wrap, modified);
}
int QQuickSpinBoxPrivate::effectiveStepSize() const
@@ -392,7 +403,7 @@ void QQuickSpinBox::setFrom(int from)
d->from = from;
emit fromChanged();
if (isComponentComplete()) {
- if (!d->setValue(d->value, /* allowWrap = */ false)) {
+ if (!d->setValue(d->value, /* allowWrap = */ false, /* modified = */ false)) {
d->updateUpEnabled();
d->updateDownEnabled();
}
@@ -421,7 +432,7 @@ void QQuickSpinBox::setTo(int to)
d->to = to;
emit toChanged();
if (isComponentComplete()) {
- if (!d->setValue(d->value, /* allowWrap = */false)) {
+ if (!d->setValue(d->value, /* allowWrap = */false, /* modified = */ false)) {
d->updateUpEnabled();
d->updateDownEnabled();
}
@@ -442,7 +453,7 @@ int QQuickSpinBox::value() const
void QQuickSpinBox::setValue(int value)
{
Q_D(QQuickSpinBox);
- d->setValue(value, /* allowWrap = */ false);
+ d->setValue(value, /* allowWrap = */ false, /* modified = */ false);
}
/*!
@@ -751,7 +762,7 @@ void QQuickSpinBox::setWrap(bool wrap)
void QQuickSpinBox::increase()
{
Q_D(QQuickSpinBox);
- d->stepBy(d->effectiveStepSize());
+ d->increase(false);
}
/*!
@@ -764,7 +775,7 @@ void QQuickSpinBox::increase()
void QQuickSpinBox::decrease()
{
Q_D(QQuickSpinBox);
- d->stepBy(-d->effectiveStepSize());
+ d->decrease(false);
}
void QQuickSpinBox::focusInEvent(QFocusEvent *event)
@@ -804,11 +815,10 @@ void QQuickSpinBox::keyPressEvent(QKeyEvent *event)
Q_D(QQuickSpinBox);
QQuickControl::keyPressEvent(event);
- const int oldValue = d->value;
switch (event->key()) {
case Qt::Key_Up:
if (d->upEnabled()) {
- increase();
+ d->increase(true);
d->up->setPressed(true);
event->accept();
}
@@ -816,7 +826,7 @@ void QQuickSpinBox::keyPressEvent(QKeyEvent *event)
case Qt::Key_Down:
if (d->downEnabled()) {
- decrease();
+ d->decrease(true);
d->down->setPressed(true);
event->accept();
}
@@ -825,8 +835,6 @@ void QQuickSpinBox::keyPressEvent(QKeyEvent *event)
default:
break;
}
- if (d->value != oldValue)
- emit valueModified();
setAccessibleProperty("pressed", d->up->isPressed() || d->down->isPressed());
}
@@ -852,9 +860,9 @@ void QQuickSpinBox::timerEvent(QTimerEvent *event)
d->startPressRepeat();
} else if (event->timerId() == d->repeatTimer) {
if (d->up->isPressed())
- increase();
+ d->increase(true);
else if (d->down->isPressed())
- decrease();
+ d->decrease(true);
}
}
@@ -864,13 +872,10 @@ void QQuickSpinBox::wheelEvent(QWheelEvent *event)
Q_D(QQuickSpinBox);
QQuickControl::wheelEvent(event);
if (d->wheelEnabled) {
- const int oldValue = d->value;
const QPointF angle = event->angleDelta();
const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : angle.y()) / QWheelEvent::DefaultDeltasPerStep;
- d->stepBy(qRound(d->effectiveStepSize() * delta));
- if (d->value != oldValue)
- emit valueModified();
- event->setAccepted(d->value != oldValue);
+ if (!d->stepBy(qRound(d->effectiveStepSize() * delta), true))
+ event->ignore();
}
}
#endif
diff --git a/tests/auto/controls/data/tst_scrollbar.qml b/tests/auto/controls/data/tst_scrollbar.qml
index ec0be3f8..bc424a27 100644
--- a/tests/auto/controls/data/tst_scrollbar.qml
+++ b/tests/auto/controls/data/tst_scrollbar.qml
@@ -750,4 +750,44 @@ TestCase {
compare(control.horizontal, true)
compare(control.vertical, false)
}
+
+ function test_flashing() {
+ var control = createTemporaryObject(scrollBar, testCase, {size: 0.2})
+ verify(control)
+
+ var activeSpy = signalSpy.createObject(control, {target: control, signalName: "activeChanged"})
+ verify(activeSpy.valid)
+
+ compare(control.active, false)
+ if (control.contentItem)
+ compare(control.contentItem.opacity, 0)
+ if (control.background)
+ compare(control.background.opacity, 0)
+
+ control.increase()
+ compare(control.position, 0.1)
+ compare(control.active, false)
+ compare(activeSpy.count, 2)
+ if (control.contentItem)
+ verify(control.contentItem.opacity > 0)
+ if (control.background)
+ verify(control.background.opacity > 0)
+ if (control.contentItem)
+ tryCompare(control.contentItem, "opacity", 0)
+ if (control.background)
+ tryCompare(control.background, "opacity", 0)
+
+ control.decrease()
+ compare(control.position, 0.0)
+ compare(control.active, false)
+ compare(activeSpy.count, 4)
+ if (control.contentItem)
+ verify(control.contentItem.opacity > 0)
+ if (control.background)
+ verify(control.background.opacity > 0)
+ if (control.contentItem)
+ tryCompare(control.contentItem, "opacity", 0)
+ if (control.background)
+ tryCompare(control.background, "opacity", 0)
+ }
}
diff --git a/tests/auto/controls/data/tst_spinbox.qml b/tests/auto/controls/data/tst_spinbox.qml
index 17e4b592..54b81453 100644
--- a/tests/auto/controls/data/tst_spinbox.qml
+++ b/tests/auto/controls/data/tst_spinbox.qml
@@ -197,91 +197,44 @@ TestCase {
compare(control.down.indicator.enabled, true)
}
- function test_mouse() {
- var control = createTemporaryObject(spinBox, testCase, {stepSize: 50})
+ function test_mouse_data() {
+ return [
+ { tag: "up", button: "up", value: 50, enabled: true, hold: false, modified: 1, expected: 51 },
+ { tag: "down", button: "down", value: 50, enabled: true, hold: false, modified: 1, expected: 49 },
+ { tag: "up:disabled", button: "up", value: 99, enabled: false, hold: false, modified: 0, expected: 99 },
+ { tag: "down:disabled", button: "down", value: 0, enabled: false, hold: false, modified: 0, expected: 0 },
+ { tag: "up:hold", button: "up", value: 95, enabled: true, hold: true, modified: 4, expected: 99 },
+ { tag: "down:hold", button: "down", value: 5, enabled: true, hold: true, modified: 5, expected: 0 }
+ ]
+ }
+
+ function test_mouse(data) {
+ var control = createTemporaryObject(spinBox, testCase, {value: data.value})
verify(control)
- var upPressedSpy = signalSpy.createObject(control, {target: control.up, signalName: "pressedChanged"})
- verify(upPressedSpy.valid)
+ var button = control[data.button]
+ verify(button)
- var downPressedSpy = signalSpy.createObject(control, {target: control.down, signalName: "pressedChanged"})
- verify(downPressedSpy.valid)
+ var pressedSpy = signalSpy.createObject(control, {target: button, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
var valueModifiedSpy = signalSpy.createObject(control, {target: control, signalName: "valueModified"})
verify(valueModifiedSpy.valid)
- mousePress(control.up.indicator)
- compare(upPressedSpy.count, 1)
- compare(control.up.pressed, true)
- compare(downPressedSpy.count, 0)
- compare(control.down.pressed, false)
- compare(control.value, 0)
+ mousePress(button.indicator)
+ compare(pressedSpy.count, data.enabled ? 1 : 0)
+ compare(button.pressed, data.enabled)
+ compare(control.value, data.value)
compare(valueModifiedSpy.count, 0)
- mouseRelease(control.up.indicator)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(downPressedSpy.count, 0)
- compare(control.down.pressed, false)
- compare(control.value, 50)
- compare(valueModifiedSpy.count, 1)
-
- // Disable the up button and try again.
- control.value = control.to
- compare(control.up.indicator.enabled, false)
-
- mousePress(control.up.indicator)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(downPressedSpy.count, 0)
- compare(control.down.pressed, false)
- compare(control.value, control.to)
- compare(valueModifiedSpy.count, 1)
-
- mouseRelease(control.up.indicator)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(downPressedSpy.count, 0)
- compare(control.down.pressed, false)
- compare(control.value, control.to)
- compare(valueModifiedSpy.count, 1)
-
- control.value = 50;
- mousePress(control.down.indicator)
- compare(downPressedSpy.count, 1)
- compare(control.down.pressed, true)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(control.value, 50)
- compare(valueModifiedSpy.count, 1)
-
- mouseRelease(control.down.indicator)
- compare(downPressedSpy.count, 2)
- compare(control.down.pressed, false)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(control.value, 0)
- compare(valueModifiedSpy.count, 2)
-
- // Disable the down button and try again.
- control.value = control.from
- compare(control.down.indicator.enabled, false)
+ if (data.hold)
+ tryCompare(control, "value", data.expected)
- mousePress(control.down.indicator)
- compare(downPressedSpy.count, 2)
- compare(control.down.pressed, false)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(control.value, control.from)
- compare(valueModifiedSpy.count, 2)
-
- mouseRelease(control.down.indicator)
- compare(downPressedSpy.count, 2)
- compare(control.down.pressed, false)
- compare(upPressedSpy.count, 2)
- compare(control.up.pressed, false)
- compare(control.value, control.from)
- compare(valueModifiedSpy.count, 2)
+ mouseRelease(button.indicator)
+ compare(pressedSpy.count, data.enabled ? 2 : 0)
+ compare(button.pressed, false)
+ compare(control.value, data.expected)
+ compare(valueModifiedSpy.count, data.modified)
}
function test_keys_data() {