aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2019-10-08 13:50:59 +0200
committerDominik Holland <dominik.holland@qt.io>2019-10-15 10:36:02 +0200
commit1055287be93a74c25bd836f324458b663b08b303 (patch)
treef1c791546209a7bc61ac53c10d54e8c950498393
parent5df2a2943d280832af05f1d3e9c30976470a6e6a (diff)
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 <robert.griebl@qt.io>
-rw-r--r--src/tools/ivigenerator/common/backend_simulation.cpp.tpl10
-rw-r--r--src/tools/ivigenerator/common/backend_simulation.h.tpl2
-rw-r--r--src/tools/ivigenerator/common/pagingmodel_simulation.cpp.tpl5
-rw-r--r--src/tools/ivigenerator/common/pagingmodel_simulation.h.tpl5
-rw-r--r--src/tools/ivigenerator/templates_test/pagingmodel.h.tpl5
-rw-r--r--src/tools/ivigenerator/templates_test/tst_test.cpp.tpl34
-rw-r--r--src/tools/ivigenerator/templates_test/tst_test.h.tpl14
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 <QIviPagingModelInterface>
#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 <QtDebug>
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 <QtIviCore/QIviServiceManager>
@@ -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 <QtTest>
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;