From 8990886685bba45f2a56fe90bdeb5935400ef649 Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Tue, 30 Jan 2018 14:06:51 -0500 Subject: [PATCH] Add actual, selected Ruleset IDs to Flight Manager (when uploading a flight) --- src/Airmap/AirMapFlightManager.cc | 28 ++++++++++++++++------------ src/Airmap/AirMapRulesetsManager.cc | 14 ++++++++++++++ src/Airmap/AirMapRulesetsManager.h | 4 ++++ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/Airmap/AirMapFlightManager.cc b/src/Airmap/AirMapFlightManager.cc index 69f6564da..2a03c9bd1 100644 --- a/src/Airmap/AirMapFlightManager.cc +++ b/src/Airmap/AirMapFlightManager.cc @@ -9,6 +9,8 @@ #include "AirMapFlightManager.h" #include "AirMapManager.h" +#include "AirMapRulesetsManager.h" +#include "QGCApplication.h" #include "MissionItem.h" #include "QGCMAVLink.h" @@ -178,18 +180,20 @@ void AirMapFlightManager::_uploadFlight() FlightPlans::Create::Parameters params; params.max_altitude = _flight.maxAltitude; - params.buffer = 2.f; - params.latitude = _flight.takeoffCoord.latitude(); - params.longitude = _flight.takeoffCoord.longitude(); - params.pilot.id = _pilotID.toStdString(); - params.start_time = Clock::universal_time() + Minutes{5}; - params.end_time = Clock::universal_time() + Hours{2}; // TODO: user-configurable? - params.rulesets = { // TODO: which ones to use? - "che_drone_rules", - "che_notam", - "che_airmap_rules", - "che_nature_preserve" - }; + params.buffer = 2.f; + params.latitude = _flight.takeoffCoord.latitude(); + params.longitude = _flight.takeoffCoord.longitude(); + params.pilot.id = _pilotID.toStdString(); + params.start_time = Clock::universal_time() + Minutes{5}; + params.end_time = Clock::universal_time() + Hours{2}; // TODO: user-configurable? + + //-- Rules + AirMapRulesetsManager* pRulesMgr = dynamic_cast(qgcApp()->toolbox()->airspaceManager()->rulesets()); + if(pRulesMgr) { + foreach(QString ruleset, pRulesMgr->rulesetsIDs()) { + params.rulesets.push_back(ruleset.toStdString()); + } + } // geometry: LineString Geometry::LineString lineString; diff --git a/src/Airmap/AirMapRulesetsManager.cc b/src/Airmap/AirMapRulesetsManager.cc index a3f6b54b4..1ce40116f 100644 --- a/src/Airmap/AirMapRulesetsManager.cc +++ b/src/Airmap/AirMapRulesetsManager.cc @@ -143,3 +143,17 @@ AirMapRulesetsManager::_selectedChanged() emit selectedRulesChanged(); //-- TODO: Do whatever it is you do to select a rule } + +//----------------------------------------------------------------------------- +QStringList +AirMapRulesetsManager::rulesetsIDs() +{ + QStringList list; + for(int i = 0; i < _rules.count(); i++) { + AirMapRule* rule = qobject_cast(_rules.get(i)); + if(rule && rule->selected()) { + list << rule->id(); + } + } + return list; +} diff --git a/src/Airmap/AirMapRulesetsManager.h b/src/Airmap/AirMapRulesetsManager.h index 145a63e9a..9ce7fe17b 100644 --- a/src/Airmap/AirMapRulesetsManager.h +++ b/src/Airmap/AirMapRulesetsManager.h @@ -14,6 +14,7 @@ #include "AirMapSharedState.h" #include +#include #include @@ -60,6 +61,9 @@ public: void setROI (const QGeoCoordinate& center) override; + //-- Selected rules + QStringList rulesetsIDs (); + signals: void error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails); -- 2.22.0