From 1055287be93a74c25bd836f324458b663b08b303 Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Tue, 8 Oct 2019 13:50:59 +0200 Subject: ivigenerator: Properly support models in zoned interfaces A model inside a zoned interface produced code which doesn't compile. Change-Id: Ifb95d3e00810e723ed2cdb4516a645bcbb1167f0 Reviewed-by: Robert Griebl --- .../ivigenerator/common/backend_simulation.cpp.tpl | 10 +++++-- .../ivigenerator/common/backend_simulation.h.tpl | 2 +- .../common/pagingmodel_simulation.cpp.tpl | 5 ++++ .../common/pagingmodel_simulation.h.tpl | 5 ++++ .../ivigenerator/templates_test/pagingmodel.h.tpl | 5 ++++ .../ivigenerator/templates_test/tst_test.cpp.tpl | 34 +++++++++++++--------- .../ivigenerator/templates_test/tst_test.h.tpl | 14 +++++---- 7 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/tools/ivigenerator/common/backend_simulation.cpp.tpl b/src/tools/ivigenerator/common/backend_simulation.cpp.tpl index da7c3c6..7684b68 100644 --- a/src/tools/ivigenerator/common/backend_simulation.cpp.tpl +++ b/src/tools/ivigenerator/common/backend_simulation.cpp.tpl @@ -110,11 +110,15 @@ QT_BEGIN_NAMESPACE {% for property in interface.properties %} {% if not property.tags.config_simulator or not property.tags.config_simulator.zoned %} -{% if property.type.is_model %} +{% if property.type.is_model %} +{% if interface_zoned %} + auto {{ property }}Model = (new Zoned{{property|upperfirst}}ModelBackend(this)); +{% else %} auto {{ property }}Model = (new {{property|upperfirst}}ModelBackend(this)); +{% endif %} m_{{ property }} = {{ property }}Model; engine->registerSimulationInstance({{ property }}Model, "{{module|qml_type}}.simulation", {{module.majorVersion}}, {{module.minorVersion}}, "{{property|upperfirst}}ModelBackend"); -{% endif %} +{% endif %} {% endif %} {% endfor %} @@ -188,7 +192,7 @@ void {{class}}::addZone(const QString &zone) return zo->{{property|getter_name}}(); else qWarning() << "No such Zone"; - return {{type}}(); + return {{property|default_value}}; } {% else %} {{ivi.prop_getter(property, class, model_interface = true)}} diff --git a/src/tools/ivigenerator/common/backend_simulation.h.tpl b/src/tools/ivigenerator/common/backend_simulation.h.tpl index 7eece5a..73dbd5c 100644 --- a/src/tools/ivigenerator/common/backend_simulation.h.tpl +++ b/src/tools/ivigenerator/common/backend_simulation.h.tpl @@ -139,7 +139,7 @@ public: {% for property in interface.properties %} {% if interface_zoned %} -{% if property.type.is_model and model_interface %} +{% if property.type.is_model %} {% set type = 'QIviPagingModelInterface *' %} {% else %} {% set type = property|return_type %} diff --git a/src/tools/ivigenerator/common/pagingmodel_simulation.cpp.tpl b/src/tools/ivigenerator/common/pagingmodel_simulation.cpp.tpl index 3b5ad78..a6b222e 100644 --- a/src/tools/ivigenerator/common/pagingmodel_simulation.cpp.tpl +++ b/src/tools/ivigenerator/common/pagingmodel_simulation.cpp.tpl @@ -38,7 +38,12 @@ # # SPDX-License-Identifier: LGPL-3.0 #} +{% set interface_zoned = interface.tags.config and interface.tags.config.zoned %} +{% if interface_zoned %} +{% set class = 'Zoned{0}ModelBackend'.format(property|upperfirst) %} +{% else %} {% set class = '{0}ModelBackend'.format(property|upperfirst) %} +{% endif %} {{class}}::{{class}}(QObject* parent) : QIviPagingModelInterface(parent) diff --git a/src/tools/ivigenerator/common/pagingmodel_simulation.h.tpl b/src/tools/ivigenerator/common/pagingmodel_simulation.h.tpl index b67554f..ace6a72 100644 --- a/src/tools/ivigenerator/common/pagingmodel_simulation.h.tpl +++ b/src/tools/ivigenerator/common/pagingmodel_simulation.h.tpl @@ -38,7 +38,12 @@ # # SPDX-License-Identifier: LGPL-3.0 #} +{% set interface_zoned = interface.tags.config and interface.tags.config.zoned %} +{% if interface_zoned %} +{% set class = 'Zoned{0}ModelBackend'.format(property|upperfirst) %} +{% else %} {% set class = '{0}ModelBackend'.format(property|upperfirst) %} +{% endif %} #include #include "{{property.type.nested|lower}}.h" diff --git a/src/tools/ivigenerator/templates_test/pagingmodel.h.tpl b/src/tools/ivigenerator/templates_test/pagingmodel.h.tpl index e3d29ef..0e4bc11 100644 --- a/src/tools/ivigenerator/templates_test/pagingmodel.h.tpl +++ b/src/tools/ivigenerator/templates_test/pagingmodel.h.tpl @@ -38,7 +38,12 @@ # # SPDX-License-Identifier: LGPL-3.0 #} +{% set interface_zoned = interface.tags.config and interface.tags.config.zoned %} +{% if interface_zoned %} +{% set class = 'Zoned{0}Model'.format(property|upperfirst) %} +{% else %} {% set class = '{0}Model'.format(property|upperfirst) %} +{% endif %} #include "{{property.type.nested|lower}}.h" #include diff --git a/src/tools/ivigenerator/templates_test/tst_test.cpp.tpl b/src/tools/ivigenerator/templates_test/tst_test.cpp.tpl index f6834ea..d8bd0ee 100644 --- a/src/tools/ivigenerator/templates_test/tst_test.cpp.tpl +++ b/src/tools/ivigenerator/templates_test/tst_test.cpp.tpl @@ -40,6 +40,12 @@ {% import 'common/qtivi_macros.j2' as ivi %} {% include "common/generated_comment.cpp.tpl" %} {% set interface_zoned = interface.tags.config and interface.tags.config.zoned %} +{% set testModels = false %} +{% for property in interface.properties if not once %} +{% if property.type.is_model %} +{% set testModels = true %} +{% endif %} +{% endfor %} #include "tst_{{interface|lower}}.h" #include @@ -63,7 +69,11 @@ public: : {{interface}}BackendInterface() {% for property in interface.properties %} {% if property.type.is_model %} +{% if interface_zoned %} + , m_{{property}}(new Zoned{{property|upperfirst}}Model(this)) +{% else %} , m_{{property}}(new {{property|upperfirst}}Model(this)) +{% endif %} {% else %} , m_{{property}}({{property|default_type_value}}) {% endif %} @@ -472,29 +482,26 @@ void {{interface}}Test::testSignals() {% endfor %} } -{% set once = false %} -{% for property in interface.properties if not once %} -{% if property.type.is_model %} -{% set once = true %} +{% if testModels %} void {{interface}}Test::testModels() { {{interface}}TestServiceObject *service = new {{interface}}TestServiceObject(); manager->registerService(service, service->interfaces()); {{interface}} cc; -{% for property in interface.properties %} -{% if property.type.is_model %} +{% for property in interface.properties %} +{% if property.type.is_model %} //Test {{property}}Model without ServiceObject QCOMPARE(cc.{{property|getter_name}}(), nullptr); QSignalSpy {{property}}Spy(&cc, SIGNAL({{property}}Changed({{property|return_type}}))); -{% endif %} -{% endfor %} +{% endif %} +{% endfor %} cc.startAutoDiscovery(); QVERIFY(cc.isValid()); -{% for property in interface.properties %} -{% if property.type.is_model %} +{% for property in interface.properties %} +{% if property.type.is_model %} QCOMPARE({{property}}Spy.count(), 1); //Test {{property}}Model QIviPagingModel *{{property}} = cc.{{property|getter_name}}(); @@ -504,10 +511,9 @@ void {{interface}}Test::testModels() QVERIFY({{property}}->rowCount()); QCOMPARE({{property}}->at<{{property.type.nested}}>(0), {{property.type.nested|test_type_value}}); -{% endif %} -{% endfor %} +{% endif %} +{% endfor %} } -{% endif %} -{% endfor %} +{% endif %} #include "tst_{{interface|lower}}.moc" diff --git a/src/tools/ivigenerator/templates_test/tst_test.h.tpl b/src/tools/ivigenerator/templates_test/tst_test.h.tpl index 69d0443..cfd145f 100644 --- a/src/tools/ivigenerator/templates_test/tst_test.h.tpl +++ b/src/tools/ivigenerator/templates_test/tst_test.h.tpl @@ -39,6 +39,12 @@ #} {% include "common/generated_comment.cpp.tpl" %} {% set interface_zoned = interface.tags.config and interface.tags.config.zoned %} +{% set testModels = false %} +{% for property in interface.properties if not once %} +{% if property.type.is_model %} +{% set testModels = true %} +{% endif %} +{% endfor %} #include QT_FORWARD_DECLARE_CLASS(QIviServiceManager); @@ -61,13 +67,9 @@ private Q_SLOTS: void testChangeFromFrontend(); void testMethods(); void testSignals(); -{% set once = false %} -{% for property in interface.properties if not once %} -{% if property.type.is_model %} -{% set once = true %} +{% if testModels %} void testModels(); -{% endif %} -{% endfor %} +{% endif %} private: QIviServiceManager *manager; -- cgit v1.2.3