QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
Fact.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtCore/QMutexLocker>
5#include <QtCore/QObject>
6#include <QtCore/QRecursiveMutex>
7#include <QtCore/QString>
8#include <QtCore/QVariant>
9#include <QtQmlIntegration/QtQmlIntegration>
10
11#include "FactMetaData.h"
12
14
16
17
18class Fact : public QObject
19{
20 Q_OBJECT
21 QML_ELEMENT
22 Q_MOC_INCLUDE("FactValueSliderListModel.h")
23 Q_PROPERTY(int componentId READ componentId CONSTANT)
24 Q_PROPERTY(QStringList bitmaskStrings READ bitmaskStrings NOTIFY bitmaskStringsChanged)
25 Q_PROPERTY(QVariantList bitmaskValues READ bitmaskValues NOTIFY bitmaskValuesChanged)
26 Q_PROPERTY(QStringList selectedBitmaskStrings READ selectedBitmaskStrings NOTIFY valueChanged)
27 Q_PROPERTY(int decimalPlaces READ decimalPlaces CONSTANT)
28 Q_PROPERTY(QVariant defaultValue READ cookedDefaultValue CONSTANT)
29 Q_PROPERTY(QString defaultValueString READ cookedDefaultValueString CONSTANT)
30 Q_PROPERTY(bool defaultValueAvailable READ defaultValueAvailable CONSTANT)
31 Q_PROPERTY(int enumIndex READ enumIndex WRITE setEnumIndex NOTIFY valueChanged)
32 Q_PROPERTY(QStringList enumStrings READ enumStrings NOTIFY enumsChanged)
33 Q_PROPERTY(QString enumStringValue READ enumStringValue WRITE setEnumStringValue NOTIFY valueChanged)
34 Q_PROPERTY(QVariantList enumValues READ enumValues NOTIFY enumsChanged)
35 Q_PROPERTY(QString category READ category CONSTANT)
36 Q_PROPERTY(QString group READ group CONSTANT)
37 Q_PROPERTY(QString longDescription READ longDescription CONSTANT)
38 Q_PROPERTY(QVariant max READ cookedMax CONSTANT)
39 Q_PROPERTY(QString maxString READ cookedMaxString CONSTANT)
40 Q_PROPERTY(bool maxIsDefaultForType READ maxIsDefaultForType CONSTANT)
41 Q_PROPERTY(QVariant min READ cookedMin CONSTANT)
42 Q_PROPERTY(QString minString READ cookedMinString CONSTANT)
43 Q_PROPERTY(bool minIsDefaultForType READ minIsDefaultForType CONSTANT)
44 Q_PROPERTY(QVariant userMin READ cookedUserMin CONSTANT)
45 Q_PROPERTY(QString userMinString READ cookedUserMinString CONSTANT)
46 Q_PROPERTY(QVariant userMax READ cookedUserMax CONSTANT)
47 Q_PROPERTY(QString userMaxString READ cookedUserMaxString CONSTANT)
48 Q_PROPERTY(QString name READ name CONSTANT)
49 Q_PROPERTY(bool vehicleRebootRequired READ vehicleRebootRequired CONSTANT)
50 Q_PROPERTY(bool qgcRebootRequired READ qgcRebootRequired CONSTANT)
51 Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
52 Q_PROPERTY(QString units READ cookedUnits CONSTANT)
53 Q_PROPERTY(QVariant value READ cookedValue WRITE setCookedValue NOTIFY valueChanged)
54 Q_PROPERTY(QVariant rawValue READ rawValue WRITE setRawValue NOTIFY rawValueChanged)
55 Q_PROPERTY(bool valueEqualsDefault READ valueEqualsDefault NOTIFY valueChanged)
56 Q_PROPERTY(QString invalidValueString READ invalidValueString CONSTANT)
57 Q_PROPERTY(QString valueString READ cookedValueString NOTIFY valueChanged)
58 Q_PROPERTY(QString enumOrValueString READ enumOrValueString NOTIFY valueChanged)
59 Q_PROPERTY(double increment READ cookedIncrement CONSTANT)
60 Q_PROPERTY(bool typeIsString READ typeIsString CONSTANT)
61 Q_PROPERTY(bool typeIsBool READ typeIsBool CONSTANT)
62 Q_PROPERTY(bool hasControl READ hasControl CONSTANT)
63 Q_PROPERTY(bool readOnly READ readOnly CONSTANT)
64 Q_PROPERTY(bool writeOnly READ writeOnly CONSTANT)
65 Q_PROPERTY(bool volatileValue READ volatileValue CONSTANT)
66
67public:
68 explicit Fact(QObject *parent = nullptr);
69 explicit Fact(int componentId, const QString &name, FactMetaData::ValueType_t type, QObject *parent = nullptr);
70 explicit Fact(const Fact &other, QObject *parent = nullptr);
71
74 explicit Fact(const QString &settingsGroup, FactMetaData *metaData, QObject *parent = nullptr);
75 virtual ~Fact();
76
77 const Fact &operator=(const Fact &other);
78
82 Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly);
84 Q_INVOKABLE QVariant clamp(const QString &cookedValue);
85 QVariant cookedValue() const;
86 QVariant rawValue() const
87 {
88 QMutexLocker<QRecursiveMutex> locker(&_rawValueMutex);
89 return _rawValue;
90 }
91 int componentId() const { return _componentId; }
92 int decimalPlaces() const;
93 QVariant rawDefaultValue() const;
94 QVariant cookedDefaultValue() const;
95 bool defaultValueAvailable() const;
96 QString cookedDefaultValueString() const;
97 QStringList bitmaskStrings() const;
98 QVariantList bitmaskValues() const;
100 QStringList selectedBitmaskStrings() const;
101 int enumIndex(); // This is not const, since an unknown value can modify the enum lists
102 QStringList enumStrings() const;
103 QString enumStringValue(); // This is not const, since an unknown value can modify the enum lists
104 QVariantList enumValues() const;
105 QString category() const;
106 QString group() const;
107 QString longDescription() const;
108 QVariant rawMax() const;
109 QVariant cookedMax() const;
110 QString cookedMaxString() const;
111 bool maxIsDefaultForType() const;
112 QVariant rawMin() const;
113 QVariant cookedMin() const;
114 QString cookedMinString() const;
115 bool minIsDefaultForType() const;
116 QVariant rawUserMin() const;
117 QVariant cookedUserMin() const;
118 QString cookedUserMinString() const;
119 QVariant rawUserMax() const;
120 QVariant cookedUserMax() const;
121 QString cookedUserMaxString() const;
122 QString name() const { return _name; }
123 QString shortDescription() const;
124 FactMetaData::ValueType_t type() const { return _type; }
125 QString cookedUnits() const;
126 QString rawUnits() const;
127 QString invalidValueString(int decimalPlaces) const;
128 QString invalidValueString() const { return invalidValueString(decimalPlaces()); }
129 QString rawValueString() const;
130 QString cookedValueString() const;
131 bool valueEqualsDefault() const;
132 bool vehicleRebootRequired() const;
133 bool qgcRebootRequired() const;
134 QString enumOrValueString(); // This is not const, since an unknown value can modify the enum lists
135 double rawIncrement() const;
136 double cookedIncrement() const;
137 bool typeIsString() const { return (type() == FactMetaData::valueTypeString); }
138 bool typeIsBool() const { return (type() == FactMetaData::valueTypeBool); }
139 bool hasControl() const;
140 bool readOnly() const;
141 bool writeOnly() const;
142 bool volatileValue() const;
143
144 Q_INVOKABLE FactValueSliderListModel *valueSliderModel();
145
147 QString rawValueStringFullPrecision() const;
148
149 void setRawValue(const QVariant &value);
150 void setCookedValue(const QVariant &value);
151 void setEnumIndex(int index);
152 void setEnumStringValue(const QString &value);
153 int valueIndex(const QString &value) const;
154
155 // The following methods allow you to defer sending of the valueChanged signals in order to implement
156 // rate limited signalling for ui performance. Used by FactGroup for example.
157 void setSendValueChangedSignals (bool sendValueChangedSignals);
158 bool sendValueChangedSignals () const { return _sendValueChangedSignals; }
159 bool deferredValueChangeSignal() const { return _deferredValueChangeSignal; }
160 void clearDeferredValueChangeSignal() { _deferredValueChangeSignal = false; }
161 void sendDeferredValueChangedSignal();
162
164 void forceSetRawValue(const QVariant &value);
165
169 void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData = false);
170
171 FactMetaData *metaData() { return _metaData; }
172
174 void containerSetRawValue(const QVariant &value);
175
177 void setName(const QString &name) { _name = name; }
178
180 void setEnumInfo(const QStringList &strings, const QVariantList &values);
181
182signals:
186 void sendValueChangedSignalsChanged(bool sendValueChangedSignals);
187
189 void valueChanged(const QVariant &value);
190 void rawValueChanged(const QVariant &value);
191
193 void vehicleUpdated(const QVariant &value);
194
196 void containerRawValueChanged(const QVariant &value);
197
198protected:
199 QString _variantToString(const QVariant &variant, int decimalPlaces) const;
200 void _sendValueChangedSignal(const QVariant &value);
201
202 QString _name;
203 int _componentId = -1;
204 QVariant _rawValue{0};
205 mutable QRecursiveMutex _rawValueMutex;
207 FactMetaData *_metaData = nullptr;
208 bool _sendValueChangedSignals = true;
209 bool _deferredValueChangeSignal = false;
210 FactValueSliderListModel *_valueSliderModel = nullptr;
211
212 static constexpr const char *kMissingMetadata = "Meta data pointer missing";
213
214private slots:
215 void _checkForRebootMessaging();
216
217private:
218 void _init();
219};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
Provides a list model of values for incrementing/decrementing the value of a Fact.
A Fact is used to hold a single value within the system.
Definition Fact.h:19
QString _name
Definition Fact.h:202
void sendValueChangedSignalsChanged(bool sendValueChangedSignals)
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:205
void bitmaskValuesChanged()
void bitmaskStringsChanged()
void containerRawValueChanged(const QVariant &value)
This signal is meant for use by Fact container implementations. Used to send changed values to vehicl...
void enumsChanged()
void vehicleUpdated(const QVariant &value)
Signalled when the param write ack comes back from the vehicle.
void valueChanged(const QVariant &value)
This signal is only meant for use by the QT property system. It should not be connected to by client ...