summaryrefslogtreecommitdiffstats
path: root/src/tools/ifcodegen/templates/backend_simulator/plugin.cpp.jinja
blob: 311938c5a3fc04d439a3dc8b93ea868600dde83f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
{#
# Copyright (C) 2021 The Qt Company Ltd.
# Copyright (C) 2019 Luxoft Sweden AB
# Copyright (C) 2018 Pelagicore AG
# Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#}
{% include "common/generated_comment.cpp.jinja" %}
{% set class = '{0}SimulatorPlugin'.format(module.module_name|upperfirst) %}

#include "{{class|lower}}.h"

#include <QStringList>
#include <QtInterfaceFramework/QIfSimulationEngine>

using namespace Qt::StringLiterals;

{{ module|begin_namespace }}

{% if module.tags.config.interfaceBuilder %}
extern {{class}}::InterfaceBuilder {{module.tags.config.interfaceBuilder}};
{% endif %}

/*!
   \class {{class}}
   \inmodule {{module}}

*/
/*! \internal */
{{class}}::{{class}}(QObject *parent)
    : QObject(parent)
    , m_simulationEngine(new QIfSimulationEngine(u"{{module.name|lower}}"_s, this))
{
#ifdef QT_STATICPLUGIN
    Q_INIT_RESOURCE({{module.module_name|lower}}_simulation);
#endif
{% if module.tags.config.interfaceBuilder %}
    QVector<QIfFeatureInterface *> interfacesList = {{module.tags.config.interfaceBuilder}}(this);
    Q_ASSERT(interfacesList.size() == interfaces().size());
{%   for interface in module.interfaces %}
    m_{{interface|lower}}Backend = static_cast<{{interface}}Backend*>(interfacesList.at({{loop.index0}}));
{%   endfor %}
{% else %}
    //Register the types for the SimulationEngine
    {{module.module_name|upperfirst}}::registerQmlTypes(u"{{module|qml_type}}.simulation"_s, {{module.majorVersion}}, {{module.minorVersion}});
{%   for interface in module.interfaces %}
    m_{{interface|lower}}Backend = new {{interface}}Backend(m_simulationEngine, this);
    m_simulationEngine->registerSimulationInstance(m_{{interface|lower}}Backend, "{{module|qml_type}}.simulation", {{module.majorVersion}}, {{module.minorVersion}}, "{{interface}}Backend");
{%   endfor %}
{% if module.tags.config_simulator and module.tags.config_simulator.simulationFile %}
{%   set simulationFile = module.tags.config_simulator.simulationFile %}
{% else %}
{%   set simulationFile = "qrc:///simulation/" + module.module_name|lower + '_simulation.qml' %}
{% endif %}
    m_simulationEngine->loadSimulationData(u":/simulation/{{module.module_name|lower}}_simulation_data.json"_s);
    m_simulationEngine->loadSimulation(QUrl(u"{{simulationFile}}"_s));
{% endif %}
}

/*! \internal */
QStringList {{class}}::interfaces() const
{
    QStringList list;
{% for iface in module.interfaces %}
{%   if loop.first %}    list{% endif %} << QStringLiteral({{module.module_name|upperfirst}}_{{iface}}_iid){% if loop.last %};{% endif %}
{% endfor %}

    return list;
}

/*! \internal */
QIfFeatureInterface *{{class}}::interfaceInstance(const QString &interface) const
{
{% for interface in module.interfaces %}
{%   if loop.first %}
    if (interface == QStringLiteral({{module.module_name|upperfirst}}_{{interface}}_iid))
{%   else %}
    else if (interface == QStringLiteral({{module.module_name|upperfirst}}_{{interface}}_iid))
{%   endif %}
        return m_{{interface|lower}}Backend;
{% endfor %}

    return nullptr;
}

QString {{class}}::id() const
{
{% if module.tags.config_simulator and module.tags.config_simulator.serviceObjectId %}
{%   set serviceObjectId = module.tags.config_simulator.serviceObjectId %}
{% else %}
{%   set serviceObjectId = "{0}_simulation".format(module.name) %}
{% endif %}
    return u"{{serviceObjectId}}"_s;
}

QString {{class}}::configurationId() const
{
{% if module.tags.config_simulator and module.tags.config_simulator.configurationId %}
{%   set configurationId = module.tags.config_simulator.configurationId %}
{% elif module.tags.config.configurationId %}
{%   set configurationId = module.tags.config.configurationId %}
{% else %}
{%   set configurationId = module.name %}
{% endif %}
    return u"{{configurationId}}"_s;
}

void {{class}}::updateServiceSettings(const QVariantMap &settings)
{
{% for interface in module.interfaces %}
    m_{{interface|lower}}Backend->updateServiceSettings(settings);
{% endfor %}
}

{{ module|end_namespace }}

#include "moc_{{class|lower}}.cpp"