C
Qt Cluster: Rendering and Recovery from Main UI Failure
// Copyright (C) 2023 Pelagicore AG
// SPDX-License-Identifier: PELAGICORE OR LGPL-3.0-only
// This file is part of the Qt Safe Renderer module
#ifndef CLUSTERDATA_H
#define CLUSTERDATA_H
#include <QObject>
#include <QQmlParserStatus>
#include <QQmlProperty>
#include "clusterdatabackend.h"
#include "crasher.h"
class ClusterDataBackend;
class Crasher;
class ZonedProperties : public QObject
{
Q_OBJECT
Q_PROPERTY(bool doorOpen READ doorOpen NOTIFY doorOpenChanged)
public:
ZonedProperties(QObject *parent=0) : QObject(parent), m_zone(""), m_doorOpen(false) {}
void setZone(const QString &zone) { m_zone = zone; }
QString zone() { return m_zone; }
bool doorOpen() { return m_doorOpen; }
void setDoorOpen(const bool &d) { m_doorOpen = d; emit doorOpenChanged(); }
signals:
void zoneChanged(const QString &zone);
void doorOpenChanged();
private:
QString m_zone;
bool m_doorOpen;
};
class QtIVIClusterData : public QObject, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(double vehicleSpeed READ vehicleSpeed NOTIFY vehicleSpeedChanged)
Q_PROPERTY(double latitude READ latitude NOTIFY latitudeChanged)
Q_PROPERTY(double longitude READ longitude NOTIFY longitudeChanged)
Q_PROPERTY(double direction READ direction NOTIFY directionChanged)
Q_PROPERTY(bool flatTire READ flatTire NOTIFY flatTireChanged)
Q_PROPERTY(bool lightFailure READ lightFailure NOTIFY lightFailureChanged)
Q_PROPERTY(bool reverse READ reverse NOTIFY reverseChanged)
Q_PROPERTY(bool leftTurnLight READ leftTurnLight NOTIFY leftTurnLightChanged)
Q_PROPERTY(bool rightTurnLight READ rightTurnLight NOTIFY rightTurnLightChanged)
Q_PROPERTY(bool headLight READ headLight NOTIFY headLightChanged)
Q_PROPERTY(bool parkLight READ parkLight NOTIFY parkLightChanged)
Q_PROPERTY(int carId READ carId NOTIFY carIdChanged)
Q_PROPERTY(bool brake READ brake NOTIFY brakeChanged)
Q_PROPERTY(int engineTemp READ engineTemp NOTIFY engineTempChanged)
Q_PROPERTY(double oilTemp READ oilTemp NOTIFY oilTempChanged)
Q_PROPERTY(int oilPressure READ oilPressure NOTIFY oilPressureChanged)
Q_PROPERTY(double batteryPotential READ batteryPotential NOTIFY batteryPotentialChanged)
Q_PROPERTY(double gasLevel READ gasLevel NOTIFY gasLevelChanged)
Q_PROPERTY(int rpm READ rpm NOTIFY rpmChanged)
Q_PROPERTY(int gear READ gear NOTIFY gearChanged)
Q_PROPERTY(QVariantMap zoneAt READ zoneFeatureMap NOTIFY zonesChanged)
public:
QtIVIClusterData(QObject *parent=0);
double vehicleSpeed() const;
double latitude() const;
double longitude() const;
double direction() const;
bool flatTire() const;
bool doorOpen() const;
bool lightFailure() const;
bool reverse() const;
bool leftTurnLight() const;
bool rightTurnLight() const;
bool headLight() const;
bool parkLight() const;
int carId() const;
bool brake() const;
int engineTemp() const;
double oilTemp() const;
int oilPressure() const;
double batteryPotential() const;
double gasLevel() const;
int rpm() const;
int gear() const;
bool crashArg() const;
Q_SIGNALS:
void vehicleSpeedChanged(double vehicleSpeed);
void latitudeChanged(double latitude);
void longitudeChanged(double longitude);
void directionChanged(double direction);
void flatTireChanged(bool flatTire);
void doorOpenChanged(bool doorOpen);
void lightFailureChanged(bool lightFailure);
void reverseChanged(bool Reverse);
void leftTurnLightChanged(bool leftTurnLight);
void rightTurnLightChanged(bool rightTurnLight);
void headLightChanged(bool headLight);
void parkLightChanged(bool parkLight);
void carIdChanged(int carId);
void brakeChanged(bool brakeOn );
void engineTempChanged(int engineTemp);
void oilTempChanged(double oilTemp);
void oilPressureChanged(int oilPressure);
void batteryPotentialChanged(double batteryPotential);
void gasLevelChanged(double gasLevel);
void rpmChanged(int rpm);
void gearChanged(int gear);
void zonesChanged();
protected:
//TODO This doesn't work for the C++ usecases we should use the constructor there instead
// Also this means a qml dependency in the core, do we want that ?
virtual void classBegin();
virtual void componentComplete();
private Q_SLOTS:
void onVehicleSpeedChanged(double vehicleSpeed, const QString &zone);
void onLatitudeChanged(double latitude, const QString &zone);
void onLongitudeChanged(double longitude, const QString &zone);
void onDirectionChanged(double direction, const QString &zone);
void onFlatTireChanged(bool flatTire, const QString &zone);
void onDoorOpenChanged(bool doorOpen, const QString &zone);
void onLightFailureChanged(bool lightFailure, const QString &zone);
void onReverseChanged(bool reverse, const QString &zone);
void onLeftTurnLightChanged(bool leftTurnLight, const QString &zone);
void onRightTurnLightChanged(bool rightTurnLight, const QString &zone);
void onHeadLightChanged(bool headLight, const QString &zone);
void onParkLightChanged(bool parkLight, const QString &zone);
void onCarIdChanged(int carId, const QString &zone);
void onBrakeChanged(bool brakeOn, const QString &zone );
void onEngineTempChanged(int engineTemp, const QString &zone);
void onOilTempChanged(double oilTemp, const QString &zone);
void onOilPressureChanged(int oilPressure, const QString &zone);
void onBatteryPotentialChanged(double batteryPotential, const QString &zone);
void onGasLevelChanged(double gasLevel, const QString &zone);
void onRpmChanged(int rpm, const QString &zone);
void onGearChanged(int gear, const QString &zone);
void onCrashChanged(bool crashArg, const QString &zone);
protected:
// virtual QtIVIAbstractZonedFeature* createZoneFeature(const QString &zone) Q_DECL_OVERRIDE;
// QtIVIClusterData* zonedFeature(const QString &zone);
private:
void connectToServiceObject();
QVariantMap zoneFeatureMap() const;
void initializeZones();
ZonedProperties *zoneAt(const QString &zone) const;
private:
//QtIVIClusterDataBackendInterface* clusterDataBackend();
ClusterDataBackend *m_backend;
Crasher *m_crasher;
double m_vehicleSpeed;
double m_latitude;
double m_longitude;
double m_direction;
bool m_flatTire;
bool m_doorOpen;
bool m_lightFailure;
bool m_reverse;
bool m_leftTurnLight;
bool m_rightTurnLight;
bool m_headLight;
bool m_parkLight;
int m_carId;
bool m_brake;
qint8 m_engineTemp;
double m_oilTemp;
int m_oilPressure;
double m_batteryPotential;
double m_gasLevel;
int m_rpm;
int m_gear;
bool m_crash;
QVariantMap m_zoneFeatureMap;
QList<ZonedProperties*> m_zoneFeatures;
QVariantList m_zoneFeatureList;
};
#endif // CLUSTERDATA_H