summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/qscxmlc/decl.t1
-rw-r--r--tools/qscxmlc/scxmlcppdumper.cpp31
-rw-r--r--tools/qscxmlc/scxmlcppdumper.h2
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,