aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/tools/ivigenerator/templates_control_panel/module.cpp.tpl30
-rw-r--r--src/tools/ivigenerator/templates_control_panel/module.h.tpl2
-rw-r--r--src/tools/ivigenerator/templates_frontend/module.cpp.tpl35
-rw-r--r--src/tools/ivigenerator/templates_frontend/module.h.tpl2
-rw-r--r--src/tools/ivigenerator/templates_frontend/struct.cpp.tpl31
-rw-r--r--src/tools/ivigenerator/templates_frontend/struct.h.tpl10
6 files changed, 99 insertions, 11 deletions
diff --git a/src/tools/ivigenerator/templates_control_panel/module.cpp.tpl b/src/tools/ivigenerator/templates_control_panel/module.cpp.tpl
index 66978f9..6659acb 100644
--- a/src/tools/ivigenerator/templates_control_panel/module.cpp.tpl
+++ b/src/tools/ivigenerator/templates_control_panel/module.cpp.tpl
@@ -68,6 +68,24 @@ QObject* {{class|lower}}_singletontype_provider(QQmlEngine*, QJSEngine*)
{
}
+{% for enum in module.enums %}
+{{class}}::{{enum}} {{class}}::to{{enum}}(quint8 v, bool *ok) {
+ if (ok) {
+ *ok = true;
+ }
+ switch (v) {
+{% for member in enum.members %}
+ case {{member.value}}: return {{member.name}};
+{% endfor %}
+ default:
+ if (ok) {
+ *ok = false;
+ }
+ return {{enum.members|first}};
+ }
+}
+{% endfor %}
+
/*! \internal */
void {{class}}::registerTypes()
{
@@ -109,14 +127,18 @@ QSimulatorServer *{{class}}::simulationServer()
{% for enum in module.enums %}
QDataStream &operator<<(QDataStream &out, {{class}}::{{enum|flag_type}} var)
{
- out << (int)var;
+ out << (quint8)var;
return out;
}
QDataStream &operator>>(QDataStream &in, {{class}}::{{enum|flag_type}} &var)
{
- int temp;
- in >> temp;
- var = ({{class}}::{{enum|flag_type}})temp;
+ bool ok;
+ quint8 val;
+ in >> val;
+ var = {{class}}::to{{enum}}(val, &ok);
+ if (!ok) {
+ qWarning() << "Received an invalid enum value for type {{class}}::{{enum|flag_type}}, value =" << var;
+ }
return in;
}
{% endfor %}
diff --git a/src/tools/ivigenerator/templates_control_panel/module.h.tpl b/src/tools/ivigenerator/templates_control_panel/module.h.tpl
index bd23ccc..15f81f2 100644
--- a/src/tools/ivigenerator/templates_control_panel/module.h.tpl
+++ b/src/tools/ivigenerator/templates_control_panel/module.h.tpl
@@ -68,7 +68,7 @@ public:
{% else %}
Q_ENUM({{enum}})
{% endif %}
-
+ static {{enum}} to{{enum}}(quint8 v, bool *ok);
{% endfor %}
static void registerTypes();
diff --git a/src/tools/ivigenerator/templates_frontend/module.cpp.tpl b/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
index 2ce7b9b..2a2d7b9 100644
--- a/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
+++ b/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
@@ -46,6 +46,7 @@
#include "{{interface|lower}}.h"
{% endfor %}
#include <QQmlEngine>
+#include <QDebug>
#include <QDataStream>
QT_BEGIN_NAMESPACE
@@ -79,6 +80,24 @@ QObject* {{class|lower}}_singletontype_provider(QQmlEngine*, QJSEngine*)
{
}
+{% for enum in module.enums %}
+{{class}}::{{enum}} {{class}}::to{{enum}}(quint8 v, bool *ok) {
+ if (ok) {
+ *ok = true;
+ }
+ switch (v) {
+{% for member in enum.members %}
+ case {{member.value}}: return {{member.name}};
+{% endfor %}
+ default:
+ if (ok) {
+ *ok = false;
+ }
+ return {{enum.members|first}};
+ }
+}
+
+{% endfor %}
/*! \internal */
void {{class}}::registerTypes()
{
@@ -88,6 +107,7 @@ void {{class}}::registerTypes()
{% endfor %}
{% for struct in module.structs %}
qRegisterMetaType<{{struct}}>();
+ qRegisterMetaTypeStreamOperators<{{struct}}>();
{% endfor %}
}
@@ -101,18 +121,23 @@ void {{class}}::registerQmlTypes(const QString& uri, int majorVersion, int minor
{{interface}}::registerQmlTypes(uri, majorVersion, minorVersion);
{% endfor %}
}
-
{% for enum in module.enums %}
+
QDataStream &operator<<(QDataStream &out, {{class}}::{{enum|flag_type}} var)
{
- out << (int)var;
+ out << (quint8)var;
return out;
}
+
QDataStream &operator>>(QDataStream &in, {{class}}::{{enum|flag_type}} &var)
{
- int temp;
- in >> temp;
- var = ({{class}}::{{enum|flag_type}})temp;
+ bool ok;
+ quint8 val;
+ in >> val;
+ var = {{class}}::to{{enum}}(val, &ok);
+ if (!ok) {
+ qWarning() << "Received an invalid enum value for type {{class}}::{{enum|flag_type}}, value =" << var;
+ }
return in;
}
{% endfor %}
diff --git a/src/tools/ivigenerator/templates_frontend/module.h.tpl b/src/tools/ivigenerator/templates_frontend/module.h.tpl
index 6520091..7869ea5 100644
--- a/src/tools/ivigenerator/templates_frontend/module.h.tpl
+++ b/src/tools/ivigenerator/templates_frontend/module.h.tpl
@@ -71,7 +71,7 @@ public:
{% else %}
Q_ENUM({{enum}})
{% endif %}
-
+ static {{enum}} to{{enum}}(quint8 v, bool *ok);
{% endfor %}
static void registerTypes();
diff --git a/src/tools/ivigenerator/templates_frontend/struct.cpp.tpl b/src/tools/ivigenerator/templates_frontend/struct.cpp.tpl
index d1134a4..ca0c7f8 100644
--- a/src/tools/ivigenerator/templates_frontend/struct.cpp.tpl
+++ b/src/tools/ivigenerator/templates_frontend/struct.cpp.tpl
@@ -93,4 +93,35 @@ void {{class}}::set{{field|upperfirst}}({{ field|parameter_type }})
{% endfor %}
+bool operator==(const {{class}} &left, const {{class}} &right) Q_DECL_NOTHROW
+{
+ return (
+{% for field in struct.fields %}
+ left.{{field}}() == right.{{field}}() {% if not loop.last %}&&{% endif %}
+
+{% endfor %}
+ );
+}
+
+bool operator!=(const {{class}} &left, const {{class}} &right) Q_DECL_NOTHROW
+{
+ return !(left == right);
+}
+
+QDataStream &operator<<(QDataStream &stream, const {{class}} &obj)
+{
+{% for field in struct.fields %}
+ stream << obj.{{field}}();
+{% endfor %}
+ return stream;
+}
+
+QDataStream &operator>>(QDataStream &stream, {{class}} &obj)
+{
+{% for field in struct.fields %}
+ stream >> obj.m_{{field}};
+{% endfor %}
+ return stream;
+}
+
QT_END_NAMESPACE
diff --git a/src/tools/ivigenerator/templates_frontend/struct.h.tpl b/src/tools/ivigenerator/templates_frontend/struct.h.tpl
index 84b8c4f..0438a87 100644
--- a/src/tools/ivigenerator/templates_frontend/struct.h.tpl
+++ b/src/tools/ivigenerator/templates_frontend/struct.h.tpl
@@ -47,6 +47,7 @@
#include "{{module.module_name|lower}}module.h"
#include <QObject>
+#include <QDataStream>
QT_BEGIN_NAMESPACE
@@ -69,12 +70,21 @@ public:
{% endif %}
{% endfor %}
+
private:
{% for field in struct.fields %}
{{field|return_type}} m_{{field}};
{% endfor %}
+
+ friend QDataStream &operator>>(QDataStream &stream, {{class}} &obj);
};
+bool operator==(const {{class}} &left, const {{class}} &right) Q_DECL_NOTHROW;
+bool operator!=(const {{class}} &left, const {{class}} &right) Q_DECL_NOTHROW;
+
+QDataStream &operator<<(QDataStream &stream, const {{class}} &obj);
+QDataStream &operator>>(QDataStream &stream, {{class}} &obj);
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE({{class}})