diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qscxmlc/decl.t | 1 | ||||
-rw-r--r-- | tools/qscxmlc/scxmlcppdumper.cpp | 31 | ||||
-rw-r--r-- | tools/qscxmlc/scxmlcppdumper.h | 2 |
3 files changed, 34 insertions, 0 deletions
diff --git a/tools/qscxmlc/decl.t b/tools/qscxmlc/decl.t index 2b35d67..b0963e4 100644 --- a/tools/qscxmlc/decl.t +++ b/tools/qscxmlc/decl.t @@ -3,6 +3,7 @@ class ${classname}: public QScxmlStateMachine public: /* qmake ignore Q_OBJECT */ Q_OBJECT +${properties} public: ${classname}(QObject *parent = 0); diff --git a/tools/qscxmlc/scxmlcppdumper.cpp b/tools/qscxmlc/scxmlcppdumper.cpp index f6cc42a..e425dee 100644 --- a/tools/qscxmlc/scxmlcppdumper.cpp +++ b/tools/qscxmlc/scxmlcppdumper.cpp @@ -528,6 +528,7 @@ void CppDumper::writeClass(const QString &className, const GeneratedTableData::M const bool qtMode = m_translationUnit->mainDocument->qtMode; Replacements r; r[QStringLiteral("classname")] = className; + r[QStringLiteral("properties")] = generatePropertyDecls(info, qtMode); r[QStringLiteral("signals")] = qtMode ? generateSignalDecls(info) : QString(); r[QStringLiteral("slots")] = qtMode ? generateSlotDecls(info) : QString(); r[QStringLiteral("getters")] = qtMode ? generateGetterDecls(info) : QString(); @@ -716,6 +717,36 @@ QString CppDumper::mangleIdentifier(const QString &str) return mangled; } +QString CppDumper::generatePropertyDecls(const GeneratedTableData::MetaDataInfo &info, bool qtMode) +{ + QString decls; + + foreach (const QString &stateName, info.stateNames) { + if (!stateName.isEmpty()) { + const QString decl = QString::fromLatin1( + qtMode ? " Q_PROPERTY(bool %1 READ %2 NOTIFY %2Changed)\n" : + " Q_PROPERTY(bool %1 NOTIFY %2Changed)\n"); + decls += decl.arg(stateName, mangleIdentifier(stateName)); + } + } + + QString namespacePrefix; + if (!m_translationUnit->namespaceName.isEmpty()) { + namespacePrefix = QStringLiteral("::%1").arg(m_translationUnit->namespaceName); + } + + foreach (const QString &machineName, info.subStateMachineNames) { + if (!machineName.isEmpty()) { + const QString decl = QString::fromLatin1( + qtMode ? " Q_PROPERTY(%1::%2 *%3 READ %2 NOTIFY %2Changed)\n" : + " Q_PROPERTY(%1::%2 *%3 NOTIFY %2Changed)\n"); + decls += decl.arg(namespacePrefix, mangleIdentifier(machineName), machineName); + } + } + + return decls; +} + QString CppDumper::generateSignalDecls(const GeneratedTableData::MetaDataInfo &info) { QString decls; diff --git a/tools/qscxmlc/scxmlcppdumper.h b/tools/qscxmlc/scxmlcppdumper.h index 97011d0..5391fa7 100644 --- a/tools/qscxmlc/scxmlcppdumper.h +++ b/tools/qscxmlc/scxmlcppdumper.h @@ -86,6 +86,8 @@ private: QString mangleIdentifier(const QString &str); private: + QString generatePropertyDecls(const QScxmlInternal::GeneratedTableData::MetaDataInfo &info, + bool qtMode); QString generateSignalDecls(const QScxmlInternal::GeneratedTableData::MetaDataInfo &info); QString generateSlotDecls(const QScxmlInternal::GeneratedTableData::MetaDataInfo &info); QString generateSlotDefs(const QString &className, |