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(QVariant defaultValue READ cookedDefaultValue CONSTANT)
27 Q_PROPERTY(QString defaultValueString READ cookedDefaultValueString CONSTANT)
28 Q_PROPERTY(bool defaultValueAvailable READ defaultValueAvailable CONSTANT)
29 Q_PROPERTY(int enumIndex READ enumIndex WRITE setEnumIndex NOTIFY valueChanged)
30 Q_PROPERTY(QStringList enumStrings READ enumStrings NOTIFY enumsChanged)
31 Q_PROPERTY(QString enumStringValue READ enumStringValue WRITE setEnumStringValue NOTIFY valueChanged)
32 Q_PROPERTY(QVariantList enumValues READ enumValues NOTIFY enumsChanged)
33 Q_PROPERTY(QString category READ category CONSTANT)
34 Q_PROPERTY(QString group READ group CONSTANT)
35 Q_PROPERTY(QString longDescription READ longDescription CONSTANT)
36 Q_PROPERTY(QVariant max READ cookedMax CONSTANT)
37 Q_PROPERTY(QString maxString READ cookedMaxString CONSTANT)
38 Q_PROPERTY(bool maxIsDefaultForType READ maxIsDefaultForType CONSTANT)
39 Q_PROPERTY(QVariant min READ cookedMin CONSTANT)
40 Q_PROPERTY(QString minString READ cookedMinString CONSTANT)
41 Q_PROPERTY(bool minIsDefaultForType READ minIsDefaultForType CONSTANT)
42 Q_PROPERTY(QVariant userMin READ cookedUserMin CONSTANT)
43 Q_PROPERTY(QString userMinString READ cookedUserMinString CONSTANT)
44 Q_PROPERTY(QVariant userMax READ cookedUserMax CONSTANT)
45 Q_PROPERTY(QString userMaxString READ cookedUserMaxString CONSTANT)
46 Q_PROPERTY(QString name READ name CONSTANT)
47 Q_PROPERTY(bool vehicleRebootRequired READ vehicleRebootRequired CONSTANT)
48 Q_PROPERTY(bool qgcRebootRequired READ qgcRebootRequired CONSTANT)
49 Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
50 Q_PROPERTY(QString label READ label CONSTANT)
51 Q_PROPERTY(QString units READ cookedUnits CONSTANT)
52 Q_PROPERTY(QVariant value READ cookedValue WRITE setCookedValue NOTIFY valueChanged)
53 Q_PROPERTY(QVariant rawValue READ rawValue WRITE setRawValue NOTIFY rawValueChanged)
54 Q_PROPERTY(bool valueEqualsDefault READ valueEqualsDefault NOTIFY valueChanged)
55 Q_PROPERTY(QString invalidValueString READ invalidValueString CONSTANT)
56 Q_PROPERTY(QString valueString READ cookedValueString NOTIFY valueChanged)
57 Q_PROPERTY(QString enumOrValueString READ enumOrValueString NOTIFY valueChanged)
58 Q_PROPERTY(double increment READ cookedIncrement CONSTANT)
59 Q_PROPERTY(bool typeIsString READ typeIsString CONSTANT)
60 Q_PROPERTY(bool typeIsBool READ typeIsBool CONSTANT)
61 Q_PROPERTY(bool hasControl READ hasControl CONSTANT)
62 Q_PROPERTY(bool readOnly READ readOnly CONSTANT)
63 Q_PROPERTY(bool writeOnly READ writeOnly CONSTANT)
64 Q_PROPERTY(bool volatileValue READ volatileValue CONSTANT)
65
66public:
67 explicit Fact(QObject *parent = nullptr);
68 explicit Fact(int componentId, const QString &name, FactMetaData::ValueType_t type, QObject *parent = nullptr);
69 explicit Fact(const Fact &other, QObject *parent = nullptr);
70
73 explicit Fact(const QString &settingsGroup, FactMetaData *metaData, QObject *parent = nullptr);
74 virtual ~Fact();
75
76 const Fact &operator=(const Fact &other);
77
81 Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly);
83 Q_INVOKABLE QVariant clamp(const QString &cookedValue);
84 QVariant cookedValue() const;
85 QVariant rawValue() const
86 {
87 QMutexLocker<QRecursiveMutex> locker(&_rawValueMutex);
88 return _rawValue;
89 }
90 int componentId() const { return _componentId; }
91 int decimalPlaces() const;
92 QVariant rawDefaultValue() const;
93 QVariant cookedDefaultValue() const;
94 bool defaultValueAvailable() const;
95 QString cookedDefaultValueString() const;
96 QStringList bitmaskStrings() const;
97 QVariantList bitmaskValues() const;
99 QStringList selectedBitmaskStrings() const;
100 int enumIndex(); // This is not const, since an unknown value can modify the enum lists
101 QStringList enumStrings() const;
102 QString enumStringValue(); // This is not const, since an unknown value can modify the enum lists
103 QVariantList enumValues() const;
104 QString category() const;
105 QString group() const;
106 QString longDescription() const;
107 QVariant rawMax() const;
108 QVariant cookedMax() const;
109 QString cookedMaxString() const;
110 bool maxIsDefaultForType() const;
111 QVariant rawMin() const;
112 QVariant cookedMin() const;
113 QString cookedMinString() const;
114 bool minIsDefaultForType() const;
115 QVariant rawUserMin() const;
116 QVariant cookedUserMin() const;
117 QString cookedUserMinString() const;
118 QVariant rawUserMax() const;
119 QVariant cookedUserMax() const;
120 QString cookedUserMaxString() const;
121 QString name() const { return _name; }
122 QString label() const;
123 QString shortDescription() const;
125 QString cookedUnits() const;
126 QString rawUnits() const;
127 QString invalidValueString(int decimalPlaces) const;
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
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.
162
164 void forceSetRawValue(const QVariant &value);
165
169 void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData = false);
170
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:
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;
211
212 static constexpr const char *kMissingMetadata = "Meta data pointer missing";
213
214private slots:
215 void _checkForRebootMessaging();
216
217private:
218 void _init();
219};
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:208
QString _name
Definition Fact.h:202
QStringList bitmaskStrings() const
Definition Fact.cc:306
bool writeOnly() const
Definition Fact.cc:838
int valueIndex(const QString &value) const
Definition Fact.cc:166
Q_INVOKABLE FactValueSliderListModel * valueSliderModel()
Definition Fact.cc:858
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:177
int enumIndex()
Definition Fact.cc:245
QString enumOrValueString()
Definition Fact.cc:784
void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData=false)
Definition Fact.cc:674
QStringList selectedBitmaskStrings() const
Provide a list of selected strings based on the fact value with the bitmaskString/bitmaskValues map.
Definition Fact.cc:326
QString cookedUnits() const
Definition Fact.cc:514
bool qgcRebootRequired() const
Definition Fact.cc:748
QString longDescription() const
Definition Fact.cc:494
virtual ~Fact()
Definition Fact.cc:70
bool _deferredValueChangeSignal
Definition Fact.h:209
QVariant cookedValue() const
Definition Fact.cc:220
void sendValueChangedSignalsChanged(bool sendValueChangedSignals)
bool typeIsString() const
Definition Fact.h:137
QString shortDescription() const
Definition Fact.cc:474
void containerSetRawValue(const QVariant &value)
Value coming from Vehicle. This does NOT send a _containerRawValueChanged signal.
Definition Fact.cc:192
FactMetaData * _metaData
Definition Fact.h:207
void clearDeferredValueChangeSignal()
Definition Fact.h:160
QVariantList enumValues() const
Definition Fact.cc:286
QString cookedMaxString() const
Definition Fact.cc:614
FactMetaData * metaData()
Definition Fact.h:171
QVariant rawDefaultValue() const
Definition Fact.cc:443
bool valueEqualsDefault() const
Definition Fact.cc:683
FactMetaData::ValueType_t _type
Definition Fact.h:206
double rawIncrement() const
Definition Fact.cc:798
bool maxIsDefaultForType() const
Definition Fact.cc:634
bool readOnly() const
Definition Fact.cc:828
QString cookedMinString() const
Definition Fact.cc:564
int componentId() const
Definition Fact.h:90
QString cookedUserMinString() const
Definition Fact.cc:569
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:296
void sendDeferredValueChangedSignal()
Definition Fact.cc:776
QVariant cookedUserMax() const
Definition Fact.cc:604
QString invalidValueString() const
Definition Fact.h:128
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:205
QString cookedUserMaxString() const
Definition Fact.cc:619
static constexpr const char * kMissingMetadata
Definition Fact.h:212
void bitmaskValuesChanged()
QString group() const
Definition Fact.cc:664
FactMetaData::ValueType_t type() const
Definition Fact.h:124
void setSendValueChangedSignals(bool sendValueChangedSignals)
Definition Fact.cc:758
QVariant cookedUserMin() const
Definition Fact.cc:554
QString cookedDefaultValueString() const
Definition Fact.cc:469
const Fact & operator=(const Fact &other)
Definition Fact.cc:80
QVariant cookedMin() const
Definition Fact.cc:534
double cookedIncrement() const
Definition Fact.cc:808
void setRawValue(const QVariant &value)
Definition Fact.cc:128
QString rawValueString() const
Definition Fact.cc:433
void setEnumIndex(int index)
Definition Fact.cc:183
bool sendValueChangedSignals() const
Definition Fact.h:158
bool defaultValueAvailable() const
Definition Fact.cc:697
QVariant rawUserMax() const
Definition Fact.cc:594
bool volatileValue() const
Definition Fact.cc:848
QVariant rawMax() const
Definition Fact.cc:574
void forceSetRawValue(const QVariant &value)
Sets and sends new value to vehicle even if value is the same.
Definition Fact.cc:105
void bitmaskStringsChanged()
int decimalPlaces() const
Definition Fact.cc:644
QStringList enumStrings() const
Definition Fact.cc:276
QString cookedValueString() const
Definition Fact.cc:438
QString name() const
Definition Fact.h:121
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:428
QVariantList bitmaskValues() const
Definition Fact.cc:316
bool typeIsBool() const
Definition Fact.h:138
bool deferredValueChangeSignal() const
Definition Fact.h:159
QVariant cookedMax() const
Definition Fact.cc:584
QVariant rawMin() const
Definition Fact.cc:524
Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly)
Definition Fact.cc:707
void setEnumStringValue(const QString &value)
Definition Fact.cc:175
int _componentId
Definition Fact.h:203
QString rawUnits() const
Definition Fact.cc:504
Q_INVOKABLE QVariant clamp(const QString &cookedValue)
Convert and clamp value.
Definition Fact.cc:722
QString _variantToString(const QVariant &variant, int decimalPlaces) const
Definition Fact.cc:354
FactValueSliderListModel * _valueSliderModel
Definition Fact.h:210
QVariant cookedDefaultValue() const
Definition Fact.cc:456
QString category() const
Definition Fact.cc:654
bool minIsDefaultForType() const
Definition Fact.cc:624
QVariant _rawValue
Definition Fact.h:204
void _sendValueChangedSignal(const QVariant &value)
Definition Fact.cc:766
void setCookedValue(const QVariant &value)
Definition Fact.cc:157
QVariant rawUserMin() const
Definition Fact.cc:544
void enumsChanged()
QString enumStringValue()
Definition Fact.cc:231
QString label() const
Definition Fact.cc:484
void vehicleUpdated(const QVariant &value)
Signalled when the param write ack comes back from the vehicle.
bool hasControl() const
Definition Fact.cc:818
bool vehicleRebootRequired() const
Definition Fact.cc:738
QVariant rawValue() const
Value after translation.
Definition Fact.h:85
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 ...