summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2020-12-14 11:12:30 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2021-01-26 21:47:47 +0100
commit519420641fabeeb7a372ed6157a7bc01f43b1b3b (patch)
treefa8e95f080040de2ef4e95d3d130de1e42c6f011
parentfeb20459bd795338d2247f2f97681c8bbc97b159 (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.cpp12
-rw-r--r--src/corelib/animation/qpauseanimation.h3
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp41
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"