diff options
author | Juergen Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-01-09 15:38:05 +0100 |
---|---|---|
committer | Juergen Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-01-09 15:38:05 +0100 |
commit | 72c858318801f1ed1f677c8d4965534e1b05d268 (patch) | |
tree | d1f0fa7ce637e09401c1afcb959e6400f14ff12d /examples | |
parent | cc9c3cee8963a5e2b1a53b931636278721e793f7 (diff) | |
download | qtivi-qface-72c858318801f1ed1f677c8d4965534e1b05d268.tar.gz |
minor adjustments for the code generation
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/qtcpp/generator/qtcpp.py | 49 | ||||
-rw-r--r-- | examples/qtcpp/generator/templates/abstractinterface.cpp | 16 | ||||
-rw-r--r-- | examples/qtcpp/generator/templates/abstractinterface.h | 13 | ||||
-rw-r--r-- | examples/qtcpp/generator/templates/module.cpp | 5 | ||||
-rw-r--r-- | examples/qtcpp/generator/templates/module.h | 1 |
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 %} |