subsurface/mobile-widgets/qmlinterface.h
jan Iversen c93b76eee6 mobile-widgets: make cloud_verification_status type proof in QML.
Add CLOUD_STATUS enum to interface.

Add cloud_verifification_status variable to interface, and make
it strongly typed in QML.

using backend.cloud_verification_status = 1 will fail but
backend.cloud_verification_status = backend.CS_UNKNOWN is correct.

Added note to the original definitions of the enums that they have been
duplicated.

Signed-off-by: jan Iversen <jan@casacondor.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-18 17:35:04 -08:00

116 lines
2.4 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#ifndef QMLINTERFACE_H
#define QMLINTERFACE_H
#include "core/settings/qPrefCloudStorage.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
Q_PROPERTY(CLOUD_STATUS cloud_verification_status READ cloud_verification_status WRITE set_cloud_verification_status NOTIFY cloud_verification_statusChanged)
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);
enum CLOUD_STATUS {
CS_UNKNOWN,
CS_INCORRECT_USER_PASSWD,
CS_NEED_TO_VERIFY,
CS_VERIFIED,
CS_NOCLOUD
};
Q_ENUM(CLOUD_STATUS);
public:
CLOUD_STATUS cloud_verification_status() { return (CLOUD_STATUS)prefs.cloud_verification_status; }
public slots:
void set_cloud_verification_status(CLOUD_STATUS value) { qPrefCloudStorage::set_cloud_verification_status(value); }
signals:
void cloud_verification_statusChanged(CLOUD_STATUS);
private:
QMLInterface() {}
};
#endif // QMLINTERFACE_H