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/QMutexLocker>
4#include <QtCore/QObject>
5#include <QtCore/QRecursiveMutex>
6#include <QtCore/QString>
7#include <QtCore/QVariant>
8#include <QtQmlIntegration/QtQmlIntegration>
9
10#include "FactMetaData.h"
11
14class Fact : public QObject
15{
16 Q_OBJECT
17 QML_ELEMENT
18 Q_PROPERTY(int componentId READ componentId CONSTANT)
19 Q_PROPERTY(QStringList bitmaskStrings READ bitmaskStrings NOTIFY bitmaskStringsChanged)
20 Q_PROPERTY(QVariantList bitmaskValues READ bitmaskValues NOTIFY bitmaskValuesChanged)
21 Q_PROPERTY(QStringList selectedBitmaskStrings READ selectedBitmaskStrings NOTIFY valueChanged)
22 Q_PROPERTY(int decimalPlaces READ decimalPlaces NOTIFY cookedValuesChanged)
23 Q_PROPERTY(int maxStringLength READ maxStringLength CONSTANT)
24 Q_PROPERTY(QVariant defaultValue READ cookedDefaultValue NOTIFY cookedValuesChanged)
25 Q_PROPERTY(QString defaultValueString READ cookedDefaultValueString NOTIFY cookedValuesChanged)
26 Q_PROPERTY(bool defaultValueAvailable READ defaultValueAvailable CONSTANT)
27 Q_PROPERTY(int enumIndex READ enumIndex WRITE setEnumIndex NOTIFY valueChanged)
28 Q_PROPERTY(QStringList enumStrings READ enumStrings NOTIFY enumsChanged)
29 Q_PROPERTY(QString enumStringValue READ enumStringValue WRITE setEnumStringValue NOTIFY valueChanged)
30 Q_PROPERTY(QVariantList enumValues READ enumValues NOTIFY enumsChanged)
31 Q_PROPERTY(QString category READ category CONSTANT)
32 Q_PROPERTY(QString group READ group CONSTANT)
33 Q_PROPERTY(QString longDescription READ longDescription CONSTANT)
34 Q_PROPERTY(QVariant max READ cookedMax NOTIFY cookedValuesChanged)
35 Q_PROPERTY(QString maxString READ cookedMaxString NOTIFY cookedValuesChanged)
36 Q_PROPERTY(bool maxIsDefaultForType READ maxIsDefaultForType CONSTANT)
37 Q_PROPERTY(QVariant min READ cookedMin NOTIFY cookedValuesChanged)
38 Q_PROPERTY(QString minString READ cookedMinString NOTIFY cookedValuesChanged)
39 Q_PROPERTY(bool minIsDefaultForType READ minIsDefaultForType CONSTANT)
40 Q_PROPERTY(QVariant userMin READ cookedUserMin NOTIFY cookedValuesChanged)
41 Q_PROPERTY(QString userMinString READ cookedUserMinString NOTIFY cookedValuesChanged)
42 Q_PROPERTY(QVariant userMax READ cookedUserMax NOTIFY cookedValuesChanged)
43 Q_PROPERTY(QString userMaxString READ cookedUserMaxString NOTIFY cookedValuesChanged)
44 Q_PROPERTY(QString name READ name CONSTANT)
45 Q_PROPERTY(bool vehicleRebootRequired READ vehicleRebootRequired CONSTANT)
46 Q_PROPERTY(bool qgcRebootRequired READ qgcRebootRequired CONSTANT)
47 Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
48 Q_PROPERTY(QString label READ label CONSTANT)
49 Q_PROPERTY(QString units READ cookedUnits NOTIFY cookedValuesChanged)
50 Q_PROPERTY(QVariant value READ cookedValue WRITE setCookedValue NOTIFY valueChanged)
51 Q_PROPERTY(QVariant rawValue READ rawValue WRITE setRawValue NOTIFY rawValueChanged)
52 Q_PROPERTY(bool valueEqualsDefault READ valueEqualsDefault NOTIFY valueChanged)
53 Q_PROPERTY(QString invalidValueString READ invalidValueString NOTIFY cookedValuesChanged)
54 Q_PROPERTY(QString valueString READ cookedValueString NOTIFY valueChanged)
55 Q_PROPERTY(QString enumOrValueString READ enumOrValueString NOTIFY valueChanged)
56 Q_PROPERTY(double increment READ cookedIncrement NOTIFY cookedValuesChanged)
57 Q_PROPERTY(bool typeIsString READ typeIsString CONSTANT)
58 Q_PROPERTY(bool typeIsBool READ typeIsBool CONSTANT)
59 Q_PROPERTY(bool hasControl READ hasControl CONSTANT)
60 Q_PROPERTY(bool readOnly READ readOnly CONSTANT)
61 Q_PROPERTY(bool writeOnly READ writeOnly CONSTANT)
62 Q_PROPERTY(bool volatileValue READ volatileValue CONSTANT)
63
64public:
65 explicit Fact(QObject *parent = nullptr);
66 explicit Fact(int componentId, const QString &name, FactMetaData::ValueType_t type, QObject *parent = nullptr);
67 explicit Fact(const Fact &other, QObject *parent = nullptr);
68
71 explicit Fact(const QString &settingsGroup, FactMetaData *metaData, QObject *parent = nullptr);
72 virtual ~Fact();
73
74 const Fact &operator=(const Fact &other);
75
79 Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly);
81 Q_INVOKABLE QVariant clamp(const QString &cookedValue);
82 QVariant cookedValue() const;
86 Q_INVOKABLE QVariant rawToCooked(const QVariant &rawValue) const;
87 QVariant rawValue() const
88 {
89 QMutexLocker<QRecursiveMutex> locker(&_rawValueMutex);
90 return _rawValue;
91 }
92 int componentId() const { return _componentId; }
93 int decimalPlaces() const;
94 int maxStringLength() const;
95 QVariant rawDefaultValue() const;
96 QVariant cookedDefaultValue() const;
97 bool defaultValueAvailable() const;
98 QString cookedDefaultValueString() const;
99 QStringList bitmaskStrings() const;
100 QVariantList bitmaskValues() const;
102 QStringList selectedBitmaskStrings() const;
103 int enumIndex(); // This is not const, since an unknown value can modify the enum lists
104 QStringList enumStrings() const;
105 QString enumStringValue(); // This is not const, since an unknown value can modify the enum lists
106 QVariantList enumValues() const;
107 QString category() const;
108 QString group() const;
109 QString longDescription() const;
110 QVariant rawMax() const;
111 QVariant cookedMax() const;
112 QString cookedMaxString() const;
113 bool maxIsDefaultForType() const;
114 QVariant rawMin() const;
115 QVariant cookedMin() const;
116 QString cookedMinString() const;
117 bool minIsDefaultForType() const;
118 QVariant rawUserMin() const;
119 QVariant cookedUserMin() const;
120 QString cookedUserMinString() const;
121 QVariant rawUserMax() const;
122 QVariant cookedUserMax() const;
123 QString cookedUserMaxString() const;
124 QString name() const { return _name; }
125 QString label() const;
126 QString shortDescription() const;
128 QString cookedUnits() const;
129 QString rawUnits() const;
130 QString invalidValueString(int decimalPlaces) const;
132 QString rawValueString() const;
133 QString cookedValueString() const;
134 bool valueEqualsDefault() const;
135 bool vehicleRebootRequired() const;
136 bool qgcRebootRequired() const;
137 QString enumOrValueString(); // This is not const, since an unknown value can modify the enum lists
138 double rawIncrement() const;
139 double cookedIncrement() const;
140 bool typeIsString() const { return (type() == FactMetaData::valueTypeString); }
141 bool typeIsBool() const { return (type() == FactMetaData::valueTypeBool); }
142 bool hasControl() const;
143 bool readOnly() const;
144 bool writeOnly() const;
145 bool volatileValue() const;
146
148 QString rawValueStringFullPrecision() const;
149
150 void setRawValue(const QVariant &value);
151 void setCookedValue(const QVariant &value);
152 void setEnumIndex(int index);
153 void setEnumStringValue(const QString &value);
154 int valueIndex(const QString &value) const;
155
156 // The following methods allow you to defer sending of the valueChanged signals in order to implement
157 // rate limited signalling for ui performance. Used by FactGroup for example.
163
165 void forceSetRawValue(const QVariant &value);
166
170 void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData = false);
171
173
175 void containerSetRawValue(const QVariant &value);
176
178 void setName(const QString &name) { _name = name; }
179
181 void setEnumInfo(const QStringList &strings, const QVariantList &values);
182
183signals:
190
192 void valueChanged(const QVariant &value);
193 void rawValueChanged(const QVariant &value);
194
196 void vehicleUpdated(const QVariant &value);
197
199 void containerRawValueChanged(const QVariant &value);
200
201protected:
202 QString _variantToString(const QVariant &variant, int decimalPlaces) const;
203 void _sendValueChangedSignal(const QVariant &value);
204
205 QString _name;
206 int _componentId = -1;
207 QVariant _rawValue{0};
208 mutable QRecursiveMutex _rawValueMutex;
213
214 static constexpr const char *kMissingMetadata = "Meta data pointer missing";
215
216private slots:
217 void _appSettingsUnitsChanged();
218 void _checkForRebootMessaging();
219
220private:
221 void _init();
222};
Holds the meta data associated with a Fact.
A Fact is used to hold a single value within the system.
Definition Fact.h:15
bool _sendValueChangedSignals
Definition Fact.h:211
QString _name
Definition Fact.h:205
QStringList bitmaskStrings() const
Definition Fact.cc:324
bool writeOnly() const
Definition Fact.cc:919
int valueIndex(const QString &value) const
Definition Fact.cc:173
void setName(const QString &name)
Generally you should not change the name of a fact. But if you know what you are doing,...
Definition Fact.h:178
int enumIndex()
Definition Fact.cc:262
QString enumOrValueString()
Definition Fact.cc:865
void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData=false)
Definition Fact.cc:742
QStringList selectedBitmaskStrings() const
Provide a list of selected strings based on the fact value with the bitmaskString/bitmaskValues map.
Definition Fact.cc:344
QString cookedUnits() const
Definition Fact.cc:572
bool qgcRebootRequired() const
Definition Fact.cc:829
QString longDescription() const
Definition Fact.cc:552
virtual ~Fact()
Definition Fact.cc:75
bool _deferredValueChangeSignal
Definition Fact.h:212
Q_INVOKABLE QVariant rawToCooked(const QVariant &rawValue) const
Definition Fact.cc:238
QVariant cookedValue() const
Definition Fact.cc:227
void sendValueChangedSignalsChanged(bool sendValueChangedSignals)
bool typeIsString() const
Definition Fact.h:140
QString shortDescription() const
Definition Fact.cc:525
void containerSetRawValue(const QVariant &value)
Value coming from Vehicle. This does NOT send a _containerRawValueChanged signal.
Definition Fact.cc:199
FactMetaData * _metaData
Definition Fact.h:210
void clearDeferredValueChangeSignal()
Definition Fact.h:161
QVariantList enumValues() const
Definition Fact.cc:304
QString cookedMaxString() const
Definition Fact.cc:672
FactMetaData * metaData()
Definition Fact.h:172
QVariant rawDefaultValue() const
Definition Fact.cc:494
bool valueEqualsDefault() const
Definition Fact.cc:764
FactMetaData::ValueType_t _type
Definition Fact.h:209
double rawIncrement() const
Definition Fact.cc:879
bool maxIsDefaultForType() const
Definition Fact.cc:692
bool readOnly() const
Definition Fact.cc:909
QString cookedMinString() const
Definition Fact.cc:622
int componentId() const
Definition Fact.h:92
QString cookedUserMinString() const
Definition Fact.cc:627
void setEnumInfo(const QStringList &strings, const QVariantList &values)
Generally this is done during parsing. But if you know what you are doing, you can.
Definition Fact.cc:314
void sendDeferredValueChangedSignal()
Definition Fact.cc:857
QVariant cookedUserMax() const
Definition Fact.cc:662
QString invalidValueString() const
Definition Fact.h:131
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:208
QString cookedUserMaxString() const
Definition Fact.cc:677
static constexpr const char * kMissingMetadata
Definition Fact.h:214
void bitmaskValuesChanged()
QString group() const
Definition Fact.cc:732
FactMetaData::ValueType_t type() const
Definition Fact.h:127
void setSendValueChangedSignals(bool sendValueChangedSignals)
Definition Fact.cc:839
QVariant cookedUserMin() const
Definition Fact.cc:612
QString cookedDefaultValueString() const
Definition Fact.cc:520
const Fact & operator=(const Fact &other)
Definition Fact.cc:85
QVariant cookedMin() const
Definition Fact.cc:592
double cookedIncrement() const
Definition Fact.cc:889
void setRawValue(const QVariant &value)
Definition Fact.cc:135
QString rawValueString() const
Definition Fact.cc:484
void setEnumIndex(int index)
Definition Fact.cc:190
bool sendValueChangedSignals() const
Definition Fact.h:159
bool defaultValueAvailable() const
Definition Fact.cc:778
QVariant rawUserMax() const
Definition Fact.cc:652
bool volatileValue() const
Definition Fact.cc:929
QVariant rawMax() const
Definition Fact.cc:632
void forceSetRawValue(const QVariant &value)
Sets and sends new value to vehicle even if value is the same.
Definition Fact.cc:112
void bitmaskStringsChanged()
int decimalPlaces() const
Definition Fact.cc:702
QStringList enumStrings() const
Definition Fact.cc:294
QString cookedValueString() const
Definition Fact.cc:489
QString name() const
Definition Fact.h:124
void containerRawValueChanged(const QVariant &value)
This signal is meant for use by Fact container implementations. Used to send changed values to vehicl...
void cookedValuesChanged()
Cooked units, ranges, defaults, increment or precision changed without a raw value change.
QString rawValueStringFullPrecision() const
Returns the values as a string with full 18 digit precision if float/double.
Definition Fact.cc:446
QVariantList bitmaskValues() const
Definition Fact.cc:334
bool typeIsBool() const
Definition Fact.h:141
bool deferredValueChangeSignal() const
Definition Fact.h:160
QVariant cookedMax() const
Definition Fact.cc:642
QVariant rawMin() const
Definition Fact.cc:582
Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly)
Definition Fact.cc:788
void setEnumStringValue(const QString &value)
Definition Fact.cc:182
int _componentId
Definition Fact.h:206
QString rawUnits() const
Definition Fact.cc:562
Q_INVOKABLE QVariant clamp(const QString &cookedValue)
Convert and clamp value.
Definition Fact.cc:803
QString _variantToString(const QVariant &variant, int decimalPlaces) const
Definition Fact.cc:372
QVariant cookedDefaultValue() const
Definition Fact.cc:507
QString category() const
Definition Fact.cc:722
bool minIsDefaultForType() const
Definition Fact.cc:682
QVariant _rawValue
Definition Fact.h:207
void _sendValueChangedSignal(const QVariant &value)
Definition Fact.cc:847
int maxStringLength() const
Definition Fact.cc:712
void setCookedValue(const QVariant &value)
Definition Fact.cc:164
QVariant rawUserMin() const
Definition Fact.cc:602
void enumsChanged()
QString enumStringValue()
Definition Fact.cc:248
QString label() const
Definition Fact.cc:535
void vehicleUpdated(const QVariant &value)
Signalled when the param write ack comes back from the vehicle.
bool hasControl() const
Definition Fact.cc:899
bool vehicleRebootRequired() const
Definition Fact.cc:819
QVariant rawValue() const
Definition Fact.h:87
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 ...