statemachine: Small refactoring of initial transition code
authorKent Hansen <kent.hansen@nokia.com>
Sat, 7 Jul 2012 02:51:24 +0000 (04:51 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 11 Jul 2012 06:42:36 +0000 (08:42 +0200)
In preparation of supporting parallel root states, which will make
the initial transition creation slightly more involved.

Change-Id: Iad996eb4db248842c1a2088430c13bd5c953c374
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
src/corelib/statemachine/qstatemachine.cpp
src/corelib/statemachine/qstatemachine_p.h

index 2e37af3..f1ca421 100644 (file)
@@ -1281,20 +1281,22 @@ void QStateMachinePrivate::initializeAnimations(QAbstractState *state, const QLi
 
 #endif // !QT_NO_ANIMATION
 
-namespace {
-
-class InitialTransition : public QAbstractTransition
+QAbstractTransition *QStateMachinePrivate::createInitialTransition() const
 {
-public:
-    InitialTransition(QAbstractState *target)
-        : QAbstractTransition()
-    { setTargetState(target); }
-protected:
-    virtual bool eventTest(QEvent *) { return true; }
-    virtual void onTransition(QEvent *) {}
-};
+    class InitialTransition : public QAbstractTransition
+    {
+    public:
+        InitialTransition(QAbstractState *target)
+            : QAbstractTransition()
+        { setTargetState(target); }
+    protected:
+        virtual bool eventTest(QEvent *) { return true; }
+        virtual void onTransition(QEvent *) {}
+    };
 
-} // namespace
+    Q_ASSERT(rootState() != 0);
+    return new InitialTransition(rootState()->initialState());
+}
 
 void QStateMachinePrivate::clearHistory()
 {
@@ -1310,8 +1312,6 @@ void QStateMachinePrivate::_q_start()
 {
     Q_Q(QStateMachine);
     Q_ASSERT(state == Starting);
-    Q_ASSERT(rootState() != 0);
-    QAbstractState *initial = rootState()->initialState();
     configuration.clear();
     qDeleteAll(internalEventQueue);
     internalEventQueue.clear();
@@ -1326,7 +1326,7 @@ void QStateMachinePrivate::_q_start()
     processingScheduled = true; // we call _q_process() below
 
     QList<QAbstractTransition*> transitions;
-    QAbstractTransition *initialTransition = new InitialTransition(initial);
+    QAbstractTransition *initialTransition = createInitialTransition();
     transitions.append(initialTransition);
 
     QEvent nullEvent(QEvent::None);
index c68ff41..423c077 100644 (file)
@@ -128,6 +128,7 @@ public:
     QState *rootState() const;
 
     void clearHistory();
+    QAbstractTransition *createInitialTransition() const;
 
     void microstep(QEvent *event, const QList<QAbstractTransition*> &transitionList);
     bool isPreempted(const QAbstractState *s, const QSet<QAbstractTransition*> &transitions) const;