diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 79b2919a426a33a149905a8258439b6f0361aa6f..a683fc619ced21731621a2786b5e9a5102cc011d 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 c414f09b7299a3c40e5a25fb95d7fc946ab6bcf5..43658f300829b6d22042640cf61a05e431e99399 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 d58e771ebe2e52448e8f595489a4055de97a2036..f6e34e1e55e92c60211bf7062115536b543372e5 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 0000000000000000000000000000000000000000..48b7bad5f3ab82188ee0ae69dca4600f9f70dcb0
--- /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 0000000000000000000000000000000000000000..27fdf147adc6f85481706af4c350ff6a8caf36c0
--- /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 0000000000000000000000000000000000000000..223bf1319d1c796920902656ff3f519bcdc9b3a5
--- /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 8bb7bf94ddc15343f5addc9686294d6f1d67734e..963e1bf5895012ae16196bb940774fc0263d7f53 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 c0dd63c4fd562ef51b0859fa8542c65ca4d2ba30..141730f0097f4cd7c70cae6f2cbbb22fc056cd0b 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