From 0b66f723f06f6d115ea37d4db8bb6c0b5f63885b Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 13 Jul 2012 20:11:45 +0200 Subject: Add QStateMachine constructor that takes a ChildMode Back when QStateMachine was changed to inherit QState, this constructor was conveniently left out because setting the state machine (root state) to be a parallel state group didn't actually work. But as of commit d281aa6936ad01e28dacabb41bd9eb59891f85a1, it does work, so add the missing constructor. Task-number: QTBUG-15430 Change-Id: I68c599baa0ef1bfc869195140cf5daf645e75b8b Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/statemachine/qstatemachine.cpp | 14 ++++++++ src/corelib/statemachine/qstatemachine.h | 1 + .../qstatemachine/tst_qstatemachine.cpp | 42 ++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index 3ab108a92b..2d6ced3051 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -1917,6 +1917,20 @@ QStateMachine::QStateMachine(QObject *parent) setParent(parent); } +/*! + \since 5.0 + + Constructs a new state machine with the given \a childMode + and \a parent. +*/ +QStateMachine::QStateMachine(QState::ChildMode childMode, QObject *parent) + : QState(*new QStateMachinePrivate, /*parentState=*/0) +{ + Q_D(QStateMachine); + d->childMode = childMode; + setParent(parent); // See comment in constructor above +} + /*! \internal */ diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h index bc3f2fa27f..964b89a66e 100644 --- a/src/corelib/statemachine/qstatemachine.h +++ b/src/corelib/statemachine/qstatemachine.h @@ -120,6 +120,7 @@ public: }; explicit QStateMachine(QObject *parent = 0); + QStateMachine(QState::ChildMode childMode, QObject *parent = 0); ~QStateMachine(); void addState(QAbstractState *state); diff --git a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp index 77dc8dd1cc..af10f06718 100644 --- a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp @@ -210,6 +210,7 @@ private slots: void createEventTransitionWhenRunning(); void signalTransitionSenderInDifferentThread(); void signalTransitionRegistrationThreadSafety(); + void childModeConstructor(); }; class TestState : public QState @@ -4934,5 +4935,46 @@ void tst_QStateMachine::signalTransitionRegistrationThreadSafety() QTRY_VERIFY(thread.wait()); } +void tst_QStateMachine::childModeConstructor() +{ + { + QStateMachine machine(QState::ExclusiveStates); + QCOMPARE(machine.childMode(), QState::ExclusiveStates); + QVERIFY(machine.parent() == 0); + QVERIFY(machine.parentState() == 0); + } + { + QStateMachine machine(QState::ParallelStates); + QCOMPARE(machine.childMode(), QState::ParallelStates); + QVERIFY(machine.parent() == 0); + QVERIFY(machine.parentState() == 0); + } + { + QStateMachine machine(QState::ExclusiveStates, this); + QCOMPARE(machine.childMode(), QState::ExclusiveStates); + QCOMPARE(machine.parent(), static_cast(this)); + QVERIFY(machine.parentState() == 0); + } + { + QStateMachine machine(QState::ParallelStates, this); + QCOMPARE(machine.childMode(), QState::ParallelStates); + QCOMPARE(machine.parent(), static_cast(this)); + QVERIFY(machine.parentState() == 0); + } + QState state; + { + QStateMachine machine(QState::ExclusiveStates, &state); + QCOMPARE(machine.childMode(), QState::ExclusiveStates); + QCOMPARE(machine.parent(), static_cast(&state)); + QCOMPARE(machine.parentState(), &state); + } + { + QStateMachine machine(QState::ParallelStates, &state); + QCOMPARE(machine.childMode(), QState::ParallelStates); + QCOMPARE(machine.parent(), static_cast(&state)); + QCOMPARE(machine.parentState(), &state); + } +} + QTEST_MAIN(tst_QStateMachine) #include "tst_qstatemachine.moc" -- cgit v1.2.3