diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index 565fe3b921ac5b8468f490420fa72295d07b25e7..641fe22fe69b591be6024634aff6fd214bbe9648 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -31,8 +31,7 @@ Fact::Fact(QObject* parent) FactMetaData* metaData = new FactMetaData(_type, this); setMetaData(metaData); - // Better safe than sorry on object ownership - QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); + _init(); } Fact::Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent) @@ -48,7 +47,8 @@ Fact::Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObjec { FactMetaData* metaData = new FactMetaData(_type, this); setMetaData(metaData); - QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); + + _init(); } Fact::Fact(const QString& settingsGroup, FactMetaData* metaData, QObject* parent) @@ -64,13 +64,22 @@ Fact::Fact(const QString& settingsGroup, FactMetaData* metaData, QObject* parent { qgcApp()->toolbox()->corePlugin()->adjustSettingMetaData(settingsGroup, *metaData); setMetaData(metaData, true /* setDefaultFromMetaData */); + + _init(); } Fact::Fact(const Fact& other, QObject* parent) : QObject(parent) { *this = other; + + _init(); +} + +void Fact::_init(void) +{ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); + connect(this, &Fact::_containerRawValueChanged, this, &Fact::_checkForRebootMessaging); } const Fact& Fact::operator=(const Fact& other) @@ -589,10 +598,20 @@ QVariant Fact::clamp(const QString& cookedValue) return QVariant(); } -bool Fact::rebootRequired(void) const +bool Fact::vehicleRebootRequired(void) const { if (_metaData) { - return _metaData->rebootRequired(); + return _metaData->vehicleRebootRequired(); + } else { + qWarning() << kMissingMetadata << name(); + return false; + } +} + +bool Fact::qgcRebootRequired(void) const +{ + if (_metaData) { + return _metaData->qgcRebootRequired(); } else { qWarning() << kMissingMetadata << name(); return false; @@ -706,3 +725,14 @@ FactValueSliderListModel* Fact::valueSliderModel(void) } return _valueSliderModel; } + +void Fact::_checkForRebootMessaging(void) +{ + if (!qgcApp()->runningUnitTests()) { + if (vehicleRebootRequired()) { + qgcApp()->showMessage(tr("Change of parameter %1 requires a Vehicle reboot to take effect.").arg(name())); + } else if (qgcRebootRequired()) { + qgcApp()->showMessage(tr("Change of '%1' value requires restart of %2 to take effect.").arg(shortDescription()).arg(qgcApp()->applicationName())); + } + } +} diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index e409236ccb12635174d7125aeafd81e5af7e33ed..7faf62cb34abf134dfd947694cde48b3d0af1047 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -61,7 +61,8 @@ public: Q_PROPERTY(QString minString READ cookedMinString CONSTANT) Q_PROPERTY(bool minIsDefaultForType READ minIsDefaultForType CONSTANT) Q_PROPERTY(QString name READ name CONSTANT) - Q_PROPERTY(bool rebootRequired READ rebootRequired CONSTANT) + Q_PROPERTY(bool vehicleRebootRequired READ vehicleRebootRequired CONSTANT) + Q_PROPERTY(bool qgcRebootRequired READ qgcRebootRequired CONSTANT) Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT) Q_PROPERTY(QString units READ cookedUnits CONSTANT) Q_PROPERTY(QVariant value READ cookedValue WRITE setCookedValue NOTIFY valueChanged) @@ -116,7 +117,8 @@ public: QString rawValueString (void) const; QString cookedValueString (void) const; bool valueEqualsDefault (void) const; - bool rebootRequired (void) const; + bool vehicleRebootRequired (void) const; + bool qgcRebootRequired (void) const; QString enumOrValueString (void); // This is not const, since an unknown value can modify the enum lists double rawIncrement (void) const; double cookedIncrement (void) const; @@ -186,6 +188,12 @@ signals: /// /// This signal is meant for use by Fact container implementations. Used to send changed values to vehicle. void _containerRawValueChanged(const QVariant& value); + +private slots: + void _checkForRebootMessaging(void); + +private: + void _init(void); protected: QString _variantToString(const QVariant& variant, int decimalPlaces) const; diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index 4a9c5aa407909d0d273d288d603a127ebeaac9c4..4d07e198b64cba2da5b01b702edf799cfd485e83 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -80,6 +80,7 @@ const char* FactMetaData::_minJsonKey = "min"; const char* FactMetaData::_maxJsonKey = "max"; const char* FactMetaData::_incrementJsonKey = "increment"; const char* FactMetaData::_hasControlJsonKey = "control"; +const char* FactMetaData::_qgcRebootRequiredJsonKey = "qgcRebootRequired"; FactMetaData::FactMetaData(QObject* parent) : QObject (parent) @@ -93,7 +94,8 @@ FactMetaData::FactMetaData(QObject* parent) , _minIsDefaultForType (true) , _rawTranslator (_defaultTranslator) , _cookedTranslator (_defaultTranslator) - , _rebootRequired (false) + , _vehicleRebootRequired(false) + , _qgcRebootRequired (false) , _rawIncrement (std::numeric_limits::quiet_NaN()) , _hasControl (true) , _readOnly (false) @@ -116,7 +118,8 @@ FactMetaData::FactMetaData(ValueType_t type, QObject* parent) , _minIsDefaultForType (true) , _rawTranslator (_defaultTranslator) , _cookedTranslator (_defaultTranslator) - , _rebootRequired (false) + , _vehicleRebootRequired(false) + , _qgcRebootRequired (false) , _rawIncrement (std::numeric_limits::quiet_NaN()) , _hasControl (true) , _readOnly (false) @@ -146,7 +149,8 @@ FactMetaData::FactMetaData(ValueType_t type, const QString name, QObject* parent , _name (name) , _rawTranslator (_defaultTranslator) , _cookedTranslator (_defaultTranslator) - , _rebootRequired (false) + , _vehicleRebootRequired(false) + , _qgcRebootRequired (false) , _rawIncrement (std::numeric_limits::quiet_NaN()) , _hasControl (true) , _readOnly (false) @@ -180,7 +184,8 @@ const FactMetaData& FactMetaData::operator=(const FactMetaData& other) _cookedUnits = other._cookedUnits; _rawTranslator = other._rawTranslator; _cookedTranslator = other._cookedTranslator; - _rebootRequired = other._rebootRequired; + _vehicleRebootRequired = other._vehicleRebootRequired; + _qgcRebootRequired = other._qgcRebootRequired; _rawIncrement = other._rawIncrement; _hasControl = other._hasControl; _readOnly = other._readOnly; @@ -363,7 +368,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO typedValue = QVariant(rawValue.toFloat(&convertOk)); if (!convertOnly && convertOk) { if (typedValue < rawMin() || typedValue > rawMax()) { - errorString = tr("Value must be within %1 and %2").arg(rawMin().toFloat()).arg(rawMax().toFloat()); + errorString = tr("Value must be within %1 and %2").arg(rawMin().toDouble()).arg(rawMax().toDouble()); } } break; @@ -1065,15 +1070,16 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec } QList keyInfoList = { - { _nameJsonKey, QJsonValue::String, true }, - { _typeJsonKey, QJsonValue::String, true }, - { _shortDescriptionJsonKey, QJsonValue::String, false }, - { _longDescriptionJsonKey, QJsonValue::String, false }, - { _unitsJsonKey, QJsonValue::String, false }, - { _decimalPlacesJsonKey, QJsonValue::Double, false }, - { _minJsonKey, QJsonValue::Double, false }, - { _maxJsonKey, QJsonValue::Double, false }, - { _hasControlJsonKey, QJsonValue::Bool, false }, + { _nameJsonKey, QJsonValue::String, true }, + { _typeJsonKey, QJsonValue::String, true }, + { _shortDescriptionJsonKey, QJsonValue::String, false }, + { _longDescriptionJsonKey, QJsonValue::String, false }, + { _unitsJsonKey, QJsonValue::String, false }, + { _decimalPlacesJsonKey, QJsonValue::Double, false }, + { _minJsonKey, QJsonValue::Double, false }, + { _maxJsonKey, QJsonValue::Double, false }, + { _hasControlJsonKey, QJsonValue::Bool, false }, + { _qgcRebootRequiredJsonKey, QJsonValue::Bool, false }, }; if (!JsonHelper::validateKeys(json, keyInfoList, errorString)) { qWarning() << errorString; @@ -1189,6 +1195,12 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec metaData->setHasControl(true); } + if (json.contains(_qgcRebootRequiredJsonKey)) { + metaData->setQGCRebootRequired(json[_qgcRebootRequiredJsonKey].toBool()); + } else { + metaData->setQGCRebootRequired(false); + } + return metaData; } diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index da0ee47e155944d61122b65945ac9ee6a4b48ca5..e2415152b19f1e65db74fa28befe5d5af7a92e28 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -103,7 +103,8 @@ public: ValueType_t type (void) const { return _type; } QString rawUnits (void) const { return _rawUnits; } QString cookedUnits (void) const { return _cookedUnits; } - bool rebootRequired (void) const { return _rebootRequired; } + bool vehicleRebootRequired (void) const { return _vehicleRebootRequired; } + bool qgcRebootRequired (void) const { return _qgcRebootRequired; } bool hasControl (void) const { return _hasControl; } bool readOnly (void) const { return _readOnly; } bool writeOnly (void) const { return _writeOnly; } @@ -123,24 +124,25 @@ public: /// Used to add new values to the enum lists after the meta data has been loaded void addEnumInfo(const QString& name, const QVariant& value); - void setDecimalPlaces (int decimalPlaces) { _decimalPlaces = decimalPlaces; } - void setRawDefaultValue (const QVariant& rawDefaultValue); - void setBitmaskInfo (const QStringList& strings, const QVariantList& values); - void setEnumInfo (const QStringList& strings, const QVariantList& values); - void setCategory (const QString& category) { _category = category; } - void setGroup (const QString& group) { _group = group; } - void setLongDescription (const QString& longDescription) { _longDescription = longDescription;} - void setRawMax (const QVariant& rawMax); - void setRawMin (const QVariant& rawMin); - void setName (const QString& name) { _name = name; } - void setShortDescription(const QString& shortDescription) { _shortDescription = shortDescription; } - void setRawUnits (const QString& rawUnits); - void setRebootRequired (bool rebootRequired) { _rebootRequired = rebootRequired; } - void setRawIncrement (double increment) { _rawIncrement = increment; } - void setHasControl (bool bValue) { _hasControl = bValue; } - void setReadOnly (bool bValue) { _readOnly = bValue; } - void setWriteOnly (bool bValue) { _writeOnly = bValue; } - void setVolatileValue (bool bValue); + void setDecimalPlaces (int decimalPlaces) { _decimalPlaces = decimalPlaces; } + void setRawDefaultValue (const QVariant& rawDefaultValue); + void setBitmaskInfo (const QStringList& strings, const QVariantList& values); + void setEnumInfo (const QStringList& strings, const QVariantList& values); + void setCategory (const QString& category) { _category = category; } + void setGroup (const QString& group) { _group = group; } + void setLongDescription (const QString& longDescription) { _longDescription = longDescription;} + void setRawMax (const QVariant& rawMax); + void setRawMin (const QVariant& rawMin); + void setName (const QString& name) { _name = name; } + void setShortDescription (const QString& shortDescription) { _shortDescription = shortDescription; } + void setRawUnits (const QString& rawUnits); + void setVehicleRebootRequired (bool rebootRequired) { _vehicleRebootRequired = rebootRequired; } + void setQGCRebootRequired (bool rebootRequired) { _qgcRebootRequired = rebootRequired; } + void setRawIncrement (double increment) { _rawIncrement = increment; } + void setHasControl (bool bValue) { _hasControl = bValue; } + void setReadOnly (bool bValue) { _readOnly = bValue; } + void setWriteOnly (bool bValue) { _writeOnly = bValue; } + void setVolatileValue (bool bValue); void setTranslators(Translator rawTranslator, Translator cookedTranslator); @@ -248,7 +250,8 @@ private: QString _cookedUnits; Translator _rawTranslator; Translator _cookedTranslator; - bool _rebootRequired; + bool _vehicleRebootRequired; + bool _qgcRebootRequired; double _rawIncrement; bool _hasControl; bool _readOnly; @@ -276,18 +279,19 @@ private: static const AppSettingsTranslation_s _rgAppSettingsTranslations[]; - static const char* _nameJsonKey; - static const char* _decimalPlacesJsonKey; - static const char* _typeJsonKey; - static const char* _shortDescriptionJsonKey; - static const char* _longDescriptionJsonKey; - static const char* _unitsJsonKey; - static const char* _defaultValueJsonKey; - static const char* _mobileDefaultValueJsonKey; - static const char* _minJsonKey; - static const char* _maxJsonKey; - static const char* _incrementJsonKey; + static const char* _nameJsonKey; + static const char* _decimalPlacesJsonKey; + static const char* _typeJsonKey; + static const char* _shortDescriptionJsonKey; + static const char* _longDescriptionJsonKey; + static const char* _unitsJsonKey; + static const char* _defaultValueJsonKey; + static const char* _mobileDefaultValueJsonKey; + static const char* _minJsonKey; + static const char* _maxJsonKey; + static const char* _incrementJsonKey; static const char* _hasControlJsonKey; + static const char* _qgcRebootRequiredJsonKey; }; #endif diff --git a/src/FactSystem/ParameterManager.cc b/src/FactSystem/ParameterManager.cc index 78fe43f0c55e5b250c0388f381946a6be8d49b50..0ae8221c6d9f66ea9f7329d33554e5293a75832f 100644 --- a/src/FactSystem/ParameterManager.cc +++ b/src/FactSystem/ParameterManager.cc @@ -403,10 +403,6 @@ void ParameterManager::_valueUpdated(const QVariant& value) _writeParameterRaw(componentId, fact->name(), value); qCDebug(ParameterManagerLog) << _logVehiclePrefix(componentId) << "Set parameter - name:" << name << value << "(_waitingParamTimeoutTimer started)"; - - if (fact->rebootRequired() && !qgcApp()->runningUnitTests()) { - qgcApp()->showMessage(tr("Change of parameter %1 requires a Vehicle reboot to take effect").arg(name)); - } } void ParameterManager::refreshAllParameters(uint8_t componentId) diff --git a/src/FirmwarePlugin/APM/APMParameterMetaData.cc b/src/FirmwarePlugin/APM/APMParameterMetaData.cc index d297313e7c4cec9d3d23eba6ff337361597f4458..945eda943c4b6a84ef8a3424416787a3f2aca459 100644 --- a/src/FirmwarePlugin/APM/APMParameterMetaData.cc +++ b/src/FirmwarePlugin/APM/APMParameterMetaData.cc @@ -443,7 +443,7 @@ void APMParameterMetaData::addMetaDataToFact(Fact* fact, MAV_TYPE vehicleType) metaData->setName(rawMetaData->name); metaData->setCategory(rawMetaData->category); metaData->setGroup(rawMetaData->group); - metaData->setRebootRequired(rawMetaData->rebootRequired); + metaData->setVehicleRebootRequired(rawMetaData->rebootRequired); if (!rawMetaData->shortDescription.isEmpty()) { metaData->setShortDescription(rawMetaData->shortDescription); diff --git a/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc b/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc index 5654a2a9c8cb81695e5b7800fe43fd7f2e7ac0cb..ea8c83b1a74d60cff0ef19407f8e09e18bcaa6d9 100644 --- a/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc +++ b/src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc @@ -305,7 +305,7 @@ void PX4ParameterMetaData::loadParameterFactMetaDataFile(const QString& metaData QString text = xml.readElementText(); qCDebug(PX4ParameterMetaDataLog) << "RebootRequired:" << text; if (text.compare("true", Qt::CaseInsensitive) == 0) { - metaData->setRebootRequired(true); + metaData->setVehicleRebootRequired(true); } } else if (elementName == "values") { diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index c7fb3b6d551816fb143de1788370f7f4113d2e47..d8fc6973f006198fcb93b448303c6eddc263b792 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -125,14 +125,15 @@ "defaultValue": false }, { - "name": "BaseDeviceFontPointSize", - "shortDescription": "Application font size", - "longDescription": "The point size for the default font used.", - "type": "uint32", - "units": "pt", - "min": 6, - "max": 48, - "defaultValue": 0 + "name": "BaseDeviceFontPointSize", + "shortDescription": "Application font size", + "longDescription": "The point size for the default font used.", + "type": "uint32", + "units": "pt", + "min": 6, + "max": 48, + "defaultValue": 0, + "qgcRebootRequired": true }, { "name": "StyleIsDark", diff --git a/src/Settings/RTK.SettingsGroup.json b/src/Settings/RTK.SettingsGroup.json index 4283c69696b980d55aaacbca0f36a9a1eca32ea1..bd4d54ee8216a306903e94198500a990a53c59a2 100644 --- a/src/Settings/RTK.SettingsGroup.json +++ b/src/Settings/RTK.SettingsGroup.json @@ -1,22 +1,24 @@ [ { - "name": "SurveyInAccuracyLimit", - "shortDescription": "Survey in accuracy limit", - "longDescription": "The maximum accuracy allowed prior to completing survey in.", - "type": "double", - "defaultValue": 2.0, - "min": 0.5, - "units": "m", - "decimalPlaces": 1 + "name": "SurveyInAccuracyLimit", + "shortDescription": "Survey in accuracy (U-blox only)", + "longDescription": "The maximum accuracy allowed prior to completing survey in.", + "type": "double", + "defaultValue": 2.0, + "min": 0.5, + "units": "m", + "decimalPlaces": 1, + "qgcRebootRequired": true }, { - "name": "SurveyInMinObservationDuration", - "shortDescription": "Minimum observation time", - "longDescription": "Defines the minimum amount of observation time for the position calculation.", - "type": "Uint32", - "defaultValue": 180, - "min": 1, - "units": "secs", - "decimalPlaces": 0 + "name": "SurveyInMinObservationDuration", + "shortDescription": "Minimum observation time", + "longDescription": "Defines the minimum amount of observation time for the position calculation.", + "type": "Uint32", + "defaultValue": 180, + "min": 1, + "units": "secs", + "decimalPlaces": 0, + "qgcRebootRequired": true } ] diff --git a/src/Settings/UnitsSettings.cc b/src/Settings/UnitsSettings.cc index bab937858c3e79b8b3a83169f36f0152326f314c..86e37468d7a2b02a016e6163ff3dcc9d9ef9cf80 100644 --- a/src/Settings/UnitsSettings.cc +++ b/src/Settings/UnitsSettings.cc @@ -43,8 +43,10 @@ Fact* UnitsSettings::distanceUnits(void) FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(distanceUnitsSettingsName); + metaData->setShortDescription(tr("Distance units")); metaData->setEnumInfo(enumStrings, enumValues); metaData->setRawDefaultValue(DistanceUnitsMeters); + metaData->setQGCRebootRequired(true); _distanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this); @@ -66,8 +68,10 @@ Fact* UnitsSettings::areaUnits(void) FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(areaUnitsSettingsName); + metaData->setShortDescription(tr("Area units")); metaData->setEnumInfo(enumStrings, enumValues); metaData->setRawDefaultValue(AreaUnitsSquareMeters); + metaData->setQGCRebootRequired(true); _areaUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } @@ -88,8 +92,10 @@ Fact* UnitsSettings::speedUnits(void) FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(speedUnitsSettingsName); + metaData->setShortDescription(tr("Speed units")); metaData->setEnumInfo(enumStrings, enumValues); metaData->setRawDefaultValue(SpeedUnitsMetersPerSecond); + metaData->setQGCRebootRequired(true); _speedUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } @@ -109,8 +115,10 @@ Fact* UnitsSettings::temperatureUnits(void) FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(temperatureUnitsSettingsName); + metaData->setShortDescription(tr("Temperature units")); metaData->setEnumInfo(enumStrings, enumValues); metaData->setRawDefaultValue(TemperatureUnitsCelsius); + metaData->setQGCRebootRequired(true); _temperatureUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index a82c319726efea81cd9eeca296955771b82a9d79..52b3767c815e465ec7db7fbf7a68c9ffabfb4f5b 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -38,7 +38,7 @@ QGCView { property Fact _userBrandImageOutdoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageOutdoor property real _labelWidth: ScreenTools.defaultFontPixelWidth * 20 property real _comboFieldWidth: ScreenTools.defaultFontPixelWidth * 25 - property real _valueFieldWidth: ScreenTools.defaultFontPixelWidth * 8 + property real _valueFieldWidth: ScreenTools.defaultFontPixelWidth * 10 property Fact _mapProvider: QGroundControl.settingsManager.flightMapSettings.mapProvider property Fact _mapType: QGroundControl.settingsManager.flightMapSettings.mapType property Fact _followTarget: QGroundControl.settingsManager.appSettings.followTarget @@ -47,8 +47,6 @@ QGCView { readonly property real _internalWidthRatio: 0.8 - readonly property string _requiresRestart: qsTr("(Requires Restart)") - QGCPalette { id: qgcPal } QGCViewPanel { @@ -72,7 +70,7 @@ QGCView { QGCLabel { id: unitsSectionLabel - text: qsTr("Units (Requires Restart)") + text: qsTr("Units") visible: QGroundControl.settingsManager.unitsSettings.visible } Rectangle { @@ -233,9 +231,6 @@ QGCView { } } } - QGCLabel { - text: _requiresRestart - } } @@ -384,7 +379,7 @@ QGCView { QGCLabel { id: rtkSectionLabel - text: qsTr("RTK GPS (Requires Restart)") + text: qsTr("RTK GPS") visible: QGroundControl.settingsManager.rtkSettings.visible } Rectangle { @@ -402,16 +397,18 @@ QGCView { anchors.horizontalCenter: parent.horizontalCenter columns: 2 - QGCLabel { text: qsTr("Survey in accuracy (U-blox only)") } + property var rtkSettings: QGroundControl.settingsManager.rtkSettings + + QGCLabel { text: rtkGrid.rtkSettings.surveyInAccuracyLimit.shortDescription } FactTextField { Layout.preferredWidth: _valueFieldWidth - fact: QGroundControl.settingsManager.rtkSettings.surveyInAccuracyLimit + fact: rtkGrid.rtkSettings.surveyInAccuracyLimit } - QGCLabel { text: qsTr("Minimum observation duration") } + QGCLabel { text: rtkGrid.rtkSettings.surveyInMinObservationDuration.shortDescription } FactTextField { Layout.preferredWidth: _valueFieldWidth - fact: QGroundControl.settingsManager.rtkSettings.surveyInMinObservationDuration + fact: rtkGrid.rtkSettings.surveyInMinObservationDuration } } }