summaryrefslogtreecommitdiffstats
path: root/src/tools/ifcodegen/templates/frontend/module.h.jinja
blob: ea43b5e74629ea1f0cb04357bad5adcfd07b0a2d (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
{#
# Copyright (C) 2021 The Qt Company Ltd.
# Copyright (C) 2019 Luxoft Sweden AB
# Copyright (C) 2018 Pelagicore AG
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#}
{% set exportsymbol = 'Q_{0}_EXPORT'.format(module|upper|replace('.', '_')) %}
{% set class = '{0}'.format(module.module_name|upperfirst) %}
{% set oncedefine = '{0}_H_'.format(class|upper) %}
{% include 'common/generated_comment.cpp.jinja' %}

#ifndef {{oncedefine}}
#define {{oncedefine}}

{% if module.tags.config.module %}
#include <{{module.tags.config.module}}/{{module.module_name|lower}}global.h>
{% else %}
#include "{{module.module_name|lower}}global.h"
{% endif %}

{% for import in module.imports %}
{# All imports are provided including their imported version e.g. "Common 1.0". Because we need
   to access the Module type, we first need to split the version and then search for the name.
   See https://github.com/Pelagicore/qface/issues/87
#}
{%   set name = import.split(' ')[0] %}
{%   for mod in system.modules %}
{%     if mod.name == name %}
#include <{{mod.module_name|lower}}.h>
{%     endif %}
{%   endfor %}
{% endfor %}

#include <QtCore/QObject>
#include <QtInterfaceFramework/QIfPendingReply>

{{ module|begin_namespace }}

class {{exportsymbol}} {{class}} : public QObject
{
    Q_OBJECT

public:
    {{class}}(QObject *parent=nullptr);

{% for enum in module.enums %}
    enum {{enum}} {
        {% for member in enum.members %}
        {{member.name}} = {{member.value}},
        {% endfor %}
    };
{% if enum.is_flag %}
    Q_DECLARE_FLAGS({{enum|flag_type}}, {{enum}})
    Q_FLAG({{enum|flag_type}})
{% else %}
    Q_ENUM({{enum}})
{% endif %}
    static {{enum|flag_type}} to{{enum|flag_type}}(quint32 v, bool *ok);
{% endfor %}

    static void registerTypes();
    static void registerQmlTypes(const QString& uri = QStringLiteral("{{module|qml_type}}"), int majorVersion = {{module.majorVersion}}, int minorVersion = {{module.minorVersion}});
};

{% for enum in module.enums %}
{{exportsymbol}} QDataStream &operator<<(QDataStream &out, {{class}}::{{enum|flag_type}} var);
{{exportsymbol}} QDataStream &operator>>(QDataStream &in, {{class}}::{{enum|flag_type}} &var);
{% endfor %}

{% for enum in module.enums %}
QIF_DECLARE_PENDINGREPLY_WITH_NAME({{enum}}, {{class}}::{{enum|flag_type}})
{% endfor %}

{{ module|end_namespace }}

#endif // {{oncedefine}}