From 709a0942aa5adeea8057a92a301dee85fc575528 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Thu, 10 Dec 2020 18:46:31 +0100 Subject: QTimer: port to new property system Task-number: QTBUG-85520 Change-Id: I1f92b86619f2ca186c505251b21463f396af0ac6 Reviewed-by: Qt CI Bot Reviewed-by: Edward Welbourne Reviewed-by: Andreas Buhr --- src/corelib/kernel/qtimer.cpp | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) (limited to 'src/corelib/kernel/qtimer.cpp') diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 6e3d34214f..b553bbd5d3 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -44,6 +44,7 @@ #include "qobject_p.h" #include "qthread.h" #include "qcoreapplication_p.h" +#include "qproperty_p.h" QT_BEGIN_NAMESPACE @@ -51,12 +52,18 @@ static constexpr int INV_TIMER = -1; // invalid timer id class QTimerPrivate : public QObjectPrivate { + Q_DECLARE_PUBLIC(QTimer) public: + void setInterval(int msec) { q_func()->setInterval(msec); } + bool isActiveActualCalculation() const { return id >= 0; } + int id = INV_TIMER; - int inter = 0; - bool single = false; + Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QTimerPrivate, int, inter, &QTimerPrivate::setInterval, 0) + Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QTimerPrivate, bool, single, false) bool nulltimer = false; - Qt::TimerType type = Qt::CoarseTimer; + Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QTimerPrivate, Qt::TimerType, type, Qt::CoarseTimer) + Q_OBJECT_COMPUTED_PROPERTY(QTimerPrivate, bool, isActiveData, + &QTimerPrivate::isActiveActualCalculation) }; /*! @@ -198,7 +205,12 @@ QTimer::~QTimer() */ bool QTimer::isActive() const { - return d_func()->id >= 0; + return d_func()->isActiveData.value(); +} + +QBindable QTimer::bindableActive() +{ + return QBindable(&d_func()->isActiveData); } /*! @@ -229,6 +241,7 @@ void QTimer::start() stop(); d->nulltimer = (!d->inter && d->single); d->id = QObject::startTimer(d->inter, d->type); + d->isActiveData.markDirty(); } /*! @@ -262,6 +275,7 @@ void QTimer::stop() if (d->id != INV_TIMER) { QObject::killTimer(d->id); d->id = INV_TIMER; + d->isActiveData.markDirty(); } } @@ -718,6 +732,11 @@ bool QTimer::isSingleShot() const return d_func()->single; } +QBindable QTimer::bindableSingleShot() +{ + return QBindable(&d_func()->single); +} + /*! \property QTimer::interval \brief the timeout interval in milliseconds @@ -737,6 +756,8 @@ void QTimer::setInterval(int msec) if (d->id != INV_TIMER) { // create new timer QObject::killTimer(d->id); // restart timer d->id = QObject::startTimer(msec, d->type); + // No need to call markDirty() for d->isActiveData here, + // as timer state actually does not change } } @@ -745,6 +766,11 @@ int QTimer::interval() const return d_func()->inter; } +QBindable QTimer::bindableInterval() +{ + return QBindable(&d_func()->inter); +} + /*! \property QTimer::remainingTime \since 5.0 @@ -784,6 +810,11 @@ Qt::TimerType QTimer::timerType() const return d_func()->type; } +QBindable QTimer::bindableTimerType() +{ + return QBindable(&d_func()->type); +} + QT_END_NAMESPACE #include "qtimer.moc" -- cgit v1.2.3