summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJuergen Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-01-09 15:38:05 +0100
committerJuergen Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-01-09 15:38:05 +0100
commit72c858318801f1ed1f677c8d4965534e1b05d268 (patch)
treed1f0fa7ce637e09401c1afcb959e6400f14ff12d /examples
parentcc9c3cee8963a5e2b1a53b931636278721e793f7 (diff)
downloadqtivi-qface-72c858318801f1ed1f677c8d4965534e1b05d268.tar.gz
minor adjustments for the code generation
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/qtcpp/generator/qtcpp.py49
-rw-r--r--examples/qtcpp/generator/templates/abstractinterface.cpp16
-rw-r--r--examples/qtcpp/generator/templates/abstractinterface.h13
-rw-r--r--examples/qtcpp/generator/templates/module.cpp5
-rw-r--r--examples/qtcpp/generator/templates/module.h1
5 files changed, 33 insertions, 51 deletions
diff --git a/examples/qtcpp/generator/qtcpp.py b/examples/qtcpp/generator/qtcpp.py
index 3bea028..030e0f5 100755
--- a/examples/qtcpp/generator/qtcpp.py
+++ b/examples/qtcpp/generator/qtcpp.py
@@ -6,65 +6,28 @@ import logging
import logging.config
import yaml
from qface.generator import FileSystem, Generator
+from qface.helper.qtcpp import Filters
import os
from path import Path
here = os.path.dirname(__file__)
-def parameterType(symbol):
- module_name = symbol.module.module_name
- if symbol.type.is_enum:
- return 'Qml{0}Module::{1} {2}'.format(module_name, symbol.type, symbol)
- if symbol.type.is_void or symbol.type.is_primitive:
- if symbol.type.name == 'string':
- return 'const QString &{0}'.format(symbol)
- if symbol.type.name == 'var':
- return 'const QVariant &{0}'.format(symbol)
- if symbol.type.name == 'real':
- return 'float {0}'.format(symbol)
- return '{0} {1}'.format(symbol.type, symbol)
- elif symbol.type.is_list:
- return 'const QList<{0}> &{1}'.format(symbol.type.nested, symbol)
- elif symbol.type.is_model:
- return '{0}Model *{1}'.format(symbol.type.nested, symbol)
- else:
- return 'const Qml{0} &{1}'.format(symbol.type, symbol)
-
-
-def returnType(symbol):
- module_name = symbol.module.module_name
- if symbol.type.is_enum:
- return 'Qml{0}Module::{1}'.format(module_name, symbol.type)
- if symbol.type.is_void or symbol.type.is_primitive:
- if symbol.type.name == 'string':
- return 'QString'
- if symbol.type.name == 'var':
- return 'QVariant'
- if symbol.type.name == 'real':
- return 'float'
- return symbol.type
- elif symbol.type.is_list:
- return 'QList<{0}>'.format(symbol.type.nested)
- elif symbol.type.is_model:
- return '{0}Model*'.format(symbol.type.nested)
- else:
- return 'Qml{0}'.format(symbol.type)
-
def run_generation(input, output):
system = FileSystem.parse(input)
generator = Generator(searchpath=os.path.join(here, 'templates'))
- generator.register_filter('returnType', returnType)
- generator.register_filter('parameterType', parameterType)
+ generator.register_filter('returnType', Filters.returnType)
+ generator.register_filter('parameterType', Filters.parameterType)
+ generator.register_filter('defaultValue', Filters.defaultValue)
ctx = {'output': output}
for module in system.modules:
ctx.update({'module': module})
- dst = generator.apply('{{output}}/{{module|lower}}', ctx)
+ dst = generator.apply('{{output}}/{{module|lower|replace(".", "-")}}', ctx)
ctx.update({'dst': dst})
generator.write('{{dst}}/qmldir', 'qmldir', ctx, preserve=True)
generator.write('{{dst}}/plugin.cpp', 'plugin.cpp', ctx, preserve=True)
generator.write('{{dst}}/plugin.h', 'plugin.h', ctx, preserve=True)
- generator.write('{{dst}}/{{module|lower}}.pro', 'plugin.pro', ctx, preserve=True)
+ generator.write('{{dst}}/{{module|lower|replace(".", "-")}}.pro', 'plugin.pro', ctx, preserve=True)
generator.write('{{dst}}/generated/generated.pri', 'generated.pri', ctx)
generator.write('{{dst}}/generated/qml{{module.module_name|lower}}module.h', 'module.h', ctx)
generator.write('{{dst}}/generated/qml{{module.module_name|lower}}module.cpp', 'module.cpp', ctx)
diff --git a/examples/qtcpp/generator/templates/abstractinterface.cpp b/examples/qtcpp/generator/templates/abstractinterface.cpp
index 9bf6ec7..662a66c 100644
--- a/examples/qtcpp/generator/templates/abstractinterface.cpp
+++ b/examples/qtcpp/generator/templates/abstractinterface.cpp
@@ -12,6 +12,9 @@
{{interface.comment}}
{{class}}::{{class}}(QObject *parent)
: QObject(parent)
+{% for property in interface.properties %}
+ , m_{{property}}({{property|defaultValue}})
+{% endfor %}
{
{% for property in interface.properties %}
{% if property.type.is_model %}
@@ -27,12 +30,23 @@ void {{class}}::set{{property|upperfirst}}({{ property|parameterType }})
return;
}
m_{{property}} = {{property}};
- emit {{property}}Changed({{property}});
+ emit {{property}}Changed();
}
{{property|returnType}} {{class}}::{{property}}() const
{
return m_{{property}};
}
+{% endfor %}
+{%- for operation in interface.operations %}
+{{operation|returnType}} {{class}}::{{operation}}({{operation.parameters|map('parameterType')|join(', ')}})
+{
+ {% for parameter in operation.parameters %}
+ Q_UNUSED({{parameter.name}});
+ {% endfor %}
+ qWarning() << "{{class}}::{{operation}}(...) not implemented";
+ return {{operation|defaultValue}};
+}
{% endfor %}
+
diff --git a/examples/qtcpp/generator/templates/abstractinterface.h b/examples/qtcpp/generator/templates/abstractinterface.h
index aac9ac8..90d9ae4 100644
--- a/examples/qtcpp/generator/templates/abstractinterface.h
+++ b/examples/qtcpp/generator/templates/abstractinterface.h
@@ -21,26 +21,27 @@ class {{class}} : public QObject
public:
{{class}}(QObject *parent=0);
-{%- for operation in interface.operations %}
- virtual {{operation|returnType}} {{operation}}({{operation.parameters|map('parameterType')|join(', ')}}) = 0;
+public Q_SLOTS:
+{% for operation in interface.operations %}
+ virtual {{operation|returnType}} {{operation}}({{operation.parameters|map('parameterType')|join(', ')}});
{% endfor %}
-public Q_SLOTS:
+public:
{% for property in interface.properties %}
void set{{property|upperfirst}}({{ property|parameterType }});
{% endfor %}
public:
{% for property in interface.properties %}
- {{property|returnType}} {{property}}() const;
+ virtual {{property|returnType}} {{property}}() const;
{% endfor %}
Q_SIGNALS:
{% for property in interface.properties %}
- void {{property}}Changed({{property|parameterType}});
+ void {{property}}Changed();
{% endfor %}
-private:
+protected:
{% for property in interface.properties %}
{{property|returnType}} m_{{property}};
{% endfor %}
diff --git a/examples/qtcpp/generator/templates/module.cpp b/examples/qtcpp/generator/templates/module.cpp
index ca0f8c6..6579b2c 100644
--- a/examples/qtcpp/generator/templates/module.cpp
+++ b/examples/qtcpp/generator/templates/module.cpp
@@ -32,6 +32,9 @@ void {{class}}::registerTypes()
{% for struct in module.structs %}
qRegisterMetaType<Qml{{struct}}>();
{% endfor %}
+ {% for enum in module.enums %}
+ qRegisterMetaType<{{class}}::{{enum}}>();
+ {% endfor %}
}
void {{class}}::registerQmlTypes(const QString& uri, int majorVersion, int minorVersion)
@@ -39,5 +42,5 @@ void {{class}}::registerQmlTypes(const QString& uri, int majorVersion, int minor
{% for struct in module.structs %}
qmlRegisterUncreatableType<Qml{{struct}}Model>(uri.toLatin1(), majorVersion, minorVersion, "{{struct}}Model", "Model can not be instantiated from QML");
{% endfor %}
- qmlRegisterSingletonType<{{class}}>(uri.toLatin1(), majorVersion, minorVersion, "{{module}}", {{class|lower}}_singletontype_provider);
+ qmlRegisterSingletonType<{{class}}>(uri.toLatin1(), majorVersion, minorVersion, "{{module.module_name}}Module", {{class|lower}}_singletontype_provider);
}
diff --git a/examples/qtcpp/generator/templates/module.h b/examples/qtcpp/generator/templates/module.h
index f6bb772..65ba2db 100644
--- a/examples/qtcpp/generator/templates/module.h
+++ b/examples/qtcpp/generator/templates/module.h
@@ -26,6 +26,7 @@ public:
{{ comma() }}
{{member.name}} = {{member.value}}
{%- endfor %}
+
};
Q_ENUM({{enum}})
{% endfor %}