summaryrefslogtreecommitdiffstats
path: root/mobile-widgets
diff options
context:
space:
mode:
Diffstat (limited to 'mobile-widgets')
-rw-r--r--mobile-widgets/CMakeLists.txt1
-rw-r--r--mobile-widgets/qmlinterface.cpp21
-rw-r--r--mobile-widgets/qmlinterface.h95
3 files changed, 117 insertions, 0 deletions
diff --git a/mobile-widgets/CMakeLists.txt b/mobile-widgets/CMakeLists.txt
index 1eecb7d3b..6c1747dbc 100644
--- a/mobile-widgets/CMakeLists.txt
+++ b/mobile-widgets/CMakeLists.txt
@@ -1,6 +1,7 @@
# mobile backend functions
set(SUBSURFACE_MOBILE_SRCS
+ qmlinterface.cpp
qmlmanager.cpp
qml/kirigami/src/columnview.cpp
qml/kirigami/src/delegaterecycler.cpp
diff --git a/mobile-widgets/qmlinterface.cpp b/mobile-widgets/qmlinterface.cpp
new file mode 100644
index 000000000..78aba6a5c
--- /dev/null
+++ b/mobile-widgets/qmlinterface.cpp
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "qmlinterface.h"
+
+#include <QQmlEngine>
+
+QMLInterface *QMLInterface::instance()
+{
+ static QMLInterface *self = new QMLInterface;
+ return self;
+}
+
+void QMLInterface::setup(QQmlContext *ct)
+{
+ // Register interface class
+ ct->setContextProperty("Backend", QMLInterface::instance());
+
+ // Make enums available as types
+ qmlRegisterUncreatableType<QMLInterface>("org.subsurfacedivelog.mobile",1,0,"Enums","Enum is not a type");
+
+ // relink signals to QML
+}
diff --git a/mobile-widgets/qmlinterface.h b/mobile-widgets/qmlinterface.h
new file mode 100644
index 000000000..59981e0d1
--- /dev/null
+++ b/mobile-widgets/qmlinterface.h
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef QMLINTERFACE_H
+#define QMLINTERFACE_H
+#include <QObject>
+#include <QQmlContext>
+// This class is a pure interface class and may not contain any implementation code
+// Allowed are:
+// header
+// Q_PROPERTY
+// signal/slot for Q_PROPERTY functions
+// the functions may contain either
+// a) a function call to the implementation
+// b) a reference to a global variable like e.g. prefs.
+// Q_INVOCABLE functions
+// the functions may contain
+// a) a function call to the implementation
+// source
+// connect signal/signal to pass signals from implementation
+
+
+class QMLInterface : public QObject {
+ Q_OBJECT
+
+ // Q_PROPERTY used in QML
+
+public:
+ static QMLInterface *instance();
+
+ // function to do the needed setup and do connect of signal/signal
+ static void setup(QQmlContext *ct);
+
+ // Duplicated enums, these enums are properly defined in the C/C++ structure
+ // but duplicated here to make them available to QML.
+
+ // Duplicating the enums poses a slight risk for forgetting to update
+ // them if the proper enum is changed (e.g. assigning a new start value).
+
+ // remark please do not use these enums outside the C++/QML interface.
+ enum UNIT_SYSTEM {
+ METRIC,
+ IMPERIAL,
+ PERSONALIZE
+ };
+ Q_ENUM(UNIT_SYSTEM);
+
+ enum LENGTH {
+ METERS,
+ FEET
+ };
+ Q_ENUM(LENGTH);
+
+ enum VOLUME {
+ LITER,
+ CUFT
+ };
+ Q_ENUM(VOLUME);
+
+ enum PRESSURE {
+ BAR,
+ PSI,
+ PASCALS
+ };
+ Q_ENUM(PRESSURE);
+
+ enum TEMPERATURE {
+ CELSIUS,
+ FAHRENHEIT,
+ KELVIN
+ };
+ Q_ENUM(TEMPERATURE);
+
+ enum WEIGHT {
+ KG,
+ LBS
+ };
+ Q_ENUM(WEIGHT);
+
+ enum TIME {
+ SECONDS,
+ MINUTES
+ };
+ Q_ENUM(TIME);
+
+ enum DURATION {
+ MIXED,
+ MINUTES_ONLY,
+ ALWAYS_HOURS
+ };
+ Q_ENUM(DURATION);
+
+private:
+ QMLInterface() {}
+};
+#endif // QMLINTERFACE_H
+