diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2020-12-14 11:12:30 +0100 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-01-26 21:47:47 +0100 |
commit | 519420641fabeeb7a372ed6157a7bc01f43b1b3b (patch) | |
tree | fa8e95f080040de2ef4e95d3d130de1e42c6f011 | |
parent | feb20459bd795338d2247f2f97681c8bbc97b159 (diff) |
Port QPauseAnimation to the new property system
Task-number: QTBUG-85520
Change-Id: I8c0ee86598f4c0f093f64b2891ee835a43964b84
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
-rw-r--r-- | src/corelib/animation/qpauseanimation.cpp | 12 | ||||
-rw-r--r-- | src/corelib/animation/qpauseanimation.h | 3 | ||||
-rw-r--r-- | tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp | 41 |
3 files changed, 54 insertions, 2 deletions
diff --git a/src/corelib/animation/qpauseanimation.cpp b/src/corelib/animation/qpauseanimation.cpp index 5f8a8b3590..d6fa0eb210 100644 --- a/src/corelib/animation/qpauseanimation.cpp +++ b/src/corelib/animation/qpauseanimation.cpp @@ -63,18 +63,22 @@ #include "qpauseanimation.h" #include "qabstractanimation_p.h" +#include "private/qproperty_p.h" QT_BEGIN_NAMESPACE class QPauseAnimationPrivate : public QAbstractAnimationPrivate { + Q_DECLARE_PUBLIC(QPauseAnimation) public: QPauseAnimationPrivate() : QAbstractAnimationPrivate(), duration(250) { isPause = true; } - int duration; + void setDuration(int msecs) { q_func()->setDuration(msecs); } + Q_OBJECT_COMPAT_PROPERTY(QPauseAnimationPrivate, int, duration, + &QPauseAnimationPrivate::setDuration) }; /*! @@ -128,6 +132,12 @@ void QPauseAnimation::setDuration(int msecs) d->duration = msecs; } +QBindable<int> QPauseAnimation::bindableDuration() +{ + Q_D(QPauseAnimation); + return &d->duration; +} + /*! \reimp */ diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h index 6bdbeefdbd..1bbc52132d 100644 --- a/src/corelib/animation/qpauseanimation.h +++ b/src/corelib/animation/qpauseanimation.h @@ -51,7 +51,7 @@ class QPauseAnimationPrivate; class Q_CORE_EXPORT QPauseAnimation : public QAbstractAnimation { Q_OBJECT - Q_PROPERTY(int duration READ duration WRITE setDuration) + Q_PROPERTY(int duration READ duration WRITE setDuration BINDABLE bindableDuration) public: QPauseAnimation(QObject *parent = nullptr); QPauseAnimation(int msecs, QObject *parent = nullptr); @@ -59,6 +59,7 @@ public: int duration() const override; void setDuration(int msecs); + QBindable<int> bindableDuration(); protected: bool event(QEvent *e) override; diff --git a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp index a10930b517..0688eafda8 100644 --- a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp +++ b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp @@ -105,6 +105,7 @@ private slots: void sequentialGroupWithPause(); void multipleSequentialGroups(); void zeroDuration(); + void bindings(); }; void tst_QPauseAnimation::initTestCase() @@ -442,5 +443,45 @@ void tst_QPauseAnimation::zeroDuration() QCOMPARE(animation.m_updateCurrentTimeCount, 1); } +void tst_QPauseAnimation::bindings() +{ + TestablePauseAnimation animation; + + QProperty<int> duration; + animation.bindableDuration().setBinding(Qt::makePropertyBinding(duration)); + + duration = 42; + QCOMPARE(animation.duration(), 42); + + // negative values must be ignored + QTest::ignoreMessage(QtWarningMsg, + "QPauseAnimation::setDuration: cannot set a negative duration"); + duration = -1; + QCOMPARE(animation.duration(), 42); + QCOMPARE(duration, -1); + + // Setting an invalid value shouldn't clear the binding + QTest::ignoreMessage(QtWarningMsg, + "QPauseAnimation::setDuration: cannot set a negative duration"); + animation.setDuration(-1); + QVERIFY(animation.bindableDuration().hasBinding()); + QCOMPARE(animation.duration(), 42); + + QProperty<int> durationObserver; + durationObserver.setBinding(animation.bindableDuration().makeBinding()); + + animation.setDuration(46); + QCOMPARE(durationObserver, 46); + + // Setting a valid value should clear the binding + QVERIFY(!animation.bindableDuration().hasBinding()); + + // Setting an invalid value also doesn't affect the observer + QTest::ignoreMessage(QtWarningMsg, + "QPauseAnimation::setDuration: cannot set a negative duration"); + animation.setDuration(-1); + QCOMPARE(durationObserver, 46); +} + QTEST_MAIN(tst_QPauseAnimation) #include "tst_qpauseanimation.moc" |