summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2019-02-04 15:14:54 +0100
committerDominik Holland <dominik.holland@pelagicore.com>2019-02-15 10:51:37 +0000
commit01e566e61a45561cff7d800ae310406c1792e494 (patch)
tree44797d9b05ecc70767e9408588e4a6fdc20a8470
parent4c3c3a1f6f19d3f17bb4b046a7b7b2c419fd548f (diff)
downloadqtivi-01e566e61a45561cff7d800ae310406c1792e494.tar.gz
ivigenerator: Add the generation of a qmltypes for the simulation API
Similar to the frontend QML API, this adds the generation of a qmltypes file for the simulation API, which can be used in the simulation engine. Because QtCreator cannot handle the same import uris in different folder we always need to generate the frontend qmltypes together with the simulation qmltypes in one combined folder structure. For now the qmltypes are moved into the common folder and generated in the frontend and the backend_simulator template to make it easier to include them. Later the same files can be used for the qml_plugin generator. Task-number: AUTOSUITE-743 Change-Id: I49aecf4d158fc46dbc1eac80c707194440c5763f Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r--examples/ivicore/qface-ivi-addressbook/backend_simulator/backend_simulator.pro2
-rw-r--r--src/plugins/ivivehiclefunctions/ivivehiclefunctions.pro2
-rw-r--r--src/tools/ivigenerator/common/plugins.qmltypes.tpl (renamed from src/tools/ivigenerator/templates_frontend/plugins.qmltypes.tpl)0
-rw-r--r--src/tools/ivigenerator/common/qmldir.tpl (renamed from src/tools/ivigenerator/templates_frontend/qmldir.tpl)0
-rw-r--r--src/tools/ivigenerator/common/simulation.qmltypes.tpl255
-rw-r--r--src/tools/ivigenerator/ivigenerator.pro9
-rw-r--r--src/tools/ivigenerator/templates_backend_simulator.yaml8
7 files changed, 272 insertions, 4 deletions
diff --git a/examples/ivicore/qface-ivi-addressbook/backend_simulator/backend_simulator.pro b/examples/ivicore/qface-ivi-addressbook/backend_simulator/backend_simulator.pro
index a65f7d5..c1cc0e1 100644
--- a/examples/ivicore/qface-ivi-addressbook/backend_simulator/backend_simulator.pro
+++ b/examples/ivicore/qface-ivi-addressbook/backend_simulator/backend_simulator.pro
@@ -23,3 +23,5 @@ INSTALLS += target
#! [0]
RESOURCES += plugin_resource.qrc
#! [0]
+
+QML_IMPORT_PATH = $$OUT_PWD/qml
diff --git a/src/plugins/ivivehiclefunctions/ivivehiclefunctions.pro b/src/plugins/ivivehiclefunctions/ivivehiclefunctions.pro
index c2f3ff3..400191c 100644
--- a/src/plugins/ivivehiclefunctions/ivivehiclefunctions.pro
+++ b/src/plugins/ivivehiclefunctions/ivivehiclefunctions.pro
@@ -21,3 +21,5 @@ load(qt_plugin)
RESOURCES += \
qml.qrc
+
+QML_IMPORT_PATH = $$OUT_PWD/qml
diff --git a/src/tools/ivigenerator/templates_frontend/plugins.qmltypes.tpl b/src/tools/ivigenerator/common/plugins.qmltypes.tpl
index cbe086c..cbe086c 100644
--- a/src/tools/ivigenerator/templates_frontend/plugins.qmltypes.tpl
+++ b/src/tools/ivigenerator/common/plugins.qmltypes.tpl
diff --git a/src/tools/ivigenerator/templates_frontend/qmldir.tpl b/src/tools/ivigenerator/common/qmldir.tpl
index 4ed2cd6..4ed2cd6 100644
--- a/src/tools/ivigenerator/templates_frontend/qmldir.tpl
+++ b/src/tools/ivigenerator/common/qmldir.tpl
diff --git a/src/tools/ivigenerator/common/simulation.qmltypes.tpl b/src/tools/ivigenerator/common/simulation.qmltypes.tpl
new file mode 100644
index 0000000..4ad2f34
--- /dev/null
+++ b/src/tools/ivigenerator/common/simulation.qmltypes.tpl
@@ -0,0 +1,255 @@
+{#
+# Copyright (C) 2019 Luxoft Sweden AB
+# Contact: https://www.qt.io/licensing/
+#
+# This file is part of the QtIvi module of the Qt Toolkit.
+#
+# $QT_BEGIN_LICENSE:LGPL-QTAS$
+# Commercial License Usage
+# Licensees holding valid commercial Qt Automotive Suite licenses may use
+# this file in accordance with the commercial license agreement provided
+# with the Software or, alternatively, in accordance with the terms
+# contained in a written agreement between you and The Qt Company. For
+# licensing terms and conditions see https://www.qt.io/terms-conditions.
+# For further information use the contact form at https://www.qt.io/contact-us.
+#
+# GNU Lesser General Public License Usage
+# Alternatively, this file may be used under the terms of the GNU Lesser
+# General Public License version 3 as published by the Free Software
+# Foundation and appearing in the file LICENSE.LGPL3 included in the
+# packaging of this file. Please review the following information to
+# ensure the GNU Lesser General Public License version 3 requirements
+# will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+#
+# GNU General Public License Usage
+# Alternatively, this file may be used under the terms of the GNU
+# General Public License version 2.0 or (at your option) the GNU General
+# Public license version 3 or any later version approved by the KDE Free
+# Qt Foundation. The licenses are as published by the Free Software
+# Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+# included in the packaging of this file. Please review the following
+# information to ensure the GNU General Public License requirements will
+# be met: https://www.gnu.org/licenses/gpl-2.0.html and
+# https://www.gnu.org/licenses/gpl-3.0.html.
+#
+# $QT_END_LICENSE$
+#
+# SPDX-License-Identifier: LGPL-3.0
+#}
+{% import 'qtivi_macros.j2' as ivi %}
+{% set module_qml_name = (module|qml_type).split('.')[-1]|upperfirst %}
+import QtQuick.tooling 1.2
+
+// This file describes the plugin-supplied types contained in the library.
+// It is used for QML tooling purposes only.
+//
+// This file was auto-generated with the QtIvi ivigenerator
+
+Module {
+ dependencies: ["QtIvi 1.0"]
+ Component {
+ name: "IviSimulator"
+ prototype: "QIviSimulationGlobalObject"
+ exports: ["{{module|qml_type}}.simulation/IviSimulator {{module.majorVersion}}.{{module.minorVersion}}"]
+ isCreatable: false
+ isSingleton: true
+
+ Property { name: "simulationData"; type: "QVariantMap" }
+ Method {
+ name: "findData"
+ type: "QVariantMap"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "interface"; type: "string" }
+ }
+ Method {
+ name: "initializeDefault"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "object"; type: "QObject"; isPointer: true }
+ }
+ Method {
+ name: "defaultValue"
+ type: "QVariant"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "zone"; type: "string" }
+ }
+ Method {
+ name: "constraint"
+ type: "string"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "value"; type: "QVariant" }
+ }
+ Method {
+ name: "checkSettings"
+ type: "bool"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "value"; type: "QVariant" }
+ Parameter { name: "zone"; type: "string" }
+ }
+ Method {
+ name: "parseDomainValue"
+ type: "QVariant"
+ Parameter { name: "data"; type: "QVariantMap" }
+ Parameter { name: "domain"; type: "string" }
+ Parameter { name: "zone"; type: "string" }
+ }
+ }
+
+{% for interface in module.interfaces %}
+{% for property in interface.properties %}
+{% if property.type.is_model %}
+ Component {
+ name: "{{property|upperfirst}}ModelBackend"
+ prototype: "{{property|upperfirst}}ModelBackendInterface"
+ exports: ["{{module|qml_type}}.simulation/{{property|upperfirst}}ModelBackend {{module.majorVersion}}.{{module.minorVersion}}"]
+
+ Property { name: "Base"; type: "{{property|upperfirst}}ModelBackend"; isPointer: true }
+
+ Method { name: "initialize" }
+ Method {
+ name: "registerInstance"
+ Parameter { name: "identifier"; type: "QUuid" }
+ }
+ Method {
+ name: "unregisterInstance"
+ Parameter { name: "identifier"; type: "QUuid" }
+ }
+ Method {
+ name: "fetchData"
+ Parameter { name: "identifier"; type: "QUuid" }
+ Parameter { name: "start"; type: "int" }
+ Parameter { name: "count"; type: "int" }
+ }
+ Method {
+ name: "insert"
+ Parameter { name: "index"; type: "int" }
+ Parameter { name: "item"; type: "{{property.type.nested}}" }
+ }
+ Method {
+ name: "remove"
+ Parameter { name: "index"; type: "int" }
+ }
+ Method {
+ name: "move"
+ Parameter { name: "currentIndex"; type: "int" }
+ Parameter { name: "newIndex"; type: "int" }
+ }
+ Method { name: "reset" }
+ Method {
+ name: "update"
+ Parameter { name: "index"; type: "int" }
+ Parameter { name: "item"; type: "{{property.type.nested}}" }
+ }
+ Method {
+ name: "at"
+ type: "{{property.type.nested}}"
+ Parameter { name: "index"; type: "int" }
+ }
+ }
+
+{% endif %}
+{% endfor %}
+{% set class = interface %}
+{% set interface_zoned = interface.tags.config and interface.tags.config.zoned %}
+{% if interface_zoned %}
+ Component {
+ name: "{{class}}Zone"
+ prototype: "{{class}}Zone"
+ isCreatable: false
+ exports: ["{{module|qml_type}}.simulation/{{class}}Zone {{module.majorVersion}}.{{module.minorVersion}}"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "zones"; type: "QQmlPropertyMap"; isPointer: true }
+{% for property in interface.properties %}
+ Property { name: "{{property}}" {% if property.type.is_model %}; type: "{{property|upperfirst}}ModelBackend"; isPointer: true {% else %} ; type: "{{property|qml_info_type}}" {% endif %} }
+{% endfor %}
+{% for property in interface.properties %}
+ Signal {
+ name: "{{property}}Changed"
+ Parameter { name: "{{property}}" {% if property.type.is_model %}; type: "{{property|upperfirst}}ModelBackend"; isPointer: true {% else %} ; type: "{{property|qml_info_type}}" {% endif %} }
+ }
+{% endfor %}
+{% for property in interface.properties %}
+ Method {
+ name: "{{property|setter_name}}"
+ Parameter { name: "{{property}}" {% if property.type.is_model %}; type: "{{property|upperfirst}}ModelBackend"; isPointer: true {% else %} ; type: "{{property|qml_info_type}}" {% endif %} }
+ }
+{% endfor %}
+ }
+{% endif %}
+ Component {
+ name: "{{class}}Backend"
+ prototype: "{{class}}BackendInterface"
+ exports: ["{{module|qml_type}}.simulation/{{class}}Backend {{module.majorVersion}}.{{module.minorVersion}}"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "Base"; type: "{{class}}Backend"; isPointer: true }
+{% for property in interface.properties %}
+ Property { name: "{{property}}" {% if property.type.is_model %}; type: "{{property|upperfirst}}ModelBackend"; isPointer: true {% else %} ; type: "{{property|qml_info_type}}" {% endif %} }
+{% endfor %}
+{% for property in interface.properties %}
+ Signal {
+ name: "{{property}}Changed"
+ Parameter { name: "{{property}}"; type: "{{property|qml_info_type}}" }
+ }
+{% endfor %}
+{% for signal in interface.signals %}
+ Signal {
+ name: "{{signal}}"
+{% for parameter in signal.parameters %}
+ Parameter { name: "{{parameter}}"; type: "{{parameter|qml_info_type}}" }
+{% endfor %}
+ }
+{% endfor %}
+ Method { name: "initialize" }
+{% for operation in interface.operations %}
+ Method {
+ name: "{{operation}}"
+{# TODO: Once QtCreator can also provide the completion for return types we need to reevaluate this #}
+ type: "QIviPendingReply<{{operation|return_type}}>"
+{% for parameter in operation.parameters %}
+ Parameter { name: "{{parameter}}"; type: "{{parameter|qml_info_type}}" }
+{% endfor %}
+ }
+{% endfor %}
+{% for property in interface.properties %}
+ Method {
+ name: "{{property|setter_name}}"
+ Parameter { name: "{{property}}"; type: "{{property|qml_info_type}}" }
+ }
+{% endfor %}
+ }
+{% endfor %}
+
+ Component {
+ name: "{{module.module_name|upperfirst}}Module"
+ prototype: "QObject"
+ exports: ["{{module|qml_type}}.simulation/{{module_qml_name}} {{module.majorVersion}}.{{module.minorVersion}}"]
+ isCreatable: false
+ isSingleton: true
+ exportMetaObjectRevisions: [0]
+{% for enum in module.enums %}
+ Enum {
+ name: "{{enum|flag_type}}"
+ values: {
+{% for member in enum.members %}
+ "{{member.name}}": {{member.value}}{% if not loop.last %},{% endif %}
+
+{% endfor %}
+ }
+ }
+{% endfor %}
+{% for struct in module.structs %}
+ Method {
+ name: "{{struct|lowerfirst}}"
+ type: "{{struct}}"
+{% for fields in struct.fields %}
+ Parameter { name: "{{fields}}"; type: "{{fields|qml_info_type}}" }
+{% endfor %}
+ }
+{% endfor %}
+{% for struct in module.structs %}
+ Method {
+ name: "{{struct|lowerfirst}}"
+ type: "{{struct}}"
+ }
+{% endfor %}
+ }
+}
diff --git a/src/tools/ivigenerator/ivigenerator.pro b/src/tools/ivigenerator/ivigenerator.pro
index cfd64cc..02afe56 100644
--- a/src/tools/ivigenerator/ivigenerator.pro
+++ b/src/tools/ivigenerator/ivigenerator.pro
@@ -13,7 +13,10 @@ CONFIG -= debug_and_release
common.files += \
common/generated_comment.cpp.tpl \
- common/qtivi_macros.j2
+ common/qtivi_macros.j2 \
+ common/simulation.qmltypes.tpl \
+ common/plugins.qmltypes.tpl \
+ common/qmldir.tpl
common.path = $$[QT_HOST_BINS]/ivigenerator/common
templates_frontend.files += \
@@ -30,9 +33,7 @@ templates_frontend.files += \
templates_frontend/modulefactory.cpp.tpl \
templates_frontend/modulefactory.h.tpl \
templates_frontend/struct.cpp.tpl \
- templates_frontend/struct.h.tpl \
- templates_frontend/plugins.qmltypes.tpl \
- templates_frontend/qmldir.tpl
+ templates_frontend/struct.h.tpl
templates_frontend.path = $$[QT_HOST_BINS]/ivigenerator/templates_frontend
templates_backend_simulator.files += \
diff --git a/src/tools/ivigenerator/templates_backend_simulator.yaml b/src/tools/ivigenerator/templates_backend_simulator.yaml
index f9749d5..c93f586 100644
--- a/src/tools/ivigenerator/templates_backend_simulator.yaml
+++ b/src/tools/ivigenerator/templates_backend_simulator.yaml
@@ -14,6 +14,14 @@ generate_rules:
template_file: "data.qrc.tpl"
- dest_file: "{{srcBase|lower}}.pri"
template_file: "plugin.pri.tpl"
+ - dest_file: "qml/{{module|qml_type|replace('.', '/')}}/simulation/plugins.qmltypes"
+ template_file: "simulation.qmltypes.tpl"
+ - dest_file: "qml/{{module|qml_type|replace('.', '/')}}/simulation/qmldir"
+ template_file: "qmldir.tpl"
+ - dest_file: "qml/{{module|qml_type|replace('.', '/')}}/plugins.qmltypes"
+ template_file: "plugins.qmltypes.tpl"
+ - dest_file: "qml/{{module|qml_type|replace('.', '/')}}/qmldir"
+ template_file: "qmldir.tpl"
interface_rules:
- dest_file: '{{interface|lower}}backend.h'
template_file: 'backend.h.tpl'