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
13
16class Fact : public QObject
17{
18 Q_OBJECT
19 QML_ELEMENT
20 Q_MOC_INCLUDE("FactValueSliderListModel.h")
21 Q_PROPERTY(int componentId READ componentId CONSTANT)
22 Q_PROPERTY(QStringList bitmaskStrings READ bitmaskStrings NOTIFY bitmaskStringsChanged)
23 Q_PROPERTY(QVariantList bitmaskValues READ bitmaskValues NOTIFY bitmaskValuesChanged)
24 Q_PROPERTY(QStringList selectedBitmaskStrings READ selectedBitmaskStrings NOTIFY valueChanged)
25 Q_PROPERTY(int decimalPlaces READ decimalPlaces CONSTANT)
26 Q_PROPERTY(int maxStringLength READ maxStringLength CONSTANT)
27 Q_PROPERTY(QVariant defaultValue READ cookedDefaultValue CONSTANT)
28 Q_PROPERTY(QString defaultValueString READ cookedDefaultValueString CONSTANT)
29 Q_PROPERTY(bool defaultValueAvailable READ defaultValueAvailable CONSTANT)
30 Q_PROPERTY(int enumIndex READ enumIndex WRITE setEnumIndex NOTIFY valueChanged)
31 Q_PROPERTY(QStringList enumStrings READ enumStrings NOTIFY enumsChanged)
32 Q_PROPERTY(QString enumStringValue READ enumStringValue WRITE setEnumStringValue NOTIFY valueChanged)
33 Q_PROPERTY(QVariantList enumValues READ enumValues NOTIFY enumsChanged)
34 Q_PROPERTY(QString category READ category CONSTANT)
35 Q_PROPERTY(QString group READ group CONSTANT)
36 Q_PROPERTY(QString longDescription READ longDescription CONSTANT)
37 Q_PROPERTY(QVariant max READ cookedMax CONSTANT)
38 Q_PROPERTY(QString maxString READ cookedMaxString CONSTANT)
39 Q_PROPERTY(bool maxIsDefaultForType READ maxIsDefaultForType CONSTANT)
40 Q_PROPERTY(QVariant min READ cookedMin CONSTANT)
41 Q_PROPERTY(QString minString READ cookedMinString CONSTANT)
42 Q_PROPERTY(bool minIsDefaultForType READ minIsDefaultForType CONSTANT)
43 Q_PROPERTY(QVariant userMin READ cookedUserMin CONSTANT)
44 Q_PROPERTY(QString userMinString READ cookedUserMinString CONSTANT)
45 Q_PROPERTY(QVariant userMax READ cookedUserMax CONSTANT)
46 Q_PROPERTY(QString userMaxString READ cookedUserMaxString CONSTANT)
47 Q_PROPERTY(QString name READ name CONSTANT)
48 Q_PROPERTY(bool vehicleRebootRequired READ vehicleRebootRequired CONSTANT)
49 Q_PROPERTY(bool qgcRebootRequired READ qgcRebootRequired CONSTANT)
50 Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
51 Q_PROPERTY(QString label READ label 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;
89 Q_INVOKABLE QVariant rawToCooked(const QVariant &rawValue) const;
90 QVariant rawValue() const
91 {
92 QMutexLocker<QRecursiveMutex> locker(&_rawValueMutex);
93 return _rawValue;
94 }
95 int componentId() const { return _componentId; }
96 int decimalPlaces() const;
97 int maxStringLength() const;
98 QVariant rawDefaultValue() const;
99 QVariant cookedDefaultValue() const;
100 bool defaultValueAvailable() const;
101 QString cookedDefaultValueString() const;
102 QStringList bitmaskStrings() const;
103 QVariantList bitmaskValues() const;
105 QStringList selectedBitmaskStrings() const;
106 int enumIndex(); // This is not const, since an unknown value can modify the enum lists
107 QStringList enumStrings() const;
108 QString enumStringValue(); // This is not const, since an unknown value can modify the enum lists
109 QVariantList enumValues() const;
110 QString category() const;
111 QString group() const;
112 QString longDescription() const;
113 QVariant rawMax() const;
114 QVariant cookedMax() const;
115 QString cookedMaxString() const;
116 bool maxIsDefaultForType() const;
117 QVariant rawMin() const;
118 QVariant cookedMin() const;
119 QString cookedMinString() const;
120 bool minIsDefaultForType() const;
121 QVariant rawUserMin() const;
122 QVariant cookedUserMin() const;
123 QString cookedUserMinString() const;
124 QVariant rawUserMax() const;
125 QVariant cookedUserMax() const;
126 QString cookedUserMaxString() const;
127 QString name() const { return _name; }
128 QString label() const;
129 QString shortDescription() const;
131 QString cookedUnits() const;
132 QString rawUnits() const;
133 QString invalidValueString(int decimalPlaces) const;
135 QString rawValueString() const;
136 QString cookedValueString() const;
137 bool valueEqualsDefault() const;
138 bool vehicleRebootRequired() const;
139 bool qgcRebootRequired() const;
140 QString enumOrValueString(); // This is not const, since an unknown value can modify the enum lists
141 double rawIncrement() const;
142 double cookedIncrement() const;
143 bool typeIsString() const { return (type() == FactMetaData::valueTypeString); }
144 bool typeIsBool() const { return (type() == FactMetaData::valueTypeBool); }
145 bool hasControl() const;
146 bool readOnly() const;
147 bool writeOnly() const;
148 bool volatileValue() const;
149
151
153 QString rawValueStringFullPrecision() const;
154
155 void setRawValue(const QVariant &value);
156 void setCookedValue(const QVariant &value);
157 void setEnumIndex(int index);
158 void setEnumStringValue(const QString &value);
159 int valueIndex(const QString &value) const;
160
161 // The following methods allow you to defer sending of the valueChanged signals in order to implement
162 // rate limited signalling for ui performance. Used by FactGroup for example.
168
170 void forceSetRawValue(const QVariant &value);
171
175 void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData = false);
176
178
180 void containerSetRawValue(const QVariant &value);
181
183 void setName(const QString &name) { _name = name; }
184
186 void setEnumInfo(const QStringList &strings, const QVariantList &values);
187
188signals:
193
195 void valueChanged(const QVariant &value);
196 void rawValueChanged(const QVariant &value);
197
199 void vehicleUpdated(const QVariant &value);
200
202 void containerRawValueChanged(const QVariant &value);
203
204protected:
205 QString _variantToString(const QVariant &variant, int decimalPlaces) const;
206 void _sendValueChangedSignal(const QVariant &value);
207
208 QString _name;
209 int _componentId = -1;
210 QVariant _rawValue{0};
211 mutable QRecursiveMutex _rawValueMutex;
217
218 static constexpr const char *kMissingMetadata = "Meta data pointer missing";
219
220private slots:
221 void _checkForRebootMessaging();
222
223private:
224 void _init();
225};
Holds the meta data associated with a Fact.
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:17
bool _sendValueChangedSignals
Definition Fact.h:214
QString _name
Definition Fact.h:208
QStringList bitmaskStrings() const
Definition Fact.cc:323
bool writeOnly() const
Definition Fact.cc:905
int valueIndex(const QString &value) const
Definition Fact.cc:172
Q_INVOKABLE FactValueSliderListModel * valueSliderModel()
Definition Fact.cc:925
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:183
int enumIndex()
Definition Fact.cc:261
QString enumOrValueString()
Definition Fact.cc:851
void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData=false)
Definition Fact.cc:741
QStringList selectedBitmaskStrings() const
Provide a list of selected strings based on the fact value with the bitmaskString/bitmaskValues map.
Definition Fact.cc:343
QString cookedUnits() const
Definition Fact.cc:571
bool qgcRebootRequired() const
Definition Fact.cc:815
QString longDescription() const
Definition Fact.cc:551
virtual ~Fact()
Definition Fact.cc:76
bool _deferredValueChangeSignal
Definition Fact.h:215
Q_INVOKABLE QVariant rawToCooked(const QVariant &rawValue) const
Definition Fact.cc:237
QVariant cookedValue() const
Definition Fact.cc:226
void sendValueChangedSignalsChanged(bool sendValueChangedSignals)
bool typeIsString() const
Definition Fact.h:143
QString shortDescription() const
Definition Fact.cc:524
void containerSetRawValue(const QVariant &value)
Value coming from Vehicle. This does NOT send a _containerRawValueChanged signal.
Definition Fact.cc:198
FactMetaData * _metaData
Definition Fact.h:213
void clearDeferredValueChangeSignal()
Definition Fact.h:166
QVariantList enumValues() const
Definition Fact.cc:303
QString cookedMaxString() const
Definition Fact.cc:671
FactMetaData * metaData()
Definition Fact.h:177
QVariant rawDefaultValue() const
Definition Fact.cc:493
bool valueEqualsDefault() const
Definition Fact.cc:750
FactMetaData::ValueType_t _type
Definition Fact.h:212
double rawIncrement() const
Definition Fact.cc:865
bool maxIsDefaultForType() const
Definition Fact.cc:691
bool readOnly() const
Definition Fact.cc:895
QString cookedMinString() const
Definition Fact.cc:621
int componentId() const
Definition Fact.h:95
QString cookedUserMinString() const
Definition Fact.cc:626
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:313
void sendDeferredValueChangedSignal()
Definition Fact.cc:843
QVariant cookedUserMax() const
Definition Fact.cc:661
QString invalidValueString() const
Definition Fact.h:134
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:211
QString cookedUserMaxString() const
Definition Fact.cc:676
static constexpr const char * kMissingMetadata
Definition Fact.h:218
void bitmaskValuesChanged()
QString group() const
Definition Fact.cc:731
FactMetaData::ValueType_t type() const
Definition Fact.h:130
void setSendValueChangedSignals(bool sendValueChangedSignals)
Definition Fact.cc:825
QVariant cookedUserMin() const
Definition Fact.cc:611
QString cookedDefaultValueString() const
Definition Fact.cc:519
const Fact & operator=(const Fact &other)
Definition Fact.cc:86
QVariant cookedMin() const
Definition Fact.cc:591
double cookedIncrement() const
Definition Fact.cc:875
void setRawValue(const QVariant &value)
Definition Fact.cc:134
QString rawValueString() const
Definition Fact.cc:483
void setEnumIndex(int index)
Definition Fact.cc:189
bool sendValueChangedSignals() const
Definition Fact.h:164
bool defaultValueAvailable() const
Definition Fact.cc:764
QVariant rawUserMax() const
Definition Fact.cc:651
bool volatileValue() const
Definition Fact.cc:915
QVariant rawMax() const
Definition Fact.cc:631
void forceSetRawValue(const QVariant &value)
Sets and sends new value to vehicle even if value is the same.
Definition Fact.cc:111
void bitmaskStringsChanged()
int decimalPlaces() const
Definition Fact.cc:701
QStringList enumStrings() const
Definition Fact.cc:293
QString cookedValueString() const
Definition Fact.cc:488
QString name() const
Definition Fact.h:127
void containerRawValueChanged(const QVariant &value)
This signal is meant for use by Fact container implementations. Used to send changed values to vehicl...
QString rawValueStringFullPrecision() const
Returns the values as a string with full 18 digit precision if float/double.
Definition Fact.cc:445
QVariantList bitmaskValues() const
Definition Fact.cc:333
bool typeIsBool() const
Definition Fact.h:144
bool deferredValueChangeSignal() const
Definition Fact.h:165
QVariant cookedMax() const
Definition Fact.cc:641
QVariant rawMin() const
Definition Fact.cc:581
Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly)
Definition Fact.cc:774
void setEnumStringValue(const QString &value)
Definition Fact.cc:181
int _componentId
Definition Fact.h:209
QString rawUnits() const
Definition Fact.cc:561
Q_INVOKABLE QVariant clamp(const QString &cookedValue)
Convert and clamp value.
Definition Fact.cc:789
QString _variantToString(const QVariant &variant, int decimalPlaces) const
Definition Fact.cc:371
FactValueSliderListModel * _valueSliderModel
Definition Fact.h:216
QVariant cookedDefaultValue() const
Definition Fact.cc:506
QString category() const
Definition Fact.cc:721
bool minIsDefaultForType() const
Definition Fact.cc:681
QVariant _rawValue
Definition Fact.h:210
void _sendValueChangedSignal(const QVariant &value)
Definition Fact.cc:833
int maxStringLength() const
Definition Fact.cc:711
void setCookedValue(const QVariant &value)
Definition Fact.cc:163
QVariant rawUserMin() const
Definition Fact.cc:601
void enumsChanged()
QString enumStringValue()
Definition Fact.cc:247
QString label() const
Definition Fact.cc:534
void vehicleUpdated(const QVariant &value)
Signalled when the param write ack comes back from the vehicle.
bool hasControl() const
Definition Fact.cc:885
bool vehicleRebootRequired() const
Definition Fact.cc:805
QVariant rawValue() const
Definition Fact.h:90
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 ...