17 setMetaData(metaData);
25 , _componentId(componentId)
38 , _name(metaData->name())
40 , _type(metaData->type())
135 bool changed =
false;
195 QVariant currentRaw = value;
196 bool changed =
false;
235 if ((enumIndex >= 0) && (enumIndex < _metaData->
enumStrings().count())) {
257 const double diff = fabs(enumValue.toDouble() -
rawValue().toDouble());
258 static constexpr double accuracy = 1.0 / 1000000.0;
259 if (diff < accuracy) {
282 return QStringList();
292 return QVariantList();
312 return QStringList();
322 return QVariantList();
331 if (values.size() != strings.size()) {
332 qCWarning(FactLog) <<
"Size of bitmask value and string is different." <<
name();
336 QStringList selected;
337 for (qsizetype i = 0; i < values.size(); i++) {
338 if (
rawValue().toInt() & values[i].toInt()) {
339 selected += strings[i];
343 if (selected.isEmpty()) {
344 selected +=
"Not value selected";
358 const auto stripNegativeZero = [](QString &candidate) {
359 static const QRegularExpression reNegativeZero(QStringLiteral(
"^-0\\.0+$"));
360 const auto match = reNegativeZero.match(candidate);
361 if (match.hasMatch() || candidate == QStringLiteral(
"-0")) {
362 candidate = candidate.mid(1);
369 const float fValue = variant.toFloat();
370 if (qIsNaN(fValue)) {
373 valueString = QStringLiteral(
"%1").arg(fValue, 0,
'f',
decimalPlaces);
374 stripNegativeZero(valueString);
380 const double dValue = variant.toDouble();
381 if (qIsNaN(dValue)) {
384 valueString = QStringLiteral(
"%1").arg(dValue, 0,
'f',
decimalPlaces);
385 stripNegativeZero(valueString);
390 valueString = variant.toBool() ? tr(
"true") : tr(
"false");
394 const double dValue = variant.toDouble();
395 if (qIsNaN(dValue)) {
398 QTime time(0, 0, 0, 0);
399 time = time.addSecs(dValue);
400 valueString = time.toString(QStringLiteral(
"hh:mm:ss"));
405 valueString = variant.toString();
417 return QStringLiteral(
"–");
419 return QStringLiteral(
"–.") +
422 return QStringLiteral(
"––:––:––");
424 return QStringLiteral(
"–");
447 qCDebug(FactLog) <<
"Access to unavailable default value";
460 qCDebug(FactLog) <<
"Access to unavailable default value";
718 return QStringLiteral(
"Internal error: Meta data pointer missing");
805 return std::numeric_limits<double>::quiet_NaN();
815 return std::numeric_limits<double>::quiet_NaN();
867void Fact::_checkForRebootMessaging()
#define QGC_LOGGING_CATEGORY(name, categoryStr)
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.
bool _sendValueChangedSignals
QStringList bitmaskStrings() const
int valueIndex(const QString &value) const
Q_INVOKABLE FactValueSliderListModel * valueSliderModel()
QString enumOrValueString()
void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData=false)
QStringList selectedBitmaskStrings() const
Provide a list of selected strings based on the fact value with the bitmaskString/bitmaskValues map.
QString cookedUnits() const
bool qgcRebootRequired() const
QString longDescription() const
Fact(QObject *parent=nullptr)
bool _deferredValueChangeSignal
QVariant cookedValue() const
void sendValueChangedSignalsChanged(bool sendValueChangedSignals)
QString shortDescription() const
void containerSetRawValue(const QVariant &value)
Value coming from Vehicle. This does NOT send a _containerRawValueChanged signal.
QVariantList enumValues() const
QString cookedMaxString() const
FactMetaData * metaData()
QVariant rawDefaultValue() const
bool valueEqualsDefault() const
FactMetaData::ValueType_t _type
double rawIncrement() const
bool maxIsDefaultForType() const
QString cookedMinString() const
QString cookedUserMinString() const
void setEnumInfo(const QStringList &strings, const QVariantList &values)
Generally this is done during parsing. But if you know what you are doing, you can.
void sendDeferredValueChangedSignal()
QVariant cookedUserMax() const
QString invalidValueString() const
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
QString cookedUserMaxString() const
static constexpr const char * kMissingMetadata
FactMetaData::ValueType_t type() const
void setSendValueChangedSignals(bool sendValueChangedSignals)
QVariant cookedUserMin() const
QString cookedDefaultValueString() const
const Fact & operator=(const Fact &other)
QVariant cookedMin() const
double cookedIncrement() const
void setRawValue(const QVariant &value)
QString rawValueString() const
void setEnumIndex(int index)
bool sendValueChangedSignals() const
bool defaultValueAvailable() const
QVariant rawUserMax() const
bool volatileValue() const
void forceSetRawValue(const QVariant &value)
Sets and sends new value to vehicle even if value is the same.
int decimalPlaces() const
QStringList enumStrings() const
QString cookedValueString() const
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.
QVariantList bitmaskValues() const
QVariant cookedMax() const
Q_INVOKABLE QString validate(const QString &cookedValue, bool convertOnly)
void setEnumStringValue(const QString &value)
Q_INVOKABLE QVariant clamp(const QString &cookedValue)
Convert and clamp value.
QString _variantToString(const QVariant &variant, int decimalPlaces) const
FactValueSliderListModel * _valueSliderModel
QVariant cookedDefaultValue() const
bool minIsDefaultForType() const
void _sendValueChangedSignal(const QVariant &value)
void setCookedValue(const QVariant &value)
QVariant rawUserMin() const
QString enumStringValue()
void vehicleUpdated(const QVariant &value)
Signalled when the param write ack comes back from the vehicle.
bool vehicleRebootRequired() const
QVariant rawValue() const
Value after translation.
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 ...
static void adjustSettingMetaData(const QString &settingsGroup, FactMetaData &metaData, bool &userVisible)
void showRebootAppMessage(const QString &message, const QString &title)
Modal reboot-required message. Debounced within 2 minutes.