diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2011-06-08 11:24:02 +1000 |
---|---|---|
committer | Michael Brasser <michael.brasser@nokia.com> | 2011-06-10 11:19:40 +1000 |
commit | 19d2d4b4aaef02e777ae7aaea78056fdf5b6dbb4 (patch) | |
tree | fb11f7b76d28f6c58605308525f5121585a9e31c | |
parent | 17bd3e24a18797e6b565235d2d922a807137041a (diff) |
Emit useful information about state change progress.
-rw-r--r-- | src/declarative/util/qdeclarativestate.cpp | 14 | ||||
-rw-r--r-- | src/declarative/util/qdeclarativestate_p.h | 6 | ||||
-rw-r--r-- | src/declarative/util/qdeclarativestate_p_p.h | 3 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index 054d92ce7f..8d7a3c2784 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -323,10 +323,15 @@ void QDeclarativeStatePrivate::complete() } reverting.clear(); + if (prevState) { + prevState->exited(); + prevState = 0; + } + emit q->completed(); + emit q->entered(); + for (int i = 0; i < stateChanges.count(); ++i) stateChanges.at(i)->setActive(true); - - emit q->completed(); } // Generate a list of actions for this state. This includes coelescing state @@ -378,6 +383,8 @@ void QDeclarativeState::cancel() void QDeclarativeState::prepareForExit() { Q_D(QDeclarativeState); + emit aboutToExit(); + cancel(); for (int i = 0; i < d->stateChanges.count(); ++i) @@ -591,6 +598,9 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit d->revertList.clear(); d->reverting.clear(); + emit aboutToEnter(); + + d->prevState = revert; if (revert) { QDeclarativeStatePrivate *revertPrivate = static_cast<QDeclarativeStatePrivate*>(revert->d_func()); diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h index a875621600..0ed11e7f6d 100644 --- a/src/declarative/util/qdeclarativestate_p.h +++ b/src/declarative/util/qdeclarativestate_p.h @@ -198,7 +198,11 @@ public: bool isStateActive() const; Q_SIGNALS: - void completed(); + void completed(); //for compatibility (same as entered) + void aboutToEnter(); + void entered(); + void aboutToExit(); + void exited(); private: Q_DECLARE_PRIVATE(QDeclarativeState) diff --git a/src/declarative/util/qdeclarativestate_p_p.h b/src/declarative/util/qdeclarativestate_p_p.h index 011498048f..af8e3a5eb7 100644 --- a/src/declarative/util/qdeclarativestate_p_p.h +++ b/src/declarative/util/qdeclarativestate_p_p.h @@ -196,7 +196,7 @@ class QDeclarativeStatePrivate : public QObjectPrivate public: QDeclarativeStatePrivate() - : when(0), named(false), inState(false), group(0) {} + : when(0), named(false), inState(false), group(0), prevState(0) {} typedef QList<QDeclarativeSimpleAction> SimpleActionList; @@ -266,6 +266,7 @@ public: QString extends; mutable bool inState; QDeclarativeStateGroup *group; + QDeclarativeGuard<QDeclarativeState> prevState; QDeclarativeStateOperation::ActionList generateActionList(QDeclarativeStateGroup *) const; void complete(); |