diff options
Diffstat (limited to 'mobile-widgets')
-rw-r--r-- | mobile-widgets/CMakeLists.txt | 1 | ||||
-rw-r--r-- | mobile-widgets/qmlinterface.cpp | 21 | ||||
-rw-r--r-- | mobile-widgets/qmlinterface.h | 95 |
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 + |