diff options
author | BogDan Vatra <bogdan.vatra@kdab.com> | 2014-06-30 10:06:55 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kde.org> | 2014-06-30 13:28:34 +0200 |
commit | 28e51580269020b5f7bcd6aeee53d2488b6b5be3 (patch) | |
tree | 1a01f3a1ee05fbdda03195dbe2e55d7c687783cf /src/corelib/statemachine | |
parent | dd1598e1aaaf5630e688dc896d6f25c8a1e50ce2 (diff) |
Emit a notifications when targetState and targetStates are changed.
In order to properly use QAbstractTransition object in QML we need to
know when these properties are changed.
Change-Id: I5449ecf3fce33e164f645d7263f21b20abfcd026
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Diffstat (limited to 'src/corelib/statemachine')
-rw-r--r-- | src/corelib/statemachine/qabstracttransition.cpp | 33 | ||||
-rw-r--r-- | src/corelib/statemachine/qabstracttransition.h | 14 |
2 files changed, 44 insertions, 3 deletions
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index 49091de8a8..e446c69519 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -201,10 +201,15 @@ QAbstractState *QAbstractTransition::targetState() const void QAbstractTransition::setTargetState(QAbstractState* target) { Q_D(QAbstractTransition); + if ((d->targetStates.size() == 1 && target == d->targetStates.at(0).data()) || + (d->targetStates.isEmpty() && target == 0)) { + return; + } if (!target) d->targetStates.clear(); else setTargetStates(QList<QAbstractState*>() << target); + emit targetStateChanged(QPrivateSignal()); } /*! @@ -229,18 +234,26 @@ QList<QAbstractState*> QAbstractTransition::targetStates() const void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets) { Q_D(QAbstractTransition); - + QList<QPointer<QAbstractState> > copy(d->targetStates); + bool sameList = true; for (int i = 0; i < targets.size(); ++i) { QAbstractState *target = targets.at(i); if (!target) { qWarning("QAbstractTransition::setTargetStates: target state(s) cannot be null"); return; + } else { + sameList &= copy.removeOne(target); } } + sameList &= copy.isEmpty(); + d->targetStates.clear(); for (int i = 0; i < targets.size(); ++i) d->targetStates.append(targets.at(i)); + + if (!sameList) + emit targetStatesChanged(QPrivateSignal()); } /*! @@ -324,6 +337,24 @@ QList<QAbstractAnimation*> QAbstractTransition::animations() const */ /*! + \fn QAbstractTransition::targetStateChanged() + \since 5.4 + + This signal is emitted when the targetState property is changed. + + \sa QAbstractTransition::targetState +*/ + +/*! + \fn QAbstractTransition::targetStatesChanged() + \since 5.4 + + This signal is emitted when the targetStates property is changed. + + \sa QAbstractTransition::targetStates +*/ + +/*! \reimp */ bool QAbstractTransition::event(QEvent *e) diff --git a/src/corelib/statemachine/qabstracttransition.h b/src/corelib/statemachine/qabstracttransition.h index a35ad4ca96..ac3b40e55e 100644 --- a/src/corelib/statemachine/qabstracttransition.h +++ b/src/corelib/statemachine/qabstracttransition.h @@ -65,8 +65,8 @@ class Q_CORE_EXPORT QAbstractTransition : public QObject { Q_OBJECT Q_PROPERTY(QState* sourceState READ sourceState) - Q_PROPERTY(QAbstractState* targetState READ targetState WRITE setTargetState) - Q_PROPERTY(QList<QAbstractState*> targetStates READ targetStates WRITE setTargetStates) + Q_PROPERTY(QAbstractState* targetState READ targetState WRITE setTargetState NOTIFY targetStateChanged) + Q_PROPERTY(QList<QAbstractState*> targetStates READ targetStates WRITE setTargetStates NOTIFY targetStatesChanged) public: QAbstractTransition(QState *sourceState = 0); virtual ~QAbstractTransition(); @@ -91,6 +91,16 @@ Q_SIGNALS: QPrivateSignal #endif ); + void targetStateChanged( +#if !defined(Q_QDOC) + QPrivateSignal +#endif + ); + void targetStatesChanged( +#if !defined(Q_QDOC) + QPrivateSignal +#endif + ); protected: virtual bool eventTest(QEvent *event) = 0; |