summaryrefslogtreecommitdiffstats
path: root/src/scxml/qscxmlstatemachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scxml/qscxmlstatemachine.cpp')
-rw-r--r--src/scxml/qscxmlstatemachine.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/scxml/qscxmlstatemachine.cpp b/src/scxml/qscxmlstatemachine.cpp
index b7431ba..23f8a71 100644
--- a/src/scxml/qscxmlstatemachine.cpp
+++ b/src/scxml/qscxmlstatemachine.cpp
@@ -768,6 +768,7 @@ void QScxmlStateMachinePrivate::attach(QScxmlStateMachineInfo *info)
void QScxmlStateMachinePrivate::updateMetaCache()
{
m_stateIndexToSignalIndex.clear();
+ m_stateNameToSignalIndex.clear();
if (!m_tableData)
return;
@@ -776,10 +777,14 @@ void QScxmlStateMachinePrivate::updateMetaCache()
return;
int signalIndex = 0;
+ const int methodOffset = QMetaObjectPrivate::signalOffset(m_metaObject);
for (int i = 0; i < m_stateTable->stateCount; ++i) {
const auto &s = m_stateTable->state(i);
if (!s.isHistoryState() && s.type != StateTable::State::Invalid) {
m_stateIndexToSignalIndex.insert(i, signalIndex);
+ m_stateNameToSignalIndex.insert(m_tableData->string(s.name),
+ signalIndex + methodOffset);
+
++signalIndex;
}
}
@@ -1095,7 +1100,8 @@ void QScxmlStateMachinePrivate::exitStates(const OrderedSet &enabledTransitions)
if (m_infoSignalProxy) {
emit m_infoSignalProxy->statesExited(
- QVector<QScxmlStateMachineInfo::StateId>::fromStdVector(statesToExitSorted));
+ QVector<QScxmlStateMachineInfo::StateId>(statesToExitSorted.begin(),
+ statesToExitSorted.end()));
}
}
@@ -1126,8 +1132,8 @@ void QScxmlStateMachinePrivate::executeTransitionContent(const OrderedSet &enabl
if (m_infoSignalProxy) {
emit m_infoSignalProxy->transitionsTriggered(
- QVector<QScxmlStateMachineInfo::TransitionId>::fromStdVector(
- enabledTransitions.list()));
+ QVector<QScxmlStateMachineInfo::TransitionId>(enabledTransitions.list().begin(),
+ enabledTransitions.list().end()));
}
}
@@ -1190,7 +1196,8 @@ void QScxmlStateMachinePrivate::enterStates(const OrderedSet &enabledTransitions
emitStateActive(s, true);
if (m_infoSignalProxy) {
emit m_infoSignalProxy->statesEntered(
- QVector<QScxmlStateMachineInfo::StateId>::fromStdVector(sortedStates));
+ QVector<QScxmlStateMachineInfo::StateId>(sortedStates.begin(),
+ sortedStates.end()));
}
}
@@ -1907,8 +1914,7 @@ QMetaObject::Connection QScxmlStateMachine::connectToStateImpl(const QString &sc
types = QtPrivate::ConnectionTypes<QtPrivate::List<bool> >::types();
Q_D(QScxmlStateMachine);
- int signalIndex = QScxmlInternal::signalIndex(d->m_metaObject,
- scxmlStateName.toUtf8() + "Changed(bool)");
+ const int signalIndex = d->m_stateNameToSignalIndex.value(scxmlStateName);
return signalIndex < 0 ? QMetaObject::Connection()
: QObjectPrivate::connectImpl(this, signalIndex, receiver, slot, slotObj,
type, types, d->m_metaObject);