summaryrefslogtreecommitdiff
path: root/src/tools/ivigenerator/templates/common/qtivi_macros.j2
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/ivigenerator/templates/common/qtivi_macros.j2')
-rw-r--r--src/tools/ivigenerator/templates/common/qtivi_macros.j2237
1 files changed, 237 insertions, 0 deletions
diff --git a/src/tools/ivigenerator/templates/common/qtivi_macros.j2 b/src/tools/ivigenerator/templates/common/qtivi_macros.j2
new file mode 100644
index 0000000..be326b5
--- /dev/null
+++ b/src/tools/ivigenerator/templates/common/qtivi_macros.j2
@@ -0,0 +1,237 @@
+{#
+# Copyright (C) 2019 Luxoft Sweden AB
+# Copyright (C) 2018 Pelagicore AG
+# 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
+#}
+
+{# these macros can be used to generate content for QtIvi code. The macros
+# provide snippets that are commonly found in multiple templates and are not
+# too template specific.
+# Function macros do not generate the whole body of the function, but just
+# the header line, so remember to add potential virtuals, overrides,
+# semicolons etc. yourself!
+#}
+
+{# join operation parameters, with type and name, into a comma separated list,
+# optionally including the zone.
+#}
+{% macro join_params(operation, zoned = false, default_values = false) %}
+{% if default_values %}
+{% set params = operation.parameters|map('parameter_type_default')|join(', ') %}
+{% else %}
+{% set params = operation.parameters|map('parameter_type')|join(', ') %}
+{% endif %}
+{% if zoned %}
+{% if params|length %}
+{% set params = params + ', const QString &zone' %}
+{% else %}
+{% set params = 'const QString &zone' %}
+{% endif %}
+{% endif %}
+{{params}}
+{%- endmacro %}
+
+{# function header for a custom slot. pass the class parameter in order to add
+# the scope:: -specifier. use zoned to add the zone-specifier
+#}
+{% macro operation(operation, class = '', zoned = false) %}
+{% if class|count %}
+{% set scope = class+'::' %}
+{% else %}
+{% set scope = '' %}
+{% endif %}
+{% if operation.const %}
+{% set const = ' const' %}
+{% else%}
+{% set const = '' %}
+{% endif %}
+QIviPendingReply<{{operation|return_type}}> {{scope}}{{operation}}({{join_params(operation, zoned)}}){{const}}
+{%- endmacro %}
+
+
+{# property declaration, Q_PROPERTY(...) #}
+{% macro property(property, notify = true) %}
+{% if property.readonly or property.const or property.type.is_model %}
+{% set write = '' %}
+{% else %}
+{% set write = ' WRITE ' + property|setter_name %}
+{% endif %}
+{% if notify %}
+{% set _notify = ' NOTIFY ' + property.name + 'Changed' %}
+{% else %}
+{% set _notify = ''%}
+{% endif %}
+Q_PROPERTY({{property|return_type}} {{property}} READ {{property|getter_name}}{{write}}{{_notify}})
+{%- endmacro %}
+
+
+{# function header for a property setter: setProperty(...)
+# pass the class parameter in order to add the scope:: -specifier.
+# use zoned to add the zone-specifier
+#}
+{% macro prop_setter(property, class = '', zoned = false, model_interface = false, default_zone = false) %}
+{% if class|count %}
+{% set scope = class+'::' %}
+{% else %}
+{% set scope = '' %}
+{% endif %}
+{% if zoned %}
+{% if default_zone %}
+{% set zone = ', const QString &zone = QString()' %}
+{% else %}
+{% set zone = ', const QString &zone' %}
+{% endif %}
+{% else %}
+{% set zone = '' %}
+{% endif %}
+{% if property.type.is_model and model_interface %}
+{% set type = 'QIviPagingModelInterface *'+property.name %}
+{% else %}
+{% set type = property|parameter_type %}
+{% endif %}
+void {{scope}}{{property|setter_name}}({{type}}{{zone}})
+{%- endmacro %}
+
+
+{# function header for a property getter.
+# pass the class parameter in order to add the scope:: -specifier.
+#}
+{% macro prop_getter(property, class = '', model_interface = false) %}
+{% if class|count %}
+{% set scope = class+'::' %}
+{% else %}
+{% set scope = '' %}
+{% endif %}
+{% if property.type.is_model and model_interface %}
+{% set type = 'QIviPagingModelInterface *' %}
+{% else %}
+{% set type = property|return_type %}
+{% endif %}
+{{type}} {{scope}}{{property|getter_name}}() const
+{%- endmacro %}
+
+
+{# helper macro for defining a property notifier and a corresponding callback.
+# This is an internal function and not intended to be used inside a template.
+#}
+{% macro _prop_notify(property, class, zoned, prefix, model_interface, default_values = false) %}
+{% if prefix|count %}
+{% set prop = prefix + property|upperfirst %}
+{% else %}
+{% set prop = property %}
+{% endif %}
+{% if class|count %}
+{% set scope = class+'::' %}
+{% else %}
+{% set scope = '' %}
+{% endif %}
+{% if zoned %}
+{% if default_values %}
+{% set zone = ', const QString &zone=QString()' %}
+{% else %}
+{% set zone = ', const QString &zone' %}
+{% endif %}
+{% else %}
+{% set zone = '' %}
+{% endif %}
+{% if property.type.is_model and model_interface %}
+{% set type = 'QIviPagingModelInterface *'+property.name %}
+{% set default_value = type + '=nullptr'%}
+{% else %}
+{% set type = property|parameter_type %}
+{% set default_value = property|parameter_type_default %}
+{% endif %}
+{% if default_values %}
+{% set type = default_value %}
+{% endif %}
+void {{scope}}{{prop}}Changed({{type}}{{zone}})
+{%- endmacro %}
+
+{# signal declaration for property notifier.
+# pass the class parameter in order to add the scope:: -specifier.
+# use zoned to add the zone-specifier
+#}
+{% macro prop_notify(property, class = '', zoned = false, model_interface = false, default_values = false) %}
+{{_prop_notify(property, class, zoned, '', model_interface, default_values)}}
+{%- endmacro %}
+
+{# callback slot declaration for property notifier.
+# pass the class parameter in order to add the scope:: -specifier.
+# use zoned to add the zone-specifier
+#}
+{% macro on_prop_changed(property, class = '', zoned = false, model_interface = false) %}
+{{_prop_notify(property, class, zoned, 'on', model_interface)}}
+{%- endmacro %}
+
+
+{# helper macro for defining a signal and a corresponding callback.
+# This is an internal function and not intended to be used inside a template.
+#}
+{% macro _signal(signal, class, zoned, prefix, default_values = false) %}
+{% if prefix|count %}
+{% set sig = prefix + signal|upperfirst %}
+{% else %}
+{% set sig = signal %}
+{% endif %}
+{% if class|count %}
+{% set scope = class+'::' %}
+{% else %}
+{% set scope = '' %}
+{% endif %}
+void {{scope}}{{sig}}({{join_params(signal, zoned, default_values)}})
+{%- endmacro %}
+
+{# custom signal declaration
+# pass the class parameter in order to add the scope:: -specifier.
+# use zoned to add the zone-specifier
+#}
+{% macro signal(signal, class = '', zoned = false) %}
+{{_signal(signal, class, zoned, '')}}
+{%- endmacro %}
+
+{# custom signal callback declaration
+# pass the class parameter in order to add the scope:: -specifier.
+# use zoned to add the zone-specifier
+#}
+{% macro on_signal(signal, class = '', zoned = false) %}
+{{_signal(signal, class, zoned, 'on')}}
+{%- endmacro %}
+
+
+{% macro format_comments(comments) -%}
+{{comments|comment_text|join('\n ')}}
+{% endmacro -%}