diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index d3df47e9934143efbc1353ffcd4c0c9226cc5862..8e607759ebe5840c9087320fa5485f710e82ae86 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -552,3 +552,13 @@ QString Fact::enumOrValueString(void) } return QString(); } + +double Fact::increment(void) const +{ + if (_metaData) { + return _metaData->increment(); + } else { + qWarning() << "Meta data pointer missing"; + } + return std::numeric_limits::quiet_NaN(); +} diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index 67e8a4a5b24b5d254f80895f9e402a7fd5f44305..60fae7dd44984b082a729fdfd0aff00976ab6457 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -74,6 +74,7 @@ public: Q_PROPERTY(bool valueEqualsDefault READ valueEqualsDefault NOTIFY valueChanged) Q_PROPERTY(QString valueString READ cookedValueString NOTIFY valueChanged) Q_PROPERTY(QString enumOrValueString READ enumOrValueString NOTIFY valueChanged) + Q_PROPERTY(double increment READ increment CONSTANT) /// Convert and validate value /// @param convertOnly true: validate type conversion only, false: validate against meta data as well @@ -87,8 +88,8 @@ public: QVariant cookedDefaultValue (void) const; bool defaultValueAvailable (void) const; QString cookedDefaultValueString(void) const; - QStringList bitmaskStrings (void) const; - QVariantList bitmaskValues (void) const; + QStringList bitmaskStrings (void) const; + QVariantList bitmaskValues (void) const; int enumIndex (void); // This is not const, since an unknown value can modify the enum lists QStringList enumStrings (void) const; QString enumStringValue (void); // This is not const, since an unknown value can modify the enum lists @@ -113,6 +114,7 @@ public: bool valueEqualsDefault (void) const; bool rebootRequired (void) const; QString enumOrValueString (void); // This is not const, since an unknown value can modify the enum lists + double increment (void) const; void setRawValue (const QVariant& value); void setCookedValue (const QVariant& value); diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index b1c3161cb7b52d58529a5c0007345ab6a363f8d0..3510568e3c3bce6f981bd0101b61b2d0346a8f38 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -52,6 +52,7 @@ FactMetaData::FactMetaData(QObject* parent) , _rawTranslator(_defaultTranslator) , _cookedTranslator(_defaultTranslator) , _rebootRequired(false) + , _increment(std::numeric_limits::quiet_NaN()) { } @@ -70,6 +71,7 @@ FactMetaData::FactMetaData(ValueType_t type, QObject* parent) , _rawTranslator(_defaultTranslator) , _cookedTranslator(_defaultTranslator) , _rebootRequired(false) + , _increment(std::numeric_limits::quiet_NaN()) { } @@ -103,6 +105,7 @@ const FactMetaData& FactMetaData::operator=(const FactMetaData& other) _rawTranslator = other._rawTranslator; _cookedTranslator = other._cookedTranslator; _rebootRequired = other._rebootRequired; + _increment = other._increment; return *this; } diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index 9a3661f3fa8e13a3abf1b92cd20c517c7a753890..62a624ee053677b573ee99a309ed52f16528fb8b 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -83,6 +83,10 @@ public: QString cookedUnits (void) const { return _cookedUnits; } bool rebootRequired (void) const { return _rebootRequired; } + /// Amount to increment value when used in controls such as spin button or slider with detents. + /// NaN for no increment available. + double increment (void) const { return _increment; } + Translator rawTranslator (void) const { return _rawTranslator; } Translator cookedTranslator (void) const { return _cookedTranslator; } @@ -104,6 +108,7 @@ public: void setShortDescription(const QString& shortDescription) { _shortDescription = shortDescription; } void setRawUnits (const QString& rawUnits); void setRebootRequired (bool rebootRequired) { _rebootRequired = rebootRequired; } + void setIncrement (double increment) { _increment = increment; } void setTranslators(Translator rawTranslator, Translator cookedTranslator); @@ -156,6 +161,7 @@ private: Translator _rawTranslator; Translator _cookedTranslator; bool _rebootRequired; + double _increment; struct BuiltInTranslation_s { const char* rawUnits; diff --git a/src/FirmwarePlugin/APM/APMParameterMetaData.cc b/src/FirmwarePlugin/APM/APMParameterMetaData.cc index ce391fbba3d0704caa5c292c026bac2bf2e18fd0..a1b9209681717741ebf429880e93cd90ebaa5693 100644 --- a/src/FirmwarePlugin/APM/APMParameterMetaData.cc +++ b/src/FirmwarePlugin/APM/APMParameterMetaData.cc @@ -580,6 +580,17 @@ void APMParameterMetaData::addMetaDataToFact(Fact* fact, MAV_TYPE vehicleType) } } + if (!rawMetaData->incrementSize.isEmpty()) { + double increment; + bool ok; + increment = rawMetaData->incrementSize.toDouble(&ok); + if (ok) { + metaData->setIncrement(increment); + } else { + qCDebug(APMParameterMetaDataLog) << "Invalid value for increment, name:" << metaData->name() << " increment:" << rawMetaData->incrementSize; + } + } + // FixMe:: not handling increment size as their is no place for it in FactMetaData and no ui fact->setMetaData(metaData); } diff --git a/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc b/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc index 043eed21b1c13212e220246e1cb23720528dc03d..9b31cac9514a42a4cb4134d43a87c5a2e127ad5c 100644 --- a/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc +++ b/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc @@ -306,6 +306,17 @@ void PX4ParameterMetaData::loadParameterFactMetaDataFile(const QString& metaData << " type:" << metaData->type() << " value:" << enumValueStr << " error:" << errorString; } + } else if (elementName == "increment") { + Q_ASSERT(metaData); + double increment; + bool ok; + QString text = xml.readElementText(); + increment = text.toDouble(&ok); + if (ok) { + metaData->setIncrement(increment); + } else { + qCWarning(PX4ParameterMetaDataLog) << "Invalid value for increment, name:" << metaData->name() << " increment:" << text; + } } else { qDebug() << "Unknown element in XML: " << elementName; } diff --git a/src/QmlControls/FactSliderPanel.qml b/src/QmlControls/FactSliderPanel.qml index 09b0892105eb7cb7e756c7c91459411ec6000d8d..b1d132122f78aca06df10d3ffe3f0621e7440a29 100644 --- a/src/QmlControls/FactSliderPanel.qml +++ b/src/QmlControls/FactSliderPanel.qml @@ -122,7 +122,7 @@ QGCView { anchors.right: parent.right minimumValue: min maximumValue: max - stepSize: step + stepSize: isNaN(fact.increment) ? step : fact.increment tickmarksEnabled: true property Fact fact: controller.getParameterFact(-1, param)