diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml index b635c9c5fd927af226eec4c7f01e2d897a43809b..3060cc51afb18c2d95c3894ce94dee82379792c2 100644 --- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml +++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml @@ -32,28 +32,19 @@ QGCView { property string mapKey: "lastMapType" property string mapType: QGroundControl.flightMapSettings.mapProvider + " " + QGroundControl.flightMapSettings.mapType - property bool isMapInteractive: true + property bool isMapInteractive: false property var savedCenter: undefined property real savedZoom: 3 property string savedMapType: "" - property real _newSetMiddleLabel: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelWidth * 10 : ScreenTools.defaultFontPixelWidth * 12 - property real _newSetMiddleField: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelWidth * 16 : ScreenTools.defaultFontPixelWidth * 20 - property real _netSetSliderWidth: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelWidth * 8 : ScreenTools.defaultFontPixelWidth * 16 - - property real oldlon0: 0 - property real oldlon1: 0 - property real oldlat0: 0 - property real oldlat1: 0 - property int oldz0: 0 - property int oldz1: 0 - property bool _saveRealEstate: ScreenTools.isTinyScreen || ScreenTools.isShortScreen property real _adjustableFontPointSize: _saveRealEstate ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize readonly property real minZoomLevel: 3 readonly property real maxZoomLevel: 20 + readonly property int _maxTilesForDownload: 60000 + QGCPalette { id: qgcPal } Component.onCompleted: { @@ -78,20 +69,11 @@ QGCView { if(isMapInteractive) { var xl = 0 var yl = 0 - var xr = _map.width.toFixed(0) - var yr = _map.height.toFixed(0) + var xr = _map.width.toFixed(0) - 1 // Must be within boundaries of visible map + var yr = _map.height.toFixed(0) - 1 // Must be within boundaries of visible map var c0 = _map.toCoordinate(Qt.point(xl, yl)) var c1 = _map.toCoordinate(Qt.point(xr, yr)) - if(oldlon0 !== c0.longitude || oldlat0 !== c0.latitude || oldlon1 !== c1.longitude || oldlat1 !== c1.latitude || oldz0 !== sliderMinZoom.value || oldz1 !== sliderMaxZoom.value) { - QGroundControl.mapEngineManager.updateForCurrentView(c0.longitude, c0.latitude, c1.longitude, c1.latitude, sliderMinZoom.value, sliderMaxZoom.value, mapType) - } - } - } - - function checkSanity() { - if(isMapInteractive && QGroundControl.mapEngineManager.crazySize) { - sliderMaxZoom.value = sliderMaxZoom.value - 1 - handleChanges() + QGroundControl.mapEngineManager.updateForCurrentView(c0.longitude, c0.latitude, c1.longitude, c1.latitude, sliderMinZoom.value, sliderMaxZoom.value, mapType) } } @@ -106,7 +88,10 @@ QGCView { } function addNewSet() { + isMapInteractive = true mapType = QGroundControl.flightMapSettings.mapProvider + " " + QGroundControl.flightMapSettings.mapType + resetMapToDefaults() + handleChanges() _map.visible = true _tileSetList.visible = false infoView.visible = false @@ -115,6 +100,7 @@ QGCView { } function showList() { + isMapInteractive = false _map.visible = false _tileSetList.visible = true infoView.visible = false @@ -123,6 +109,7 @@ QGCView { } function showInfo() { + isMapInteractive = false if(_currentSelection && !offlineMapView._currentSelection.deleting) { enterInfoView() } else @@ -170,11 +157,11 @@ QGCView { _map.fitViewportToMapItems() } _tileSetList.visible = false - addNewSetView.visible = false + addNewSetView.visible = false if(isDefaultSet) { defaultInfoView.visible = true } else { - infoView.visible= true + infoView.visible = true } } @@ -183,7 +170,11 @@ QGCView { _map.center = savedCenter _map.zoomLevel = savedZoom mapType = savedMapType - isMapInteractive = true + } + + function resetMapToDefaults() { + _map.center = QGroundControl.flightMapPosition + _map.zoomLevel = QGroundControl.flightMapZoom } ExclusiveGroup { @@ -320,7 +311,7 @@ QGCView { Map { id: _map anchors.fill: parent - center: QGroundControl.defaultMapPosition + center: QGroundControl.lastKnownHomePosition visible: false gesture.flickDeceleration: 3000 @@ -335,26 +326,16 @@ QGCView { antialiasing: true } - Component.onCompleted: { - center = QGroundControl.flightMapPosition - zoomLevel = QGroundControl.flightMapZoom - } + Component.onCompleted: resetMapToDefaults() - onCenterChanged: { - handleChanges() - checkSanity() - } - onZoomLevelChanged: { - handleChanges() - checkSanity() - } - onWidthChanged: { - handleChanges() - checkSanity() - } - onHeightChanged: { - handleChanges() - checkSanity() + onCenterChanged: handleChanges() + onZoomLevelChanged: handleChanges() + onWidthChanged: handleChanges() + onHeightChanged: handleChanges() + + // Used to make pinch zoom work + MouseArea { + anchors.fill: parent } MapScale { @@ -760,17 +741,6 @@ QGCView { sliderMaxZoom.value = sliderMinZoom.value } handleChanges() - checkSanity() - _map.zoomLevel = sliderMinZoom.value - } - - onPressedChanged: { - if (pressed) { - _savedZoom = _map.zoomLevel - _map.zoomLevel = sliderMinZoom.value - } else { - _map.zoomLevel = _savedZoom - } } } // Slider - min zoom @@ -791,28 +761,13 @@ QGCView { property real _savedZoom - Component.onCompleted: { - sliderMaxZoom.value = _map.zoomLevel + 2 - } + Component.onCompleted: sliderMaxZoom.value = _map.zoomLevel + 2 onValueChanged: { if(sliderMaxZoom.value < sliderMinZoom.value) { sliderMinZoom.value = sliderMaxZoom.value } handleChanges() - checkSanity() - if (pressed) { - _map.zoomLevel = sliderMaxZoom.value - } - } - - onPressedChanged: { - if (pressed) { - _savedZoom = _map.zoomLevel - _map.zoomLevel = sliderMaxZoom.value - } else { - _map.zoomLevel = _savedZoom - } } } // Slider - max zoom @@ -842,10 +797,12 @@ QGCView { } // Rectangle - Zoom info QGCButton { - text: qsTr("Download") - enabled: setName.text.length > 0 + text: _tooManyTiles ? qsTr("Too many tiles") : qsTr("Download") + enabled: !_tooManyTiles && setName.text.length > 0 anchors.horizontalCenter: parent.horizontalCenter + property bool _tooManyTiles: QGroundControl.mapEngineManager.tileCount > _maxTilesForDownload + onClicked: { if(QGroundControl.mapEngineManager.findName(setName.text)) { duplicateName.visible = true diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc index 2906b76d0d7f6968da37de6fd22173361589812b..cce88da7f8e6bf47fcaccb1d9efb29dd49006c4b 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc @@ -74,20 +74,14 @@ QGCMapEngineManager::updateForCurrentView(double lon0, double lat0, double lon1, QGCTileSet set = QGCMapEngine::getTileCount(z, lon0, lat0, lon1, lat1, mapType); _totalSet += set; } - //-- Beyond 100,000,000 tiles is just nuts - if(_totalSet.tileCount > 100 * 1000 * 1000) { - _crazySize = true; - emit crazySizeChanged(); - } else { - _crazySize = false; - emit crazySizeChanged(); - emit tileX0Changed(); - emit tileX1Changed(); - emit tileY0Changed(); - emit tileY1Changed(); - emit tileCountChanged(); - emit tileSizeChanged(); - } + emit tileX0Changed(); + emit tileX1Changed(); + emit tileY0Changed(); + emit tileY1Changed(); + emit tileCountChanged(); + emit tileSizeChanged(); + + qCDebug(QGCMapEngineManagerLog) << "updateForCurrentView" << lat0 << lon0 << lat1 << lon1 << minZoom << maxZoom; } //----------------------------------------------------------------------------- diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h index 66737064fb13cb33dbd7462e6a2d7a59988c02ae..ee56cc625816f0ea3e22b5e1f800d16c887af200 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h @@ -37,7 +37,6 @@ public: Q_PROPERTY(QString tileCountStr READ tileCountStr NOTIFY tileCountChanged) Q_PROPERTY(quint64 tileSize READ tileSize NOTIFY tileSizeChanged) Q_PROPERTY(QString tileSizeStr READ tileSizeStr NOTIFY tileSizeChanged) - Q_PROPERTY(bool crazySize READ crazySize NOTIFY crazySizeChanged) Q_PROPERTY(QmlObjectListModel* tileSets READ tileSets NOTIFY tileSetsChanged) Q_PROPERTY(QStringList mapList READ mapList CONSTANT) Q_PROPERTY(QString mapboxToken READ mapboxToken WRITE setMapboxToken NOTIFY mapboxTokenChanged) @@ -65,7 +64,6 @@ public: QString tileCountStr (); quint64 tileSize () { return _totalSet.tileSize; } QString tileSizeStr (); - bool crazySize () { return _crazySize; } QStringList mapList (); QString mapboxToken (); QmlObjectListModel* tileSets () { return &_tileSets; } @@ -91,7 +89,6 @@ signals: void tileY1Changed (); void tileCountChanged (); void tileSizeChanged (); - void crazySizeChanged (); void mapboxTokenChanged (); void tileSetsChanged (); void maxMemCacheChanged (); @@ -114,7 +111,6 @@ private: private: QGCTileSet _totalSet; - bool _crazySize; double _topleftLat; double _topleftLon; double _bottomRightLat;