From 066699f310c47352bb32af05bfa09500b29c9b5e Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Fri, 16 Feb 2018 05:41:35 -0500 Subject: [PATCH] Removed AirspaceController and moved its interface into AirspaceManager AirspaceManager is now exposed by QGroundControlQmlGlobal instead of Vehicle (available all the time) --- qgroundcontrol.pro | 2 - src/Airmap/AirMapManager.cc | 22 ++++-- src/Airmap/AirMapManager.h | 11 +-- src/Airmap/AirspaceControl.qml | 58 ++++++++-------- src/Airmap/AirspaceWeather.qml | 14 ++-- src/Airmap/airmap.qrc | 2 +- ...oudy_night.svg => partly_cloudy_night.svg} | 0 src/AirspaceManagement/AirspaceController.cc | 60 ---------------- src/AirspaceManagement/AirspaceController.h | 53 -------------- src/AirspaceManagement/AirspaceManager.cc | 36 +++++----- src/AirspaceManagement/AirspaceManager.h | 69 +++++++++++-------- src/FlightDisplay/FlightDisplayView.qml | 11 +-- src/FlightDisplay/FlightDisplayViewMap.qml | 17 ++--- .../FlightDisplayViewWidgets.qml | 13 ++-- src/PlanView/PlanView.qml | 36 +++++----- src/QmlControls/QGroundControlQmlGlobal.cc | 2 + src/QmlControls/QGroundControlQmlGlobal.h | 4 ++ src/Vehicle/Vehicle.cc | 29 ++++---- src/Vehicle/Vehicle.h | 8 --- 19 files changed, 175 insertions(+), 272 deletions(-) rename src/Airmap/images/weather-icons/{partyly_cloudy_night.svg => partly_cloudy_night.svg} (100%) delete mode 100644 src/AirspaceManagement/AirspaceController.cc delete mode 100644 src/AirspaceManagement/AirspaceController.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 501ba7c03..52176e0f7 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -1081,7 +1081,6 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { HEADERS += \ src/AirspaceManagement/AirspaceAdvisoryProvider.h \ src/AirspaceManagement/AirspaceAuthorization.h \ - src/AirspaceManagement/AirspaceController.h \ src/AirspaceManagement/AirspaceManager.h \ src/AirspaceManagement/AirspaceRestriction.h \ src/AirspaceManagement/AirspaceRestrictionProvider.h \ @@ -1091,7 +1090,6 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { SOURCES += \ src/AirspaceManagement/AirspaceAdvisoryProvider.cc \ - src/AirspaceManagement/AirspaceController.cc \ src/AirspaceManagement/AirspaceManager.cc \ src/AirspaceManagement/AirspaceRestriction.cc \ src/AirspaceManagement/AirspaceRestrictionProvider.cc \ diff --git a/src/Airmap/AirMapManager.cc b/src/Airmap/AirMapManager.cc index e432d6516..4ea340f4e 100644 --- a/src/Airmap/AirMapManager.cc +++ b/src/Airmap/AirMapManager.cc @@ -30,11 +30,12 @@ using namespace airmap; QGC_LOGGING_CATEGORY(AirMapManagerLog, "AirMapManagerLog") +//----------------------------------------------------------------------------- AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox) : AirspaceManager(app, toolbox) { _logger = std::make_shared(); - qt::register_types(); // TODO: still needed?s + qt::register_types(); // TODO: still needed? _logger->logging_category().setEnabled(QtDebugMsg, false); _logger->logging_category().setEnabled(QtInfoMsg, false); _logger->logging_category().setEnabled(QtWarningMsg, true); @@ -42,6 +43,7 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox) connect(&_shared, &AirMapSharedState::error, this, &AirMapManager::_error); } +//----------------------------------------------------------------------------- AirMapManager::~AirMapManager() { if (_shared.client()) { @@ -49,6 +51,7 @@ AirMapManager::~AirMapManager() } } +//----------------------------------------------------------------------------- void AirMapManager::setToolbox(QGCToolbox* toolbox) { @@ -61,6 +64,7 @@ AirMapManager::setToolbox(QGCToolbox* toolbox) _settingsChanged(); } +//----------------------------------------------------------------------------- void AirMapManager::_error(const QString& what, const QString& airmapdMessage, const QString& airmapdDetails) { @@ -68,6 +72,7 @@ AirMapManager::_error(const QString& what, const QString& airmapdMessage, const qgcApp()->showMessage(QString("AirMap Error: %1. %2").arg(what).arg(airmapdMessage)); } +//----------------------------------------------------------------------------- void AirMapManager::_settingsChanged() { @@ -80,7 +85,7 @@ AirMapManager::_settingsChanged() settings.userName = ap->userName()->rawValueString(); settings.password = ap->password()->rawValueString(); _shared.setSettings(settings); - // need to re-create the client if the API key changed + //-- Need to re-create the client if the API key changed if (_shared.client() && apiKeyChanged) { delete _shared.client(); _shared.setClient(nullptr); @@ -104,6 +109,7 @@ AirMapManager::_settingsChanged() } } +//----------------------------------------------------------------------------- AirspaceVehicleManager* AirMapManager::instantiateVehicle(const Vehicle& vehicle) { @@ -112,32 +118,36 @@ AirMapManager::instantiateVehicle(const Vehicle& vehicle) return manager; } +//----------------------------------------------------------------------------- AirspaceRulesetsProvider* -AirMapManager::instantiateRulesetsProvider() +AirMapManager::_instantiateRulesetsProvider() { AirMapRulesetsManager* rulesetsManager = new AirMapRulesetsManager(_shared); connect(rulesetsManager, &AirMapRulesetsManager::error, this, &AirMapManager::_error); return rulesetsManager; } +//----------------------------------------------------------------------------- AirspaceWeatherInfoProvider* -AirMapManager::instatiateAirspaceWeatherInfoProvider() +AirMapManager::_instatiateAirspaceWeatherInfoProvider() { AirMapWeatherInfoManager* weatherInfo = new AirMapWeatherInfoManager(_shared); connect(weatherInfo, &AirMapWeatherInfoManager::error, this, &AirMapManager::_error); return weatherInfo; } +//----------------------------------------------------------------------------- AirspaceAdvisoryProvider* -AirMapManager::instatiateAirspaceAdvisoryProvider() +AirMapManager::_instatiateAirspaceAdvisoryProvider() { AirMapAdvisoryManager* advisories = new AirMapAdvisoryManager(_shared); connect(advisories, &AirMapAdvisoryManager::error, this, &AirMapManager::_error); return advisories; } +//----------------------------------------------------------------------------- AirspaceRestrictionProvider* -AirMapManager::instantiateAirspaceRestrictionProvider() +AirMapManager::_instantiateAirspaceRestrictionProvider() { AirMapRestrictionManager* airspaces = new AirMapRestrictionManager(_shared); connect(airspaces, &AirMapRestrictionManager::error, this, &AirMapManager::_error); diff --git a/src/Airmap/AirMapManager.h b/src/Airmap/AirMapManager.h index 81d84e991..41b6b546c 100644 --- a/src/Airmap/AirMapManager.h +++ b/src/Airmap/AirMapManager.h @@ -43,13 +43,14 @@ public: void setToolbox (QGCToolbox* toolbox) override; + QString providerName () const override { return QString("AirMap"); } AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) override; - AirspaceRulesetsProvider* instantiateRulesetsProvider () override; - AirspaceWeatherInfoProvider* instatiateAirspaceWeatherInfoProvider () override; - AirspaceAdvisoryProvider* instatiateAirspaceAdvisoryProvider () override; - AirspaceRestrictionProvider* instantiateAirspaceRestrictionProvider () override; - QString name () const override { return "AirMap"; } +protected: + AirspaceRulesetsProvider* _instantiateRulesetsProvider () override; + AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () override; + AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () override; + AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () override; private slots: void _error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails); diff --git a/src/Airmap/AirspaceControl.qml b/src/Airmap/AirspaceControl.qml index 2b17c6d6d..b5e4a0d5c 100644 --- a/src/Airmap/AirspaceControl.qml +++ b/src/Airmap/AirspaceControl.qml @@ -7,12 +7,13 @@ import QtQml 2.2 import QtGraphicalEffects 1.0 import QGroundControl 1.0 -import QGroundControl.ScreenTools 1.0 -import QGroundControl.Vehicle 1.0 +import QGroundControl.Airmap 1.0 +import QGroundControl.Airspace 1.0 import QGroundControl.Controls 1.0 import QGroundControl.FactControls 1.0 import QGroundControl.Palette 1.0 -import QGroundControl.Airmap 1.0 +import QGroundControl.ScreenTools 1.0 +import QGroundControl.Vehicle 1.0 Item { id: _root @@ -21,12 +22,11 @@ Item { property bool showColapse: true - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - property color _airspaceColor: _validAdvisories ? getAispaceColor(_activeVehicle.airspaceController.advisories.airspaceColor) : _colorGray - property bool _validRules: _activeVehicle ? _activeVehicle.airspaceController.rulesets.valid : false - property bool _validAdvisories: _activeVehicle ? _activeVehicle.airspaceController.advisories.valid : false + property color _airspaceColor: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray + property bool _validRules: QGroundControl.airspaceManager.ruleSets.valid + property bool _validAdvisories: QGroundControl.airspaceManager.advisories.valid property color _textColor: qgcPal.text - property bool _colapsed: _activeVehicle ? !_activeVehicle.airspaceController.airspaceVisible : true + property bool _colapsed: !QGroundControl.airspaceManager.airspaceVisible readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5 readonly property color _colorOrange: "#d75e0d" @@ -55,7 +55,7 @@ Item { on_AirspaceColorChanged: { if(_validAdvisories) { - if(_activeVehicle.airspaceController.advisories.airspaceColor === AirspaceAdvisoryProvider.Yellow) { + if(QGroundControl.airspaceManager.advisories.airspaceColor === AirspaceAdvisoryProvider.Yellow) { _textColor = "#000000" return } @@ -69,7 +69,7 @@ Item { id: colapsedRect width: parent.width height: _colapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0 - color: _validAdvisories ? getAispaceColor(_activeVehicle.airspaceController.advisories.airspaceColor) : _colorGray + color: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray radius: _radius visible: _colapsed Row { @@ -82,13 +82,13 @@ Item { width: height height: ScreenTools.defaultFontPixelWidth * 2.5 sourceSize.height: height - source: _activeVehicle ? "qrc:/airmap/advisory-icon.svg" : "qrc:/airmap/unavailable.svg" - color: _activeVehicle ? _textColor : _colorLightGray + source: "qrc:/airmap/advisory-icon.svg" + color: _textColor anchors.verticalCenter: parent.verticalCenter } QGCLabel { text: qsTr("Airspace") - color: _activeVehicle ? _textColor : _colorLightGray + color: _textColor anchors.verticalCenter: parent.verticalCenter } Item { @@ -96,9 +96,9 @@ Item { height: 1 } AirspaceWeather { - iconHeight: ScreenTools.defaultFontPixelWidth * 2.5 - visible: _activeVehicle && _activeVehicle.airspaceController.weatherInfo.valid - contentColor: _activeVehicle ? _textColor : _colorLightGray + iconHeight: ScreenTools.defaultFontPixelHeight * 2 + visible: QGroundControl.airspaceManager.weatherInfo.valid + contentColor: _textColor anchors.verticalCenter: parent.verticalCenter } } @@ -108,16 +108,14 @@ Item { sourceSize.height: height source: "qrc:/airmap/expand.svg" color: _textColor - visible: _activeVehicle anchors.right: parent.right anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.verticalCenter: parent.verticalCenter } MouseArea { anchors.fill: parent - enabled: _activeVehicle onClicked: { - _activeVehicle.airspaceController.airspaceVisible = true + QGroundControl.airspaceManager.airspaceVisible = true } } } @@ -127,7 +125,7 @@ Item { id: expandedRect width: parent.width height: !_colapsed ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0 - color: _validAdvisories ? getAispaceColor(_activeVehicle.airspaceController.advisories.airspaceColor) : _colorGray + color: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray radius: _radius visible: !_colapsed MouseArea { @@ -168,7 +166,7 @@ Item { color: _textColor } QGCLabel { - text: _validAdvisories ? _activeVehicle.airspaceController.advisories.airspaces.count + qsTr(" Advisories") : "" + text: _validAdvisories ? QGroundControl.airspaceManager.advisories.airspaces.count + qsTr(" Advisories") : "" color: _textColor visible: _validAdvisories font.pointSize: ScreenTools.smallFontPointSize @@ -179,7 +177,7 @@ Item { height: 1 } AirspaceWeather { - visible: _activeVehicle && _activeVehicle.airspaceController.weatherInfo.valid && showColapse + visible: QGroundControl.airspaceManager.weatherInfo.valid && showColapse contentColor: _textColor anchors.verticalCenter: parent.verticalCenter } @@ -196,12 +194,12 @@ Item { anchors.verticalCenter: parent.verticalCenter MouseArea { anchors.fill: parent - enabled: showColapse && _activeVehicle - onClicked: _activeVehicle.airspaceController.airspaceVisible = false + enabled: showColapse + onClicked: QGroundControl.airspaceManager.airspaceVisible = false } } AirspaceWeather { - visible: _activeVehicle && _activeVehicle.airspaceController.weatherInfo.valid && !showColapse + visible: QGroundControl.airspaceManager.weatherInfo.valid && !showColapse contentColor: _textColor anchors.right: parent.right anchors.rightMargin: ScreenTools.defaultFontPixelWidth @@ -290,7 +288,7 @@ Item { Layout.fillWidth: true QGCLabel { id: regLabel - text: _validRules ? _activeVehicle.airspaceController.ruleSets.selectedRuleSets : qsTr("None") + text: _validRules ? QGroundControl.airspaceManager.ruleSets.selectedRuleSets : qsTr("None") elide: Text.ElideRight horizontalAlignment: Text.AlignHCenter color: _colorWhite @@ -319,7 +317,7 @@ Item { anchors.right: parent.right anchors.left: parent.left Repeater { - model: _validAdvisories ? _activeVehicle.airspaceController.advisories.airspaces : [] + model: _validAdvisories ? QGroundControl.airspaceManager.advisories.airspaces : [] delegate: AirspaceRegulation { regTitle: object.typeStr regText: object.name @@ -425,7 +423,7 @@ Item { anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 } Repeater { - model: _validRules ? _activeVehicle.airspaceController.rulesets.ruleSets : [] + model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : [] delegate: RuleSelector { visible: object.selectionType === AirspaceRuleSet.Pickone rule: object @@ -446,7 +444,7 @@ Item { anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 } Repeater { - model: _validRules ? _activeVehicle.airspaceController.rulesets.ruleSets : [] + model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : [] delegate: RuleSelector { visible: object.selectionType === AirspaceRuleSet.Optional rule: object @@ -466,7 +464,7 @@ Item { anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 } Repeater { - model: _validRules ? _activeVehicle.airspaceController.rulesets.ruleSets : [] + model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : [] delegate: RuleSelector { visible: object.selectionType === AirspaceRuleSet.Required rule: object diff --git a/src/Airmap/AirspaceWeather.qml b/src/Airmap/AirspaceWeather.qml index b92b05278..17f0c27c7 100644 --- a/src/Airmap/AirspaceWeather.qml +++ b/src/Airmap/AirspaceWeather.qml @@ -5,21 +5,21 @@ import QtQuick.Dialogs 1.2 import QtQml 2.2 import QGroundControl 1.0 -import QGroundControl.ScreenTools 1.0 +import QGroundControl.Airmap 1.0 +import QGroundControl.Airspace 1.0 import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 -import QGroundControl.Airmap 1.0 +import QGroundControl.ScreenTools 1.0 import QGroundControl.SettingsManager 1.0 Item { height: _valid ? weatherRow.height : 0 width: _valid ? weatherRow.width : 0 property color contentColor: "#ffffff" - property var iconHeight: ScreenTools.defaultFontPixelWidth * 4 - property bool _valid: _activeVehicle && _activeVehicle.airspaceController.weatherInfo.valid - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var iconHeight: ScreenTools.defaultFontPixelHeight * 2 + property bool _valid: QGroundControl.airspaceManager.weatherInfo.valid property bool _celcius: QGroundControl.settingsManager.unitsSettings.temperatureUnits.rawValue === UnitsSettings.TemperatureUnitsCelsius - property int _tempC: _valid ? _activeVehicle.airspaceController.weatherInfo.temperature : 0 + property int _tempC: _valid ? QGroundControl.airspaceManager.weatherInfo.temperature : 0 property string _tempS: (_celcius ? _tempC : _tempC * 1.8 + 32).toFixed(0) + (_celcius ? "°C" : "°F") Row { id: weatherRow @@ -28,7 +28,7 @@ Item { width: height height: iconHeight sourceSize.height: height - source: _valid ? _activeVehicle.airspaceController.weatherInfo.icon : "" + source: _valid ? QGroundControl.airspaceManager.weatherInfo.icon : "" color: contentColor visible: _valid anchors.verticalCenter: parent.verticalCenter diff --git a/src/Airmap/airmap.qrc b/src/Airmap/airmap.qrc index 19375252f..efbf6ed99 100644 --- a/src/Airmap/airmap.qrc +++ b/src/Airmap/airmap.qrc @@ -36,7 +36,7 @@ images/weather-icons/mostly_cloudy_night.svg images/weather-icons/mostly_sunny.svg images/weather-icons/partly_cloudy_day.svg - images/weather-icons/partyly_cloudy_night.svg + images/weather-icons/partly_cloudy_night.svg images/weather-icons/rain.svg images/weather-icons/rain_snow.svg images/weather-icons/scattered_snow_showers_day.svg diff --git a/src/Airmap/images/weather-icons/partyly_cloudy_night.svg b/src/Airmap/images/weather-icons/partly_cloudy_night.svg similarity index 100% rename from src/Airmap/images/weather-icons/partyly_cloudy_night.svg rename to src/Airmap/images/weather-icons/partly_cloudy_night.svg diff --git a/src/AirspaceManagement/AirspaceController.cc b/src/AirspaceManagement/AirspaceController.cc deleted file mode 100644 index f2282a558..000000000 --- a/src/AirspaceManagement/AirspaceController.cc +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** - * - * (c) 2009-2016 QGROUNDCONTROL PROJECT - * - * QGroundControl is licensed according to the terms in the file - * COPYING.md in the root of the source code directory. - * - ****************************************************************************/ - -#include "AirspaceController.h" -#include "AirspaceManager.h" -#include "AirspaceWeatherInfoProvider.h" -#include "AirspaceAdvisoryProvider.h" - -#include "QGCApplication.h" -#include "QGCQGeoCoordinate.h" -#include "QmlObjectListModel.h" - -AirspaceController::AirspaceController(QObject* parent) - : QObject(parent) - , _manager(qgcApp()->toolbox()->airspaceManager()) - , _airspaceVisible(false) -{ -} - -void -AirspaceController::setROI(QGeoCoordinate center, double radius) -{ - _manager->setROI(center, radius); -} - -QString -AirspaceController::providerName() -{ - return _manager->name(); -} - -AirspaceWeatherInfoProvider* -AirspaceController::weatherInfo() -{ - return _manager->weatherInfo(); -} - -AirspaceAdvisoryProvider* -AirspaceController::advisories() -{ - return _manager->advisories(); -} - -AirspaceRulesetsProvider* -AirspaceController::ruleSets() -{ - return _manager->ruleSets(); -} - -AirspaceRestrictionProvider* -AirspaceController::airspaces() -{ - return _manager->airspaces(); -} diff --git a/src/AirspaceManagement/AirspaceController.h b/src/AirspaceManagement/AirspaceController.h deleted file mode 100644 index b2d8644f8..000000000 --- a/src/AirspaceManagement/AirspaceController.h +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** - * - * (c) 2009-2016 QGROUNDCONTROL PROJECT - * - * QGroundControl is licensed according to the terms in the file - * COPYING.md in the root of the source code directory. - * - ****************************************************************************/ - -#pragma once - -#include -#include - -class AirspaceManager; -class QmlObjectListModel; -class AirspaceWeatherInfoProvider; -class AirspaceAdvisoryProvider; -class AirspaceRulesetsProvider; -class AirspaceRestrictionProvider; - -class AirspaceController : public QObject -{ - Q_OBJECT -public: - AirspaceController(QObject* parent = NULL); - ~AirspaceController() = default; - - Q_PROPERTY(QString providerName READ providerName CONSTANT) - Q_PROPERTY(AirspaceWeatherInfoProvider* weatherInfo READ weatherInfo CONSTANT) - Q_PROPERTY(AirspaceAdvisoryProvider* advisories READ advisories CONSTANT) - Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT) - Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT) - Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setairspaceVisible NOTIFY airspaceVisibleChanged) - - Q_INVOKABLE void setROI (QGeoCoordinate center, double radius); - - QString providerName (); - AirspaceWeatherInfoProvider* weatherInfo (); - AirspaceAdvisoryProvider* advisories (); - AirspaceRulesetsProvider* ruleSets (); - AirspaceRestrictionProvider* airspaces (); - bool airspaceVisible () { return _airspaceVisible; } - - void setairspaceVisible (bool set) { _airspaceVisible = set; emit airspaceVisibleChanged(); } - -signals: - void airspaceVisibleChanged (); - -private: - AirspaceManager* _manager; - bool _airspaceVisible; -}; diff --git a/src/AirspaceManagement/AirspaceManager.cc b/src/AirspaceManagement/AirspaceManager.cc index 9f64ee423..5b43782a8 100644 --- a/src/AirspaceManagement/AirspaceManager.cc +++ b/src/AirspaceManagement/AirspaceManager.cc @@ -15,7 +15,6 @@ #include "AirspaceRulesetsProvider.h" #include "AirspaceRestrictionProvider.h" #include "AirspaceVehicleManager.h" -#include "AirspaceController.h" #include "Vehicle.h" #include "QGCApplication.h" @@ -24,20 +23,20 @@ QGC_LOGGING_CATEGORY(AirspaceManagementLog, "AirspaceManagementLog") AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox) : QGCTool(app, toolbox) + , _airspaceVisible(false) { _roiUpdateTimer.setInterval(2000); _roiUpdateTimer.setSingleShot(true); connect(&_roiUpdateTimer, &QTimer::timeout, this, &AirspaceManager::_updateToROI); - //-- TODO: Move these away from QGroundControl and into their own group (Airspace) - qmlRegisterUncreatableType ("QGroundControl", 1, 0, "AirspaceAuthorization", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceController", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceWeatherInfoProvider", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceAdvisoryProvider", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceRuleFeature", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceRule", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceRuleSet", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceRulesetsProvider", "Reference only"); - qmlRegisterUncreatableType ("QGroundControl.Vehicle", 1, 0, "AirspaceRestrictionProvider", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceAdvisoryProvider", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceAuthorization", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceManager", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceRestrictionProvider", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceRule", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceRuleFeature", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceRuleSet", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceRulesetsProvider", "Reference only"); + qmlRegisterUncreatableType ("QGroundControl.Airspace", 1, 0, "AirspaceWeatherInfoProvider", "Reference only"); } AirspaceManager::~AirspaceManager() @@ -60,13 +59,18 @@ void AirspaceManager::setToolbox(QGCToolbox* toolbox) { QGCTool::setToolbox(toolbox); // We should not call virtual methods in the constructor, so we instantiate the restriction provider here - _ruleSetsProvider = instantiateRulesetsProvider(); - _weatherProvider = instatiateAirspaceWeatherInfoProvider(); - _advisories = instatiateAirspaceAdvisoryProvider(); - _airspaces = instantiateAirspaceRestrictionProvider(); + _ruleSetsProvider = _instantiateRulesetsProvider(); + _weatherProvider = _instatiateAirspaceWeatherInfoProvider(); + _advisories = _instatiateAirspaceAdvisoryProvider(); + _airspaces = _instantiateAirspaceRestrictionProvider(); } -void AirspaceManager::setROI(const QGeoCoordinate& center, double radiusMeters) +void AirspaceManager::setROI(QGeoCoordinate center, double radiusMeters) +{ + _setROI(center, radiusMeters); +} + +void AirspaceManager::_setROI(const QGeoCoordinate& center, double radiusMeters) { _roiCenter = center; _roiRadius = radiusMeters; diff --git a/src/AirspaceManagement/AirspaceManager.h b/src/AirspaceManagement/AirspaceManager.h index 9cb13da3e..482221c52 100644 --- a/src/AirspaceManagement/AirspaceManager.h +++ b/src/AirspaceManagement/AirspaceManager.h @@ -54,59 +54,74 @@ public: AirspaceManager(QGCApplication* app, QGCToolbox* toolbox); virtual ~AirspaceManager(); + Q_PROPERTY(QString providerName READ providerName CONSTANT) + Q_PROPERTY(AirspaceWeatherInfoProvider* weatherInfo READ weatherInfo CONSTANT) + Q_PROPERTY(AirspaceAdvisoryProvider* advisories READ advisories CONSTANT) + Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT) + Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT) + Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setAirspaceVisible NOTIFY airspaceVisibleChanged) + + Q_INVOKABLE void setROI (QGeoCoordinate center, double radius); + + AirspaceWeatherInfoProvider* weatherInfo () { return _weatherProvider; } + AirspaceAdvisoryProvider* advisories () { return _advisories; } + AirspaceRulesetsProvider* ruleSets () { return _ruleSetsProvider; } + AirspaceRestrictionProvider* airspaces () { return _airspaces; } + + void setToolbox(QGCToolbox* toolbox) override; + + virtual QString providerName () const = 0; ///< Name of the airspace management provider (used in the UI) + + virtual bool airspaceVisible () { return _airspaceVisible; } + virtual void setAirspaceVisible (bool set) { _airspaceVisible = set; emit airspaceVisibleChanged(); } + /** * Factory method to create an AirspaceVehicleManager object */ virtual AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) = 0; - /** - * Factory method to create an AirspaceRulesetsProvider object - */ - virtual AirspaceRulesetsProvider* instantiateRulesetsProvider () = 0; +signals: + void airspaceVisibleChanged (); +protected: /** - * Factory method to create an AirspaceRulesetsProvider object + * Set the ROI for airspace information (restrictions shown in UI) + * @param center Center coordinate for ROI + * @param radiusMeters Radius in meters around center which is of interest */ - virtual AirspaceWeatherInfoProvider* instatiateAirspaceWeatherInfoProvider () = 0; + virtual void _setROI (const QGeoCoordinate& center, double radiusMeters); /** - * Factory method to create an AirspaceAdvisoryProvider object + * Factory method to create an AirspaceRulesetsProvider object */ - virtual AirspaceAdvisoryProvider* instatiateAirspaceAdvisoryProvider () = 0; + virtual AirspaceRulesetsProvider* _instantiateRulesetsProvider () = 0; /** - * Factory method to create an AirspaceRestrictionProvider object + * Factory method to create an AirspaceRulesetsProvider object */ - virtual AirspaceRestrictionProvider* instantiateAirspaceRestrictionProvider () = 0; + virtual AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () = 0; /** - * Set the ROI for airspace information (restrictions shown in UI) - * @param center Center coordinate for ROI - * @param radiusMeters Radius in meters around center which is of interest + * Factory method to create an AirspaceAdvisoryProvider object */ - void setROI (const QGeoCoordinate& center, double radiusMeters); - - AirspaceWeatherInfoProvider* weatherInfo () { return _weatherProvider; } - AirspaceAdvisoryProvider* advisories () { return _advisories; } - AirspaceRulesetsProvider* ruleSets () { return _ruleSetsProvider; } - AirspaceRestrictionProvider* airspaces () { return _airspaces; } - - void setToolbox(QGCToolbox* toolbox) override; + virtual AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () = 0; /** - * Name of the airspace management provider (used in the UI) + * Factory method to create an AirspaceRestrictionProvider object */ - virtual QString name () const = 0; - -private: - void _updateToROI (); + virtual AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () = 0; +protected: + bool _airspaceVisible; AirspaceRulesetsProvider* _ruleSetsProvider = nullptr; ///< Rulesets that are shown in the UI AirspaceWeatherInfoProvider* _weatherProvider = nullptr; ///< Weather info that is shown in the UI AirspaceAdvisoryProvider* _advisories = nullptr; ///< Advisory info that is shown in the UI AirspaceRestrictionProvider* _airspaces = nullptr; ///< Airspace info that is shown in the UI - QTimer _roiUpdateTimer; QGeoCoordinate _roiCenter; double _roiRadius; + +private: + void _updateToROI (); + }; diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index d860fc31d..df03b8aa8 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -19,14 +19,15 @@ import QtQuick.Layouts 1.2 import QtQuick.Window 2.2 import QGroundControl 1.0 +import QGroundControl.Airspace 1.0 +import QGroundControl.Controllers 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.FactSystem 1.0 import QGroundControl.FlightDisplay 1.0 import QGroundControl.FlightMap 1.0 -import QGroundControl.ScreenTools 1.0 -import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 +import QGroundControl.ScreenTools 1.0 import QGroundControl.Vehicle 1.0 -import QGroundControl.Controllers 1.0 -import QGroundControl.FactSystem 1.0 /// Flight Display View QGCView { @@ -670,7 +671,7 @@ QGCView { } } property var flightPermit: (QGroundControl.airmapSupported && _activeVehicle) ? _activeVehicle.flightPermitStatus : null - property var providerName: _activeVehicle ? _activeVehicle.airspaceController.providerName : "" + property var providerName: QGroundControl.airspaceManager.providerName } } diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index 00acc809b..6c5b9dd65 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -15,13 +15,14 @@ import QtPositioning 5.3 import QtQuick.Dialogs 1.2 import QGroundControl 1.0 +import QGroundControl.Airspace 1.0 +import QGroundControl.Controllers 1.0 +import QGroundControl.Controls 1.0 import QGroundControl.FlightDisplay 1.0 import QGroundControl.FlightMap 1.0 -import QGroundControl.ScreenTools 1.0 -import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 +import QGroundControl.ScreenTools 1.0 import QGroundControl.Vehicle 1.0 -import QGroundControl.Controllers 1.0 FlightMap { id: flightMap @@ -51,7 +52,7 @@ FlightMap { property var _activeVehicleCoordinate: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate() property var _gotoHereCoordinate: QtPositioning.coordinate() property real _toolButtonTopMargin: parent.height - ScreenTools.availableHeight + (ScreenTools.defaultFontPixelHeight / 2) - property bool _airspaceManagement: QGroundControl.airmapSupported && _activeVehicle + property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false property bool _disableVehicleTracking: false property bool _keepVehicleCentered: _mainIsMap ? false : true @@ -59,8 +60,8 @@ FlightMap { // Track last known map position and zoom from Fly view in settings onZoomLevelChanged: QGroundControl.flightMapZoom = zoomLevel onCenterChanged: { - if(_activeVehicle && QGroundControl.airmapSupported) { - _activeVehicle.airspaceController.setROI(center, 5000) + if(_airspaceEnabled) { + QGroundControl.airspaceManager.setROI(center, 1000) } QGroundControl.flightMapPosition = center } @@ -331,7 +332,7 @@ FlightMap { // Airspace overlap support MapItemView { - model: _airspaceManagement && _activeVehicle.airspaceController.airspaceVisible ? _activeVehicle.airspaceController.airspaces.circles : [] + model: _airspaceEnabled && QGroundControl.airspaceManager.airspaceVisible ? QGroundControl.airspaceManager.airspaces.circles : [] delegate: MapCircle { center: object.center radius: object.radius @@ -341,7 +342,7 @@ FlightMap { } MapItemView { - model: _airspaceManagement && _activeVehicle.airspaceController.airspaceVisible ? _activeVehicle.airspaceController.airspaces.polygons : [] + model: _airspaceEnabled && QGroundControl.airspaceManager.airspaceVisible ? QGroundControl.airspaceManager.airspaces.polygons : [] delegate: MapPolygon { path: object.polygon color: Qt.rgba(0.94, 0.87, 0, 0.15) diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index f4330a97e..1641001b2 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -21,6 +21,7 @@ import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Vehicle 1.0 import QGroundControl.FlightMap 1.0 +import QGroundControl.Airspace 1.0 import QGroundControl.Airmap 1.0 Item { @@ -29,12 +30,12 @@ Item { property var qgcView property bool useLightColors property var missionController - property bool showValues: _activeVehicle ? !_activeVehicle.airspaceController.airspaceVisible : true + property bool showValues: QGroundControl.airspaceManager.airspaceVisible property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property bool _isSatellite: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true property bool _lightWidgetBorders: _isSatellite - property bool _enableAirMap: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false + property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false readonly property real _margins: ScreenTools.defaultFontPixelHeight * 0.5 @@ -80,11 +81,9 @@ Item { } Connections { - target: _activeVehicle ? _activeVehicle.airspaceController : null + target: QGroundControl.airspaceManager onAirspaceVisibleChanged: { - if(_activeVehicle) { - widgetRoot.showValues = !_activeVehicle.airspaceController.airspaceVisible - } + widgetRoot.showValues = !QGroundControl.airspaceManager.airspaceVisible } } @@ -140,7 +139,7 @@ Item { AirspaceControl { id: airspaceControl width: getPreferredInstrumentWidth() - visible: _enableAirMap + visible: _airspaceEnabled anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 } //------------------------------------------------------- diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml index e57f6e167..42f5c4451 100644 --- a/src/PlanView/PlanView.qml +++ b/src/PlanView/PlanView.qml @@ -25,6 +25,7 @@ import QGroundControl.FactControls 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Mavlink 1.0 import QGroundControl.Controllers 1.0 +import QGroundControl.Airspace 1.0 import QGroundControl.Airmap 1.0 /// Mission Editor @@ -46,7 +47,7 @@ QGCView { readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276) readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly - property bool _enableAirMap: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false + property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false property var _planMasterController: masterController property var _missionController: _planMasterController.missionController property var _geoFenceController: _planMasterController.geoFenceController @@ -59,7 +60,6 @@ QGCView { property real _toolbarHeight: _qgcView.height - ScreenTools.availableHeight property int _editingLayer: _layerMission property int _toolStripBottom: toolStrip.height + toolStrip.y - property bool _airspaceManagement: QGroundControl.airmapSupported && _activeVehicle readonly property int _layerMission: 1 readonly property int _layerGeoFence: 2 @@ -96,12 +96,10 @@ QGCView { planMasterController: _planMasterController } - on_EnableAirMapChanged: { + on_AirspaceEnabledChanged: { if(QGroundControl.airmapSupported) { - if(!_activeVehicle) { - planControlColapsed = false - } else if(_enableAirMap) { - planControlColapsed = _activeVehicle.airspaceController.airspaceVisible + if(_airspaceEnabled) { + planControlColapsed = QGroundControl.airspaceManager.airspaceVisible } else { planControlColapsed = false } @@ -167,9 +165,9 @@ QGCView { } Connections { - target: _activeVehicle ? _activeVehicle.airspaceController : null + target: QGroundControl.airspaceManager onAirspaceVisibleChanged: { - planControlColapsed = _activeVehicle.airspaceController.airspaceVisible + planControlColapsed = QGroundControl.airspaceManager.airspaceVisible } } @@ -350,8 +348,8 @@ QGCView { QGCMapPalette { id: mapPal; lightColors: editorMap.isSatelliteMap } onCenterChanged: { - if(_activeVehicle && QGroundControl.airmapSupported) { - _activeVehicle.airspaceController.setROI(center, 5000) + if(_airspaceEnabled) { + QGroundControl.airspaceManager.setROI(center, 5000) } } @@ -439,7 +437,7 @@ QGCView { // Airspace overlap support MapItemView { - model: _airspaceManagement && _activeVehicle.airspaceController.airspaceVisible ? _activeVehicle.airspaceController.airspaces.circles : [] + model: _airspaceEnabled && QGroundControl.airspaceManager.airspaceVisible ? QGroundControl.airspaceManager.airspaces.circles : [] delegate: MapCircle { center: object.center radius: object.radius @@ -449,7 +447,7 @@ QGCView { } MapItemView { - model: _airspaceManagement && _activeVehicle.airspaceController.airspaceVisible ? _activeVehicle.airspaceController.airspaces.polygons : [] + model: _airspaceEnabled && QGroundControl.airspaceManager.airspaceVisible ? QGroundControl.airspaceManager.airspaces.polygons : [] delegate: MapPolygon { path: object.polygon color: Qt.rgba(0.94, 0.87, 0, 0.1) @@ -565,7 +563,7 @@ QGCView { AirspaceControl { id: airspaceControl width: parent.width - visible: _enableAirMap + visible: _airspaceEnabled showColapse: true } //------------------------------------------------------- @@ -575,7 +573,7 @@ QGCView { height: planControlColapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0 color: qgcPal.missionItemEditor radius: _radius - visible: planControlColapsed && _enableAirMap + visible: planControlColapsed && _airspaceEnabled Row { id: colapsedRow spacing: ScreenTools.defaultFontPixelWidth @@ -611,9 +609,7 @@ QGCView { anchors.fill: parent enabled: QGroundControl.airmapSupported onClicked: { - if(_activeVehicle) { - _activeVehicle.airspaceController.airspaceVisible = false - } + QGroundControl.airspaceManager.airspaceVisible = false } } } @@ -622,10 +618,10 @@ QGCView { Rectangle { id: planExpanded width: parent.width - height: (!planControlColapsed || !_enableAirMap) ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0 + height: (!planControlColapsed || !_airspaceEnabled) ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0 color: qgcPal.missionItemEditor radius: _radius - visible: !planControlColapsed || !_enableAirMap + visible: !planControlColapsed || !_airspaceEnabled Item { height: expandedCol.height anchors.left: parent.left diff --git a/src/QmlControls/QGroundControlQmlGlobal.cc b/src/QmlControls/QGroundControlQmlGlobal.cc index 40c5b6527..f4c07df38 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.cc +++ b/src/QmlControls/QGroundControlQmlGlobal.cc @@ -40,6 +40,7 @@ QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app, QGCToolbox , _corePlugin(NULL) , _firmwarePluginManager(NULL) , _settingsManager(NULL) + , _airspaceManager(NULL) , _skipSetupPage(false) { // We clear the parent on this object since we run into shutdown problems caused by hybrid qml app. Instead we let it leak on shutdown. @@ -76,6 +77,7 @@ void QGroundControlQmlGlobal::setToolbox(QGCToolbox* toolbox) _corePlugin = toolbox->corePlugin(); _firmwarePluginManager = toolbox->firmwarePluginManager(); _settingsManager = toolbox->settingsManager(); + _airspaceManager = toolbox->airspaceManager(); #ifndef __mobile__ GPSManager *gpsManager = toolbox->gpsManager(); diff --git a/src/QmlControls/QGroundControlQmlGlobal.h b/src/QmlControls/QGroundControlQmlGlobal.h index 54af5a14f..bbabeb8ab 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.h +++ b/src/QmlControls/QGroundControlQmlGlobal.h @@ -22,6 +22,7 @@ #include "SimulatedPosition.h" #include "QGCLoggingCategory.h" #include "AppSettings.h" +#include "AirspaceManager.h" #ifndef __mobile__ #include "GPS/GPSManager.h" #endif /* __mobile__ */ @@ -53,6 +54,7 @@ public: Q_PROPERTY(QGCCorePlugin* corePlugin READ corePlugin CONSTANT) Q_PROPERTY(SettingsManager* settingsManager READ settingsManager CONSTANT) Q_PROPERTY(FactGroup* gpsRtk READ gpsRtkFactGroup CONSTANT) + Q_PROPERTY(AirspaceManager* airspaceManager READ airspaceManager CONSTANT) Q_PROPERTY(bool airmapSupported READ airmapSupported CONSTANT) Q_PROPERTY(int supportedFirmwareCount READ supportedFirmwareCount CONSTANT) @@ -143,6 +145,7 @@ public: QGCCorePlugin* corePlugin () { return _corePlugin; } SettingsManager* settingsManager () { return _settingsManager; } FactGroup* gpsRtkFactGroup () { return &_gpsRtkFactGroup; } + AirspaceManager* airspaceManager () { return _airspaceManager; } static QGeoCoordinate flightMapPosition () { return _coord; } static double flightMapZoom () { return _zoom; } @@ -208,6 +211,7 @@ private: FirmwarePluginManager* _firmwarePluginManager; SettingsManager* _settingsManager; GPSRTKFactGroup _gpsRtkFactGroup; + AirspaceManager* _airspaceManager; bool _skipSetupPage; diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 20425ac38..2babeb483 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -38,9 +38,6 @@ #include "QGCCameraManager.h" #include "VideoReceiver.h" #include "VideoManager.h" -#if defined(QGC_AIRMAP_ENABLED) -#include "AirspaceController.h" -#endif QGC_LOGGING_CATEGORY(VehicleLog, "VehicleLog") #define UPDATE_TIMER 50 @@ -142,7 +139,6 @@ Vehicle::Vehicle(LinkInterface* link, , _rallyPointManagerInitialRequestSent(false) , _parameterManager(NULL) #if defined(QGC_AIRMAP_ENABLED) - , _airspaceController(NULL) , _airspaceVehicleManager(NULL) #endif , _armed(false) @@ -276,18 +272,6 @@ Vehicle::Vehicle(LinkInterface* link, connect(&_adsbTimer, &QTimer::timeout, this, &Vehicle::_adsbTimerTimeout); _adsbTimer.setSingleShot(false); _adsbTimer.start(1000); - -#if defined(QGC_AIRMAP_ENABLED) - _airspaceController = new AirspaceController(this); - AirspaceManager* airspaceManager = _toolbox->airspaceManager(); - if (airspaceManager) { - _airspaceVehicleManager = airspaceManager->instantiateVehicle(*this); - if (_airspaceVehicleManager) { - connect(_airspaceVehicleManager, &AirspaceVehicleManager::trafficUpdate, this, &Vehicle::_trafficUpdate); - connect(_airspaceVehicleManager, &AirspaceVehicleManager::flightPermitStatusChanged, this, &Vehicle::flightPermitStatusChanged); - } - } -#endif } // Disconnected Vehicle for offline editing @@ -349,7 +333,6 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType, , _rallyPointManagerInitialRequestSent(false) , _parameterManager(NULL) #if defined(QGC_AIRMAP_ENABLED) - , _airspaceController(NULL) , _airspaceVehicleManager(NULL) #endif , _armed(false) @@ -470,6 +453,18 @@ void Vehicle::_commonInit(void) _flightDistanceFact.setRawValue(0); _flightTimeFact.setRawValue(0); + + //-- Airspace Management +#if defined(QGC_AIRMAP_ENABLED) + AirspaceManager* airspaceManager = _toolbox->airspaceManager(); + if (airspaceManager) { + _airspaceVehicleManager = airspaceManager->instantiateVehicle(*this); + if (_airspaceVehicleManager) { + connect(_airspaceVehicleManager, &AirspaceVehicleManager::trafficUpdate, this, &Vehicle::_trafficUpdate); + connect(_airspaceVehicleManager, &AirspaceVehicleManager::flightPermitStatusChanged, this, &Vehicle::flightPermitStatusChanged); + } + } +#endif } Vehicle::~Vehicle() diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 8b1034a9a..4af71041a 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -39,9 +39,6 @@ class UASMessage; class SettingsManager; class ADSBVehicle; class QGCCameraManager; -#if defined(QGC_AIRMAP_ENABLED) -class AirspaceController; -#endif Q_DECLARE_LOGGING_CATEGORY(VehicleLog) @@ -362,7 +359,6 @@ public: Q_PROPERTY(bool highLatencyLink READ highLatencyLink NOTIFY highLatencyLinkChanged) #if defined(QGC_AIRMAP_ENABLED) Q_PROPERTY(AirspaceAuthorization::PermitStatus flightPermitStatus READ flightPermitStatus NOTIFY flightPermitStatusChanged) ///< state of flight permission - Q_PROPERTY(AirspaceController* airspaceController READ airspaceController CONSTANT) #endif // Vehicle state used for guided control Q_PROPERTY(bool flying READ flying NOTIFY flyingChanged) ///< Vehicle is flying @@ -582,9 +578,6 @@ public: QmlObjectListModel* cameraTriggerPoints(void) { return &_cameraTriggerPoints; } QmlObjectListModel* adsbVehicles(void) { return &_adsbVehicles; } -#if defined(QGC_AIRMAP_ENABLED) - AirspaceController* airspaceController() { return _airspaceController; } -#endif int flowImageIndex() { return _flowImageIndex; } //-- Mavlink Logging @@ -1068,7 +1061,6 @@ private: ParameterManager* _parameterManager; #if defined(QGC_AIRMAP_ENABLED) - AirspaceController* _airspaceController; AirspaceVehicleManager* _airspaceVehicleManager; #endif -- 2.22.0