diff options
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo.cpp | 11 | ||||
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo_p.h | 1 | ||||
-rw-r--r-- | tests/auto/statemachineinfo/tst_statemachineinfo.cpp | 8 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/scxml/qscxmlstatemachineinfo.cpp b/src/scxml/qscxmlstatemachineinfo.cpp index 32074cd..7b52f8a 100644 --- a/src/scxml/qscxmlstatemachineinfo.cpp +++ b/src/scxml/qscxmlstatemachineinfo.cpp @@ -107,6 +107,17 @@ QString QScxmlStateMachineInfo::stateName(int stateId) const return QString(); } +QScxmlStateMachineInfo::StateId QScxmlStateMachineInfo::stateParent(StateId stateId) const +{ + Q_D(const QScxmlStateMachineInfo); + + if (stateId < 0 || stateId >= d->stateTable()->stateCount) + return InvalidStateId; + + auto state = d->stateTable()->state(stateId); + return state.parent; +} + QScxmlStateMachineInfo::StateType QScxmlStateMachineInfo::stateType(StateId stateId) const { Q_D(const QScxmlStateMachineInfo); diff --git a/src/scxml/qscxmlstatemachineinfo_p.h b/src/scxml/qscxmlstatemachineinfo_p.h index 10d4c02..04d1967 100644 --- a/src/scxml/qscxmlstatemachineinfo_p.h +++ b/src/scxml/qscxmlstatemachineinfo_p.h @@ -94,6 +94,7 @@ public: // methods QVector<StateId> allStates() const; QVector<TransitionId> allTransitions() const; QString stateName(int stateId) const; + StateId stateParent(StateId stateId) const; StateType stateType(int stateId) const; QVector<StateId> stateChildren(StateId stateId) const; TransitionType transitionType(TransitionId transitionId) const; diff --git a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp index 90491d5..efd1840 100644 --- a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp +++ b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp @@ -108,6 +108,14 @@ void tst_StateMachineInfo::checkInfo() QCOMPARE(info->stateName(states.at(3)), QLatin1String("b")); QCOMPARE(info->stateName(states.at(4)), QLatin1String("theEnd")); + QCOMPARE(info->stateParent(QScxmlStateMachineInfo::InvalidState), + static_cast<int>(QScxmlStateMachineInfo::InvalidStateId)); + QCOMPARE(info->stateParent(states.at(0)), static_cast<int>(QScxmlStateMachineInfo::InvalidStateId)); + QCOMPARE(info->stateParent(states.at(1)), static_cast<int>(QScxmlStateMachineInfo::InvalidStateId)); + QCOMPARE(info->stateParent(states.at(2)), 1); + QCOMPARE(info->stateParent(states.at(3)), 1); + QCOMPARE(info->stateParent(states.at(4)), static_cast<int>(QScxmlStateMachineInfo::InvalidStateId)); + QCOMPARE(info->stateType(states.at(0)), QScxmlStateMachineInfo::NormalState); QCOMPARE(info->stateType(states.at(1)), QScxmlStateMachineInfo::ParallelState); QCOMPARE(info->stateType(states.at(2)), QScxmlStateMachineInfo::NormalState); |