From c49b88a013a1836b42685901a68f51eefa1d7d95 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 19 Apr 2019 12:07:15 -0700 Subject: [PATCH] Offline Maps: Allow custom build settings overrides --- qgroundcontrol.pro | 2 + qgroundcontrol.qrc | 1 + .../QMLControl/OfflineMap.qml | 42 ++++++++++++++----- src/Settings/OfflineMaps.SettingsGroup.json | 24 +++++++++++ src/Settings/OfflineMapsSettings.cc | 22 ++++++++++ src/Settings/OfflineMapsSettings.h | 27 ++++++++++++ src/Settings/SettingsManager.cc | 2 + src/Settings/SettingsManager.h | 4 ++ 8 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 src/Settings/OfflineMaps.SettingsGroup.json create mode 100644 src/Settings/OfflineMapsSettings.cc create mode 100644 src/Settings/OfflineMapsSettings.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 79b2919a4..a683fc619 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -601,6 +601,7 @@ HEADERS += \ src/Settings/BrandImageSettings.h \ src/Settings/FlightMapSettings.h \ src/Settings/FlyViewSettings.h \ + src/Settings/OfflineMapsSettings.h \ src/Settings/PlanViewSettings.h \ src/Settings/RTKSettings.h \ src/Settings/SettingsGroup.h \ @@ -804,6 +805,7 @@ SOURCES += \ src/Settings/BrandImageSettings.cc \ src/Settings/FlightMapSettings.cc \ src/Settings/FlyViewSettings.cc \ + src/Settings/OfflineMapsSettings.cc \ src/Settings/PlanViewSettings.cc \ src/Settings/RTKSettings.cc \ src/Settings/SettingsGroup.cc \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index c414f09b7..43658f300 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -226,6 +226,7 @@ src/Settings/FlightMap.SettingsGroup.json src/MissionManager/FWLandingPattern.FactMetaData.json src/Settings/FlyView.SettingsGroup.json + src/Settings/OfflineMaps.SettingsGroup.json src/Settings/PlanView.SettingsGroup.json src/MissionManager/MavCmdInfoCommon.json src/MissionManager/MavCmdInfoFixedWing.json diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml index d58e771eb..f6e34e1e5 100644 --- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml +++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml @@ -33,10 +33,13 @@ QGCView { property string mapKey: "lastMapType" - property Fact _mapboxFact: QGroundControl.settingsManager.appSettings.mapboxToken - property Fact _esriFact: QGroundControl.settingsManager.appSettings.esriToken + property var _settingsManager: QGroundControl.settingsManager + property var _settings: _settingsManager.offlineMapsSettings + property var _fmSettings: _settingsManager.flightMapSettings + property Fact _mapboxFact: _settingsManager.appSettings.mapboxToken + property Fact _esriFact: _settingsManager.appSettings.esriToken - property string mapType: _settings.mapProvider.enumStringValue + " " + _settings.mapType.enumStringValue + property string mapType: _fmSettings.mapProvider.enumStringValue + " " + _fmSettings.mapType.enumStringValue property bool isMapInteractive: false property var savedCenter: undefined property real savedZoom: 3 @@ -52,13 +55,12 @@ QGCView { property var _mapAdjustedColor: _map.isSatelliteMap ? "white" : "black" property bool _tooManyTiles: QGroundControl.mapEngineManager.tileCount > _maxTilesForDownload - property var _settings: QGroundControl.settingsManager.flightMapSettings readonly property real minZoomLevel: 1 readonly property real maxZoomLevel: 20 readonly property real sliderTouchArea: ScreenTools.defaultFontPixelWidth * (ScreenTools.isTinyScreen ? 5 : (ScreenTools.isMobile ? 6 : 3)) - readonly property int _maxTilesForDownload: 100000 + readonly property int _maxTilesForDownload: _settings.maxTilesForDownload.rawValue QGCPalette { id: qgcPal } @@ -106,7 +108,7 @@ QGCView { function addNewSet() { isMapInteractive = true - mapType = _settings.mapProvider.enumStringValue + " " + _settings.mapType.enumStringValue + mapType = _fmSettings.mapProvider.enumStringValue + " " + _fmSettings.mapType.enumStringValue resetMapToDefaults() handleChanges() _map.visible = true @@ -813,12 +815,22 @@ QGCView { maximumValue: maxZoomLevel stepSize: 1 updateValueWhileDragging: true - property real _savedZoom - Component.onCompleted: Math.max(sliderMinZoom.value = _map.zoomLevel - 4, 2) + + property bool _updateSetting: false + + Component.onCompleted: { + sliderMinZoom.value = _settings.minZoomLevelDownload.rawValue + _updateSetting = true + } + onValueChanged: { if(sliderMinZoom.value > sliderMaxZoom.value) { sliderMaxZoom.value = sliderMinZoom.value } + if (_updateSetting) { + // Don't update setting until after Component.onCompleted since bad values come through before that + _settings.minZoomLevelDownload.rawValue = value + } handleChanges() } style: SliderStyle { @@ -856,12 +868,22 @@ QGCView { maximumValue: maxZoomLevel stepSize: 1 updateValueWhileDragging: true - property real _savedZoom - Component.onCompleted: Math.min(sliderMaxZoom.value = _map.zoomLevel + 2, 20) + + property bool _updateSetting: false + + Component.onCompleted: { + sliderMaxZoom.value = _settings.maxZoomLevelDownload.rawValue + _updateSetting = true + } + onValueChanged: { if(sliderMaxZoom.value < sliderMinZoom.value) { sliderMinZoom.value = sliderMaxZoom.value } + if (_updateSetting) { + // Don't update setting until after Component.onCompleted since bad values come through before that + _settings.maxZoomLevelDownload.rawValue = value + } handleChanges() } style: SliderStyle { diff --git a/src/Settings/OfflineMaps.SettingsGroup.json b/src/Settings/OfflineMaps.SettingsGroup.json new file mode 100644 index 000000000..48b7bad5f --- /dev/null +++ b/src/Settings/OfflineMaps.SettingsGroup.json @@ -0,0 +1,24 @@ +[ +{ + "name": "minZoomLevelDownload", + "shortDescription": "Minimum zoom level for downloads.", + "type": "Uint32", + "min": 1, + "max": 20, + "defaultValue": 13 +}, +{ + "name": "maxZoomLevelDownload", + "shortDescription": "Maximum zoom level for downloads.", + "type": "Uint32", + "min": 1, + "max": 20, + "defaultValue": 19 +}, +{ + "name": "maxTilesForDownload", + "shortDescription": "Maximum number of tiles for download.", + "type": "Uint32", + "defaultValue": 100000 +} +] diff --git a/src/Settings/OfflineMapsSettings.cc b/src/Settings/OfflineMapsSettings.cc new file mode 100644 index 000000000..27fdf147a --- /dev/null +++ b/src/Settings/OfflineMapsSettings.cc @@ -0,0 +1,22 @@ +/**************************************************************************** + * + * (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 "OfflineMapsSettings.h" + +#include +#include + +DECLARE_SETTINGGROUP(OfflineMaps, "OfflineMaps") +{ + qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "OfflineMapsSettings", "Reference only"); +} + +DECLARE_SETTINGSFACT(OfflineMapsSettings, minZoomLevelDownload) +DECLARE_SETTINGSFACT(OfflineMapsSettings, maxZoomLevelDownload) +DECLARE_SETTINGSFACT(OfflineMapsSettings, maxTilesForDownload) diff --git a/src/Settings/OfflineMapsSettings.h b/src/Settings/OfflineMapsSettings.h new file mode 100644 index 000000000..223bf1319 --- /dev/null +++ b/src/Settings/OfflineMapsSettings.h @@ -0,0 +1,27 @@ +/**************************************************************************** + * + * (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 "SettingsGroup.h" + +class OfflineMapsSettings : public SettingsGroup +{ + Q_OBJECT + +public: + OfflineMapsSettings(QObject* parent = nullptr); + + DEFINE_SETTING_NAME_GROUP() + DEFINE_SETTINGFACT(minZoomLevelDownload) + DEFINE_SETTINGFACT(maxZoomLevelDownload) + DEFINE_SETTINGFACT(maxTilesForDownload) + +private: +}; diff --git a/src/Settings/SettingsManager.cc b/src/Settings/SettingsManager.cc index 8bb7bf94d..963e1bf58 100644 --- a/src/Settings/SettingsManager.cc +++ b/src/Settings/SettingsManager.cc @@ -26,6 +26,7 @@ SettingsManager::SettingsManager(QGCApplication* app, QGCToolbox* toolbox) , _flyViewSettings (nullptr) , _planViewSettings (nullptr) , _brandImageSettings (nullptr) + , _offlineMapsSettings (nullptr) #if !defined(NO_ARDUPILOT_DIALECT) , _apmMavlinkStreamRateSettings (nullptr) #endif @@ -48,6 +49,7 @@ void SettingsManager::setToolbox(QGCToolbox *toolbox) _flyViewSettings = new FlyViewSettings (this); _planViewSettings = new PlanViewSettings (this); _brandImageSettings = new BrandImageSettings (this); + _offlineMapsSettings = new OfflineMapsSettings (this); #if !defined(NO_ARDUPILOT_DIALECT) _apmMavlinkStreamRateSettings = new APMMavlinkStreamRateSettings (this); #endif diff --git a/src/Settings/SettingsManager.h b/src/Settings/SettingsManager.h index c0dd63c4f..141730f00 100644 --- a/src/Settings/SettingsManager.h +++ b/src/Settings/SettingsManager.h @@ -23,6 +23,7 @@ #include "FlyViewSettings.h" #include "PlanViewSettings.h" #include "BrandImageSettings.h" +#include "OfflineMapsSettings.h" #include "APMMavlinkStreamRateSettings.h" #if defined(QGC_AIRMAP_ENABLED) #include "AirMapSettings.h" @@ -49,6 +50,7 @@ public: Q_PROPERTY(QObject* flyViewSettings READ flyViewSettings CONSTANT) Q_PROPERTY(QObject* planViewSettings READ planViewSettings CONSTANT) Q_PROPERTY(QObject* brandImageSettings READ brandImageSettings CONSTANT) + Q_PROPERTY(QObject* offlineMapsSettings READ offlineMapsSettings CONSTANT) #if !defined(NO_ARDUPILOT_DIALECT) Q_PROPERTY(QObject* apmMavlinkStreamRateSettings READ apmMavlinkStreamRateSettings CONSTANT) #endif @@ -67,6 +69,7 @@ public: FlyViewSettings* flyViewSettings (void) { return _flyViewSettings; } PlanViewSettings* planViewSettings (void) { return _planViewSettings; } BrandImageSettings* brandImageSettings (void) { return _brandImageSettings; } + OfflineMapsSettings* offlineMapsSettings (void) { return _offlineMapsSettings; } #if !defined(NO_ARDUPILOT_DIALECT) APMMavlinkStreamRateSettings* apmMavlinkStreamRateSettings(void) { return _apmMavlinkStreamRateSettings; } #endif @@ -83,6 +86,7 @@ private: FlyViewSettings* _flyViewSettings; PlanViewSettings* _planViewSettings; BrandImageSettings* _brandImageSettings; + OfflineMapsSettings* _offlineMapsSettings; #if !defined(NO_ARDUPILOT_DIALECT) APMMavlinkStreamRateSettings* _apmMavlinkStreamRateSettings; #endif -- 2.22.0