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>
bb10
BogDan Vatra 2014-06-30 10:06:55 +03:00 committed by BogDan Vatra
parent dd1598e1aa
commit 28e5158026
2 changed files with 44 additions and 3 deletions

View File

@ -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());
}
/*!
@ -323,6 +336,24 @@ QList<QAbstractAnimation*> QAbstractTransition::animations() const
onTransition() has been called).
*/
/*!
\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
*/

View File

@ -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();
@ -89,6 +89,16 @@ Q_SIGNALS:
void triggered(
#if !defined(Q_QDOC)
QPrivateSignal
#endif
);
void targetStateChanged(
#if !defined(Q_QDOC)
QPrivateSignal
#endif
);
void targetStatesChanged(
#if !defined(Q_QDOC)
QPrivateSignal
#endif
);