aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2011-06-08 11:24:02 +1000
committerMichael Brasser <michael.brasser@nokia.com>2011-06-10 11:19:40 +1000
commit19d2d4b4aaef02e777ae7aaea78056fdf5b6dbb4 (patch)
treefb11f7b76d28f6c58605308525f5121585a9e31c
parent17bd3e24a18797e6b565235d2d922a807137041a (diff)
Emit useful information about state change progress.
-rw-r--r--src/declarative/util/qdeclarativestate.cpp14
-rw-r--r--src/declarative/util/qdeclarativestate_p.h6
-rw-r--r--src/declarative/util/qdeclarativestate_p_p.h3
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();