diff options
-rw-r--r-- | examples/invoke-common/MainView.qml | 4 | ||||
-rw-r--r-- | examples/invoke-common/SubView.qml | 4 | ||||
-rw-r--r-- | examples/mediaplayer-common/Mediaplayer.qml | 10 | ||||
-rw-r--r-- | examples/mediaplayer-widgets-dynamic/mediaplayer-widgets-dynamic.cpp | 6 | ||||
-rw-r--r-- | examples/mediaplayer-widgets-static/mediaplayer-widgets-static.cpp | 6 | ||||
-rw-r--r-- | examples/trafficlight-common/TrafficLight.qml | 4 | ||||
-rw-r--r-- | src/scxml/qscxmlparser.cpp | 16 | ||||
-rw-r--r-- | tools/qscxmlc/scxmlcppdumper.cpp | 49 |
8 files changed, 56 insertions, 43 deletions
diff --git a/examples/invoke-common/MainView.qml b/examples/invoke-common/MainView.qml index b623592..0f51ae5 100644 --- a/examples/invoke-common/MainView.qml +++ b/examples/invoke-common/MainView.qml @@ -69,7 +69,7 @@ Window { text: "Go Nowhere" width: parent.width height: parent.height / 2 - onClicked: stateMachine.event_goNowhere() + onClicked: stateMachine.goNowhere() enabled: stateMachine.somewhere } @@ -79,7 +79,7 @@ Window { width: parent.width height: parent.height / 2 y: parent.height / 2 - onClicked: stateMachine.event_goSomewhere() + onClicked: stateMachine.goSomewhere() enabled: stateMachine.nowhere } } diff --git a/examples/invoke-common/SubView.qml b/examples/invoke-common/SubView.qml index 8ab3614..cec32e3 100644 --- a/examples/invoke-common/SubView.qml +++ b/examples/invoke-common/SubView.qml @@ -57,7 +57,7 @@ Item { text: "Go There" width: parent.width / 2 height: parent.height - onClicked: anywhere.event_goThere() + onClicked: anywhere.goThere() } Button { @@ -67,6 +67,6 @@ Item { width: parent.width / 2 height: parent.height x: width - onClicked: anywhere.event_goHere() + onClicked: anywhere.goHere() } } diff --git a/examples/mediaplayer-common/Mediaplayer.qml b/examples/mediaplayer-common/Mediaplayer.qml index d370ae9..c3e1b98 100644 --- a/examples/mediaplayer-common/Mediaplayer.qml +++ b/examples/mediaplayer-common/Mediaplayer.qml @@ -117,21 +117,21 @@ Window { Connections { target: stateMachine - onEvent_playbackStarted: { + onPlaybackStarted: { var media = data.media theText.text = "Playing '" + media + "'" - theLog.text = theLog.text + "\nevent_playbackStarted with data: " + JSON.stringify(data) + theLog.text = theLog.text + "\nplaybackStarted with data: " + JSON.stringify(data) } - onEvent_playbackStopped: { + onPlaybackStopped: { var media = data.media theText.text = "Stopped '" + media + "'" - theLog.text = theLog.text + "\nevent_playbackStopped with data: " + JSON.stringify(data) + theLog.text = theLog.text + "\nplaybackStopped with data: " + JSON.stringify(data) } } function tap(idx) { var media = theModel.get(idx).media var data = { "media": media } - stateMachine.event_tap(data) + stateMachine.tap(data) } } diff --git a/examples/mediaplayer-widgets-dynamic/mediaplayer-widgets-dynamic.cpp b/examples/mediaplayer-widgets-dynamic/mediaplayer-widgets-dynamic.cpp index 286c18b..f36a62e 100644 --- a/examples/mediaplayer-widgets-dynamic/mediaplayer-widgets-dynamic.cpp +++ b/examples/mediaplayer-widgets-dynamic/mediaplayer-widgets-dynamic.cpp @@ -63,10 +63,10 @@ int main(int argc, char **argv) machine->setParent(&mainWindow); QObject::connect(&mainWindow, SIGNAL(tap(const QVariant &)), - machine, SLOT(event_tap(const QVariant &))); - QObject::connect(machine, SIGNAL(event_playbackStarted(const QVariant &)), + machine, SLOT(tap(const QVariant &))); + QObject::connect(machine, SIGNAL(playbackStarted(const QVariant &)), &mainWindow, SLOT(started(const QVariant &))); - QObject::connect(machine, SIGNAL(event_playbackStopped(const QVariant &)), + QObject::connect(machine, SIGNAL(playbackStopped(const QVariant &)), &mainWindow, SLOT(stopped(const QVariant &))); machine->start(); diff --git a/examples/mediaplayer-widgets-static/mediaplayer-widgets-static.cpp b/examples/mediaplayer-widgets-static/mediaplayer-widgets-static.cpp index 65b8cb0..dcc6d59 100644 --- a/examples/mediaplayer-widgets-static/mediaplayer-widgets-static.cpp +++ b/examples/mediaplayer-widgets-static/mediaplayer-widgets-static.cpp @@ -62,10 +62,10 @@ int main(int argc, char **argv) MainWindow mainWindow; QObject::connect(&mainWindow, &MainWindow::tap, - &machine, &MediaPlayerStateMachine::event_tap); - QObject::connect(&machine, &MediaPlayerStateMachine::event_playbackStarted, + &machine, &MediaPlayerStateMachine::tap); + QObject::connect(&machine, &MediaPlayerStateMachine::playbackStarted, &mainWindow, &MainWindow::started); - QObject::connect(&machine, &MediaPlayerStateMachine::event_playbackStopped, + QObject::connect(&machine, &MediaPlayerStateMachine::playbackStopped, &mainWindow, &MainWindow::stopped); machine.start(); diff --git a/examples/trafficlight-common/TrafficLight.qml b/examples/trafficlight-common/TrafficLight.qml index 552e41d..4d8cb15 100644 --- a/examples/trafficlight-common/TrafficLight.qml +++ b/examples/trafficlight-common/TrafficLight.qml @@ -109,9 +109,9 @@ Window { onClicked: { if (stateMachine.working) - stateMachine.event_smash() + stateMachine.smash() else - stateMachine.event_repair() + stateMachine.repair() } } } diff --git a/src/scxml/qscxmlparser.cpp b/src/scxml/qscxmlparser.cpp index 314ee90..311d92a 100644 --- a/src/scxml/qscxmlparser.cpp +++ b/src/scxml/qscxmlparser.cpp @@ -586,7 +586,7 @@ private: // signals foreach (const QString &eventName, eventSignals) { - QByteArray signalName = QByteArray("event_") + eventName.toUtf8() + "(const QVariant &)"; + QByteArray signalName = eventName.toUtf8() + "(const QVariant &)"; QMetaMethodBuilder signalBuilder = b.addSignal(signalName); signalBuilder.setParameterNames(init("data")); int idx = signalBuilder.index(); @@ -616,7 +616,7 @@ private: // slots m_firstSlot = m_eventNamesByIndex.size(); foreach (const QString &eventName, eventSlots) { - QByteArray slotName = QByteArray("event_") + eventName.toUtf8() + "(const QVariant &)"; + QByteArray slotName = eventName.toUtf8() + "(const QVariant &)"; QMetaMethodBuilder slotBuilder = b.addSlot(slotName); slotBuilder.setParameterNames(init("data")); int idx = slotBuilder.index(); @@ -626,7 +626,7 @@ private: m_firstSlotWithoutData = m_eventNamesByIndex.size(); foreach (const QString &eventName, eventSlots) { - QByteArray slotName = QByteArray("event_") + eventName.toUtf8() + "()"; + QByteArray slotName = eventName.toUtf8() + "()"; QMetaMethodBuilder slotBuilder = b.addSlot(slotName); int idx = slotBuilder.index(); m_eventNamesByIndex.resize(std::max(idx + 1, m_eventNamesByIndex.size())); @@ -757,6 +757,7 @@ public: : m_stateMachine(Q_NULLPTR) , m_currentTransition(Q_NULLPTR) , m_bindLate(false) + , m_qtMode(false) {} QScxmlStateMachine *build(DocumentModel::ScxmlDocument *doc) @@ -765,6 +766,7 @@ public: m_parents.reserve(32); m_allTransitions.reserve(doc->allTransitions.size()); m_docStatesToQStates.reserve(doc->allStates.size()); + m_qtMode = doc->qtMode; doc->root->accept(this); wireTransitions(); @@ -939,8 +941,11 @@ private: bool visit(DocumentModel::Transition *node) Q_DECL_OVERRIDE { + if (m_qtMode) { + m_eventSlots.unite(node->events.toSet()); + } + #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) - m_eventSlots.unite(node->events.toSet()); auto newTransition = new QScxmlTransition(node->events); if (QHistoryState *parent = qobject_cast<QHistoryState*>(m_parents.last())) { parent->setDefaultTransition(newTransition); @@ -1016,7 +1021,7 @@ private: bool visit(DocumentModel::Send *node) Q_DECL_OVERRIDE { - if (node->type == QStringLiteral("qt:signal")) { + if (m_qtMode && node->type == QStringLiteral("qt:signal")) { m_eventSignals.insert(node->event); } @@ -1088,6 +1093,7 @@ private: QAbstractTransition *m_currentTransition; QVector<QPair<QState *, DocumentModel::AbstractState *>> m_initialStates; bool m_bindLate; + bool m_qtMode; QVector<DocumentModel::DataElement *> m_dataElements; QSet<QString> m_eventSignals; QSet<QString> m_eventSlots; diff --git a/tools/qscxmlc/scxmlcppdumper.cpp b/tools/qscxmlc/scxmlcppdumper.cpp index 9a38d56..3ccfb0e 100644 --- a/tools/qscxmlc/scxmlcppdumper.cpp +++ b/tools/qscxmlc/scxmlcppdumper.cpp @@ -197,6 +197,7 @@ public: , clazz(clazz) , translationUnit(tu) , m_bindLate(false) + , m_qtMode(false) { if (!tu->namespaceName.isEmpty()) { namespacePrefix += QStringLiteral("%1::").arg(tu->namespaceName); @@ -208,6 +209,7 @@ public: Q_ASSERT(doc); clazz.className = translationUnit->classnameForDocument.value(doc); + m_qtMode = doc->qtMode; doc->root->accept(this); @@ -536,10 +538,10 @@ protected: bool visit(Send *node) Q_DECL_OVERRIDE { - if (node->type == QStringLiteral("qt:signal")) { + if (m_qtMode && node->type == QStringLiteral("qt:signal")) { if (!m_signals.contains(node->event)) { m_signals.insert(node->event); - clazz.signalMethods << QStringLiteral("void event_%1(const QVariant &data);").arg(CppDumper::mangleId(node->event)); + clazz.signalMethods << QStringLiteral("void %1(const QVariant &data);").arg(node->event); } } @@ -669,32 +671,36 @@ private: { QStringList knownEventsList = m_knownEvents.toList(); std::sort(knownEventsList.begin(), knownEventsList.end()); - foreach (const QString &event, knownEventsList) { - if (event.startsWith(QStringLiteral("done.")) || event.startsWith(QStringLiteral("qsignal.")) - || event.startsWith(QStringLiteral("qevent."))) { - continue; + if (m_qtMode) { + foreach (const QString &event, knownEventsList) { + if (event.startsWith(QStringLiteral("done.")) || event.startsWith(QStringLiteral("qsignal.")) + || event.startsWith(QStringLiteral("qevent."))) { + continue; + } + if (event.contains(QLatin1Char('*'))) + continue; + + clazz.publicSlotDeclarations << QStringLiteral("void ") + event + QStringLiteral("(const QVariant &eventData = QVariant());"); + clazz.publicSlotDefinitions << QStringLiteral("void ") + clazz.className + + QStringLiteral("::") + + event + + QStringLiteral("(const QVariant &eventData)\n{ submitEvent(data->") + qba(event) + + QStringLiteral(", eventData); }"); } - if (event.contains(QLatin1Char('*'))) - continue; - - clazz.publicSlotDeclarations << QStringLiteral("void event_") + CppDumper::mangleId(event) + QStringLiteral("(const QVariant &eventData = QVariant());"); - clazz.publicSlotDefinitions << QStringLiteral("void ") + clazz.className - + QStringLiteral("::event_") - + CppDumper::mangleId(event) - + QStringLiteral("(const QVariant &eventData)\n{ submitEvent(data->") + qba(event) - + QStringLiteral(", eventData); }"); } if (!m_signals.isEmpty()) { clazz.needsEventFilter = true; clazz.init.impl << QStringLiteral("stateMachine.setScxmlEventFilter(this);"); auto &dm = clazz.dataMethods; - dm << QStringLiteral("bool handle(QScxmlEvent *event, QScxmlStateMachine *stateMachine) Q_DECL_OVERRIDE {") - << QStringLiteral(" if (event->originType() != QStringLiteral(\"qt:signal\")) { return true; }") - << QStringLiteral(" %1 *m = qobject_cast<%1 *>(stateMachine);").arg(clazz.className); - foreach (const QString &s, m_signals) { - dm << QStringLiteral(" if (event->name() == %1) { emit m->event_%2(event->data()); return false; }") - .arg(qba(s), CppDumper::mangleId(s)); + dm << QStringLiteral("bool handle(QScxmlEvent *event, QScxmlStateMachine *stateMachine) Q_DECL_OVERRIDE {"); + if (m_qtMode) { + dm << QStringLiteral(" if (event->originType() != QStringLiteral(\"qt:signal\")) { return true; }") + << QStringLiteral(" %1 *m = qobject_cast<%1 *>(stateMachine);").arg(clazz.className); + foreach (const QString &s, m_signals) { + dm << QStringLiteral(" if (event->name() == %1) { emit m->%2(event->data()); return false; }") + .arg(qba(s), CppDumper::mangleId(s)); + } } dm << QStringLiteral(" return true;") << QStringLiteral("}") @@ -1037,6 +1043,7 @@ private: QSet<QString> m_signals; QString m_currentTransitionName; bool m_bindLate; + bool m_qtMode; QVector<DocumentModel::DataElement *> m_dataElements; }; } // anonymous namespace |