statemachine: Move RestorePolicy enum to QState class

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>
bb10
Kent Hansen 2012-07-13 19:30:33 +02:00 committed by Qt by Nokia
parent 0b66f723f0
commit cd1351401f
7 changed files with 64 additions and 66 deletions

View 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");

View 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),

View 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();

View 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);
@ -1982,32 +1982,6 @@ QStateMachine::~QStateMachine()
\sa setErrorState()
*/
/*!
\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.
*/
@ -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;

View 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);

View File

@ -224,7 +224,7 @@ public:
QMutex externalEventMutex;
QStateMachine::Error error;
QStateMachine::RestorePolicy globalRestorePolicy;
QState::RestorePolicy globalRestorePolicy;
QString errorString;
QSet<QAbstractState *> pendingErrorStates;

View 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);