statemachine: Move RestorePolicy enum to QState class
authorKent Hansen <kent.hansen@nokia.com>
Fri, 13 Jul 2012 17:30:33 +0000 (19:30 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 16 Jul 2012 08:08:28 +0000 (10:08 +0200)
This makes it possible to add API for setting the restore policy
per state, or even per property assignment (QTBUG-17861).

This change is fully source compatible with Qt4.

Change-Id: I53628546b070f6fc84891f86e7ad7bd8ef5ba285
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
examples/animation/appchooser/main.cpp
src/corelib/statemachine/qstate.cpp
src/corelib/statemachine/qstate.h
src/corelib/statemachine/qstatemachine.cpp
src/corelib/statemachine/qstatemachine.h
src/corelib/statemachine/qstatemachine_p.h
tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp

index 23a0bd6..c8e60c0 100644 (file)
@@ -146,7 +146,7 @@ int main(int argc, char **argv)
     window.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QState *group = new QState(&machine);
     group->setObjectName("group");
index 481f0e9..afe0225 100644 (file)
@@ -124,6 +124,31 @@ QT_BEGIN_NAMESPACE
   is entered, all its child states are entered in parallel.
 */
 
+/*!
+   \enum QState::RestorePolicy
+
+   This enum specifies the restore policy type. The restore policy
+   takes effect when the machine enters a state which sets one or more
+   properties. If the restore policy is set to RestoreProperties,
+   the state machine will save the original value of the property before the
+   new value is set.
+
+   Later, when the machine either enters a state which does not set
+   a value for the given property, the property will automatically be restored
+   to its initial value.
+
+   Only one initial value will be saved for any given property. If a value for a property has
+   already been saved by the state machine, it will not be overwritten until the property has been
+   successfully restored.
+
+   \value DontRestoreProperties The state machine should not save the initial values of properties
+          and restore them later.
+   \value RestoreProperties The state machine should save the initial values of properties
+          and restore them later.
+
+   \sa QStateMachine::globalRestorePolicy, QState::assignProperty()
+*/
+
 QStatePrivate::QStatePrivate()
     : QAbstractStatePrivate(StandardState),
       errorState(0), initialState(0), childMode(QState::ExclusiveStates),
index 63a11b4..2989bd4 100644 (file)
@@ -63,13 +63,18 @@ class Q_CORE_EXPORT QState : public QAbstractState
     Q_PROPERTY(QAbstractState* initialState READ initialState WRITE setInitialState)
     Q_PROPERTY(QAbstractState* errorState READ errorState WRITE setErrorState)
     Q_PROPERTY(ChildMode childMode READ childMode WRITE setChildMode)
-    Q_ENUMS(ChildMode)
+    Q_ENUMS(ChildMode RestorePolicy)
 public:
     enum ChildMode {
         ExclusiveStates,
         ParallelStates
     };
 
+    enum RestorePolicy {
+        DontRestoreProperties,
+        RestoreProperties
+    };
+
     QState(QState *parent = 0);
     QState(ChildMode childMode, QState *parent = 0);
     ~QState();
index 2d6ced3..b697388 100644 (file)
@@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE
     \brief the restore policy for states of this state machine.
 
     The default value of this property is
-    QStateMachine::DontRestoreProperties.
+    QState::DontRestoreProperties.
 */
 
 #ifndef QT_NO_ANIMATION
@@ -191,7 +191,7 @@ QStateMachinePrivate::QStateMachinePrivate()
     stop = false;
     stopProcessingReason = EventQueueEmpty;
     error = QStateMachine::NoError;
-    globalRestorePolicy = QStateMachine::DontRestoreProperties;
+    globalRestorePolicy = QState::DontRestoreProperties;
     signalEventGenerator = 0;
 #ifndef QT_NO_ANIMATION
     animated = true;
@@ -575,7 +575,7 @@ void QStateMachinePrivate::enterStates(QEvent *event, const QList<QAbstractState
             QList<QPropertyAssignment> assignments = propertyAssignmentsForState.value(s);
             for (int i = 0; i < assignments.size(); ++i) {
                 const QPropertyAssignment &assn = assignments.at(i);
-                if (globalRestorePolicy == QStateMachine::RestoreProperties) {
+                if (globalRestorePolicy == QState::RestoreProperties) {
                     if (assn.explicitlySet) {
                         if (!hasRestorable(s, assn.object, assn.propertyName)) {
                             QVariant value = savedValueForRestorable(exitedStates_sorted, assn.object, assn.propertyName);
@@ -1250,7 +1250,7 @@ void QStateMachinePrivate::initializeAnimations(QAbstractState *state, const QLi
                     // ### connect to just the top-level animation?
                     QObject::connect(a, SIGNAL(finished()), q, SLOT(_q_animationFinished()), Qt::UniqueConnection);
                 }
-                if ((globalRestorePolicy == QStateMachine::RestoreProperties)
+                if ((globalRestorePolicy == QState::RestoreProperties)
                         && !hasRestorable(state, assn.object, assn.propertyName)) {
                     QVariant value = savedValueForRestorable(exitedStates_sorted, assn.object, assn.propertyName);
                     unregisterRestorables(exitedStates_sorted, assn.object, assn.propertyName);
@@ -1983,32 +1983,6 @@ QStateMachine::~QStateMachine()
 */
 
 /*!
-   \enum QStateMachine::RestorePolicy
-
-   This enum specifies the restore policy type. The restore policy
-   takes effect when the machine enters a state which sets one or more
-   properties. If the restore policy is set to RestoreProperties,
-   the state machine will save the original value of the property before the
-   new value is set.
-
-   Later, when the machine either enters a state which does not set
-   a value for the given property, the property will automatically be restored
-   to its initial value.
-
-   Only one initial value will be saved for any given property. If a value for a property has 
-   already been saved by the state machine, it will not be overwritten until the property has been
-   successfully restored. 
-
-   \value DontRestoreProperties The state machine should not save the initial values of properties
-          and restore them later.
-   \value RestoreProperties The state machine should save the initial values of properties 
-          and restore them later.
-
-   \sa QStateMachine::globalRestorePolicy, QState::assignProperty()
-*/
-
-
-/*!
   Returns the error code of the last error that occurred in the state machine.
 */
 QStateMachine::Error QStateMachine::error() const
@@ -2041,7 +2015,7 @@ void QStateMachine::clearError()
 
    \sa setGlobalRestorePolicy()
 */
-QStateMachine::RestorePolicy QStateMachine::globalRestorePolicy() const
+QState::RestorePolicy QStateMachine::globalRestorePolicy() const
 {
     Q_D(const QStateMachine);
     return d->globalRestorePolicy;
@@ -2049,11 +2023,11 @@ QStateMachine::RestorePolicy QStateMachine::globalRestorePolicy() const
 
 /*!
    Sets the restore policy of the state machine to \a restorePolicy. The default 
-   restore policy is QAbstractState::DontRestoreProperties.
+   restore policy is QState::DontRestoreProperties.
    
    \sa globalRestorePolicy()
 */
-void QStateMachine::setGlobalRestorePolicy(QStateMachine::RestorePolicy restorePolicy) 
+void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)
 {
     Q_D(QStateMachine);
     d->globalRestorePolicy = restorePolicy;
index 964b89a..cc9c8aa 100644 (file)
@@ -63,8 +63,7 @@ class Q_CORE_EXPORT QStateMachine : public QState
 {
     Q_OBJECT
     Q_PROPERTY(QString errorString READ errorString)
-    Q_PROPERTY(RestorePolicy globalRestorePolicy READ globalRestorePolicy WRITE setGlobalRestorePolicy)
-    Q_ENUMS(RestorePolicy)
+    Q_PROPERTY(QState::RestorePolicy globalRestorePolicy READ globalRestorePolicy WRITE setGlobalRestorePolicy)
 #ifndef QT_NO_ANIMATION
     Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated)
 #endif
@@ -107,11 +106,6 @@ public:
         HighPriority
     };
 
-    enum RestorePolicy {
-        DontRestoreProperties,
-        RestoreProperties
-    };
-
     enum Error {
         NoError, 
         NoInitialStateError,
@@ -141,8 +135,8 @@ public:
     void removeDefaultAnimation(QAbstractAnimation *animation);
 #endif // QT_NO_ANIMATION
 
-    QStateMachine::RestorePolicy globalRestorePolicy() const;
-    void setGlobalRestorePolicy(QStateMachine::RestorePolicy restorePolicy);
+    QState::RestorePolicy globalRestorePolicy() const;
+    void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy);
 
     void postEvent(QEvent *event, EventPriority priority = NormalPriority);
     int postDelayedEvent(QEvent *event, int delay);
index 9e1f425..cf20ee3 100644 (file)
@@ -224,7 +224,7 @@ public:
     QMutex externalEventMutex;
 
     QStateMachine::Error error;
-    QStateMachine::RestorePolicy globalRestorePolicy;
+    QState::RestorePolicy globalRestorePolicy;
 
     QString errorString;
     QSet<QAbstractState *> pendingErrorStates;
index af10f06..e4a26d6 100644 (file)
@@ -1034,8 +1034,8 @@ void tst_QStateMachine::customErrorStateNotInGraph()
 void tst_QStateMachine::restoreProperties()
 {
     QStateMachine machine;
-    QCOMPARE(machine.globalRestorePolicy(), QStateMachine::DontRestoreProperties);
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    QCOMPARE(machine.globalRestorePolicy(), QState::DontRestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *object = new QObject(&machine);
     object->setProperty("a", 1);
@@ -2906,7 +2906,7 @@ void tst_QStateMachine::noInitialStateForInitialState()
 void tst_QStateMachine::globalRestorePolicySetToDontRestore()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::DontRestoreProperties);
+    machine.setGlobalRestorePolicy(QState::DontRestoreProperties);
 
     QObject *propertyHolder = new QObject(&machine);
     propertyHolder->setProperty("a", 1);
@@ -2946,7 +2946,7 @@ void tst_QStateMachine::globalRestorePolicySetToDontRestore()
 void tst_QStateMachine::globalRestorePolicySetToRestore()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *propertyHolder = new QObject(&machine);
     propertyHolder->setProperty("a", 1);
@@ -3272,7 +3272,7 @@ void tst_QStateMachine::propertiesAssignedSignalTransitionsReuseAnimationGroup()
 void tst_QStateMachine::animatedGlobalRestoreProperty()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *object = new QObject(&machine);
     object->setProperty("foo", 1.0);
@@ -3621,7 +3621,7 @@ void tst_QStateMachine::parallelStateTransition()
 void tst_QStateMachine::nestedRestoreProperties()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *propertyHolder = new QObject(&machine);
     propertyHolder->setProperty("foo", 1);
@@ -3673,7 +3673,7 @@ void tst_QStateMachine::nestedRestoreProperties()
 void tst_QStateMachine::nestedRestoreProperties2()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *propertyHolder = new QObject(&machine);
     propertyHolder->setProperty("foo", 1);
@@ -4107,7 +4107,7 @@ void tst_QStateMachine::deletePropertyAssignmentObjectBeforeEntry()
 void tst_QStateMachine::deletePropertyAssignmentObjectBeforeRestore()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
     QState *s1 = new QState(&machine);
     machine.setInitialState(s1);
     QState *s2 = new QState(&machine);
@@ -4149,7 +4149,7 @@ void tst_QStateMachine::deleteInitialState()
 void tst_QStateMachine::setPropertyAfterRestore()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *object = new QObject(&machine);
     object->setProperty("a", 1);
@@ -4194,8 +4194,8 @@ void tst_QStateMachine::setPropertyAfterRestore()
 void tst_QStateMachine::transitionWithNoTarget_data()
 {
     QTest::addColumn<int>("restorePolicy");
-    QTest::newRow("DontRestoreProperties") << int(QStateMachine::DontRestoreProperties);
-    QTest::newRow("RestoreProperties") << int(QStateMachine::RestoreProperties);
+    QTest::newRow("DontRestoreProperties") << int(QState::DontRestoreProperties);
+    QTest::newRow("RestoreProperties") << int(QState::RestoreProperties);
 }
 
 void tst_QStateMachine::transitionWithNoTarget()
@@ -4203,7 +4203,7 @@ void tst_QStateMachine::transitionWithNoTarget()
     QFETCH(int, restorePolicy);
 
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(static_cast<QStateMachine::RestorePolicy>(restorePolicy));
+    machine.setGlobalRestorePolicy(static_cast<QState::RestorePolicy>(restorePolicy));
 
     QObject *object = new QObject;
     object->setProperty("a", 1);
@@ -4274,7 +4274,7 @@ private:
 void tst_QStateMachine::restorePropertiesSimple()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     PropertyObject *po = new PropertyObject;
     po->setProp(2);
@@ -4337,7 +4337,7 @@ void tst_QStateMachine::restorePropertiesSimple()
 void tst_QStateMachine::restoreProperties2()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     PropertyObject *po = new PropertyObject;
     po->setProp(2);
@@ -4419,7 +4419,7 @@ void tst_QStateMachine::restoreProperties2()
 void tst_QStateMachine::restoreProperties3()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     PropertyObject *po = new PropertyObject;
     po->setProp(2);
@@ -4471,7 +4471,7 @@ void tst_QStateMachine::restoreProperties3()
 void tst_QStateMachine::restoreProperties4()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     PropertyObject *po1 = new PropertyObject;
     po1->setProp(2);
@@ -4543,7 +4543,7 @@ void tst_QStateMachine::restoreProperties4()
 void tst_QStateMachine::restorePropertiesSelfTransition()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     PropertyObject *po = new PropertyObject;
     po->setProp(2);
@@ -4581,7 +4581,7 @@ void tst_QStateMachine::restorePropertiesSelfTransition()
 void tst_QStateMachine::changeStateWhileAnimatingProperty()
 {
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
+    machine.setGlobalRestorePolicy(QState::RestoreProperties);
 
     QObject *o1 = new QObject;
     o1->setProperty("x", 10.);
@@ -4655,8 +4655,8 @@ private Q_SLOTS:
 void tst_QStateMachine::propertiesAreAssignedBeforeEntryCallbacks_data()
 {
     QTest::addColumn<int>("restorePolicy");
-    QTest::newRow("DontRestoreProperties") << int(QStateMachine::DontRestoreProperties);
-    QTest::newRow("RestoreProperties") << int(QStateMachine::RestoreProperties);
+    QTest::newRow("DontRestoreProperties") << int(QState::DontRestoreProperties);
+    QTest::newRow("RestoreProperties") << int(QState::RestoreProperties);
 }
 
 void tst_QStateMachine::propertiesAreAssignedBeforeEntryCallbacks()
@@ -4664,7 +4664,7 @@ void tst_QStateMachine::propertiesAreAssignedBeforeEntryCallbacks()
     QFETCH(int, restorePolicy);
 
     QStateMachine machine;
-    machine.setGlobalRestorePolicy(static_cast<QStateMachine::RestorePolicy>(restorePolicy));
+    machine.setGlobalRestorePolicy(static_cast<QState::RestorePolicy>(restorePolicy));
 
     AssignPropertyTestState *s1 = new AssignPropertyTestState(&machine);
     s1->assignProperty(s1, "wasAssigned", true);