From b3818e213446ed90013e57aebd875aa1b19f0e06 Mon Sep 17 00:00:00 2001 From: Stefan Dunca Date: Fri, 15 Nov 2019 14:22:39 +0100 Subject: [PATCH] Fix the RallyPoint default value --- src/MissionManager/RallyPoint.FactMetaData.json | 5 +++-- src/MissionManager/RallyPoint.cc | 21 +++++++++++++++++---- src/MissionManager/RallyPoint.h | 3 +++ src/MissionManager/RallyPointController.cc | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/MissionManager/RallyPoint.FactMetaData.json b/src/MissionManager/RallyPoint.FactMetaData.json index 6e3c81e..318f4ad 100644 --- a/src/MissionManager/RallyPoint.FactMetaData.json +++ b/src/MissionManager/RallyPoint.FactMetaData.json @@ -12,10 +12,11 @@ "decimalPlaces": 7 }, { - "name": "Altitude", + "name": "Relative Altitude", "shortDescription": "Altitude of rally point position (home relative)", "type": "double", "decimalPlaces": 2, - "units": "m" + "units": "m", + "defaultValue": 0.0 } ] diff --git a/src/MissionManager/RallyPoint.cc b/src/MissionManager/RallyPoint.cc index 51847e3..4d21715 100644 --- a/src/MissionManager/RallyPoint.cc +++ b/src/MissionManager/RallyPoint.cc @@ -15,7 +15,7 @@ const char* RallyPoint::_longitudeFactName = "Longitude"; const char* RallyPoint::_latitudeFactName = "Latitude"; -const char* RallyPoint::_altitudeFactName = "Altitude"; +const char* RallyPoint::_altitudeFactName = "Relative Altitude"; QMap RallyPoint::_metaDataMap; @@ -63,9 +63,7 @@ RallyPoint::~RallyPoint() void RallyPoint::_factSetup(void) { - if (_metaDataMap.isEmpty()) { - _metaDataMap = FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/RallyPoint.FactMetaData.json"), nullptr /* metaDataParent */); - } + _cacheFactMetadata(); _longitudeFact.setMetaData(_metaDataMap[_longitudeFactName]); _latitudeFact.setMetaData(_metaDataMap[_latitudeFactName]); @@ -80,6 +78,12 @@ void RallyPoint::_factSetup(void) connect(&_altitudeFact, &Fact::valueChanged, this, &RallyPoint::_sendCoordinateChanged); } +void RallyPoint::_cacheFactMetadata() { + if (_metaDataMap.isEmpty()) { + _metaDataMap = FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/RallyPoint.FactMetaData.json"), nullptr /* metaDataParent */); + } +} + void RallyPoint::setCoordinate(const QGeoCoordinate& coordinate) { if (coordinate != this->coordinate()) { @@ -99,6 +103,15 @@ void RallyPoint::setDirty(bool dirty) } } +double RallyPoint::getDefaultFactAltitude() { + _cacheFactMetadata(); + auto it = _metaDataMap.find(QString(_altitudeFactName)); + if(it != _metaDataMap.end() && (*it)->defaultValueAvailable()) { + return (*it)->rawDefaultValue().toDouble(); + } + return 0.0; +} + QGeoCoordinate RallyPoint::coordinate(void) const { return QGeoCoordinate(_latitudeFact.rawValue().toDouble(), _longitudeFact.rawValue().toDouble(), _altitudeFact.rawValue().toDouble()); diff --git a/src/MissionManager/RallyPoint.h b/src/MissionManager/RallyPoint.h index 5868118..0de062a 100644 --- a/src/MissionManager/RallyPoint.h +++ b/src/MissionManager/RallyPoint.h @@ -39,6 +39,8 @@ public: bool dirty(void) const { return _dirty; } void setDirty(bool dirty); + static double getDefaultFactAltitude(); + signals: void coordinateChanged (const QGeoCoordinate& coordinate); void dirtyChanged (bool dirty); @@ -48,6 +50,7 @@ private slots: private: void _factSetup(void); + static void _cacheFactMetadata(); bool _dirty; Fact _longitudeFact; diff --git a/src/MissionManager/RallyPointController.cc b/src/MissionManager/RallyPointController.cc index 60e9de4..e25d9bb 100644 --- a/src/MissionManager/RallyPointController.cc +++ b/src/MissionManager/RallyPointController.cc @@ -243,7 +243,7 @@ void RallyPointController::addPoint(QGeoCoordinate point) if (_points.count()) { defaultAlt = qobject_cast(_points[_points.count() - 1])->coordinate().altitude(); } else { - defaultAlt = qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble(); + defaultAlt = RallyPoint::getDefaultFactAltitude(); } point.setAltitude(defaultAlt); RallyPoint* newPoint = new RallyPoint(point, this);