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
parent
0b66f723f0
commit
cd1351401f
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ public:
|
|||
QMutex externalEventMutex;
|
||||
|
||||
QStateMachine::Error error;
|
||||
QStateMachine::RestorePolicy globalRestorePolicy;
|
||||
QState::RestorePolicy globalRestorePolicy;
|
||||
|
||||
QString errorString;
|
||||
QSet<QAbstractState *> pendingErrorStates;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue