diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index 83fe83e9223ba126e333c3ea5a1a460e086e642f..8d882983789fec0def448f3f36cdc142ce906bcd 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -7,12 +7,10 @@ * ****************************************************************************/ - -/// @file -/// @author Don Gagne - #include "Fact.h" #include "QGCMAVLink.h" +#include "QGCApplication.h" +#include "QGCCorePlugin.h" #include #include @@ -50,6 +48,21 @@ Fact::Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObjec QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); } +Fact::Fact(FactMetaData* metaData, QObject* parent) + : QObject(parent) + , _name (metaData->name()) + , _componentId (0) + , _rawValue (0) + , _type (metaData->type()) + , _metaData (NULL) + , _sendValueChangedSignals (true) + , _deferredValueChangeSignal(false) +{ + // Allow core plugin a chance to override the default value + qgcApp()->toolbox()->corePlugin()->adjustSettingMetaData(*metaData); + setMetaData(metaData, true /* setDefaultFromMetaData */); +} + Fact::Fact(const Fact& other, QObject* parent) : QObject(parent) { diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index 63ee9a584dbc13d1aecd13ba05632bc6d7cac284..c8888ea5d42cca87edf7d0061aeb54850a9bd92c 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -31,6 +31,10 @@ public: Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent = NULL); Fact(const Fact& other, QObject* parent = NULL); + /// Creates a Fact using the name and type from metaData. Also calls QGCCorePlugin::adjustSettingsMetaData allowing + /// custom builds to override the metadata. + Fact(FactMetaData* metaData, QObject* parent = NULL); + const Fact& operator=(const Fact& other); Q_PROPERTY(int componentId READ componentId CONSTANT) diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index af36a4f52719241d13eb0b887b7f2bbfebba35d2..c906acac02514d2e3e26d713e9ea5f5b368b6747 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -986,29 +986,58 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec if (json.contains(_unitsJsonKey)) { metaData->setRawUnits(json[_unitsJsonKey].toString()); } + + QString defaultValueJsonKey; #ifdef __mobile__ if (json.contains(_mobileDefaultValueJsonKey)) { - metaData->setRawDefaultValue(json[_mobileDefaultValueJsonKey].toVariant()); - } else if (json.contains(_defaultValueJsonKey)) { - metaData->setRawDefaultValue(json[_defaultValueJsonKey].toVariant()); - } -#else - if (json.contains(_defaultValueJsonKey)) { - metaData->setRawDefaultValue(json[_defaultValueJsonKey].toVariant()); + defaultValueJsonKey = _mobileDefaultValueJsonKey } #endif + if (defaultValueJsonKey.isEmpty() && json.contains(_defaultValueJsonKey)) { + defaultValueJsonKey = _defaultValueJsonKey; + } + if (!defaultValueJsonKey.isEmpty()) { + QVariant typedValue; + QString errorString; + QVariant initialValue = json[defaultValueJsonKey].toVariant(); + if (metaData->convertAndValidateRaw(initialValue, true /* convertOnly */, typedValue, errorString)) { + metaData->setRawDefaultValue(typedValue); + } else { + qWarning() << "Invalid default value, name:" << metaData->name() + << " type:" << metaData->type() + << " value:" << initialValue + << " error:" << errorString; + } + } + if (json.contains(_minJsonKey)) { QVariant typedValue; QString errorString; - metaData->convertAndValidateRaw(json[_minJsonKey].toVariant(), true /* convertOnly */, typedValue, errorString); - metaData->setRawMin(typedValue); + QVariant initialValue = json[_minJsonKey].toVariant(); + if (metaData->convertAndValidateRaw(initialValue, true /* convertOnly */, typedValue, errorString)) { + metaData->setRawMin(typedValue); + } else { + qWarning() << "Invalid min value, name:" << metaData->name() + << " type:" << metaData->type() + << " value:" << initialValue + << " error:" << errorString; + } } + if (json.contains(_maxJsonKey)) { QVariant typedValue; QString errorString; - metaData->convertAndValidateRaw(json[_maxJsonKey].toVariant(), true /* convertOnly */, typedValue, errorString); - metaData->setRawMax(typedValue); + QVariant initialValue = json[_maxJsonKey].toVariant(); + if (metaData->convertAndValidateRaw(initialValue, true /* convertOnly */, typedValue, errorString)) { + metaData->setRawMax(typedValue); + } else { + qWarning() << "Invalid max value, name:" << metaData->name() + << " type:" << metaData->type() + << " value:" << initialValue + << " error:" << errorString; + } } + if (json.contains(_hasControlJsonKey)) { metaData->setHasControl(json[_hasControlJsonKey].toBool()); } else {