From de6d62b588a08bc92cbe51d59b808fc576e7f141 Mon Sep 17 00:00:00 2001
From: Don Gagne <dongagne@outlook.com>
Date: Fri, 30 Aug 2019 15:03:01 -0700
Subject: [PATCH] Zoom buttons move to MapScale control

---
 src/FlightDisplay/FlightDisplayViewMap.qml     |  1 +
 src/FlightMap/MapScale.qml                     | 38 +++++++++++++++++++++++---
 src/PlanView/PlanView.qml                      | 20 +-------------
 src/QtLocationPlugin/QMLControl/OfflineMap.qml |  3 ++
 4 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml
index be9eb04..8d7cee8 100644
--- a/src/FlightDisplay/FlightDisplayViewMap.qml
+++ b/src/FlightDisplay/FlightDisplayViewMap.qml
@@ -470,6 +470,7 @@ FlightMap {
         anchors.topMargin:      ScreenTools.defaultFontPixelHeight * (0.33) + state === "bottomMode" ? 0 : ScreenTools.toolbarHeight
         anchors.bottomMargin:   ScreenTools.defaultFontPixelHeight * (0.33)
         mapControl:             flightMap
+        zoomButtonsOnLeft:      false
         visible:                !ScreenTools.isTinyScreen && QGroundControl.corePlugin.options.enableMapScale
         state:                  "bottomMode"
         states: [
diff --git a/src/FlightMap/MapScale.qml b/src/FlightMap/MapScale.qml
index 8d8c67d..a134f5f 100644
--- a/src/FlightMap/MapScale.qml
+++ b/src/FlightMap/MapScale.qml
@@ -18,14 +18,18 @@ import QGroundControl.SettingsManager   1.0
 /// Map scale control
 Item {
     id:     scale
-    width:  rightEnd.x + rightEnd.width
+    width:  zoomButtonsOnLeft || !_zoomButtonsVisible ? rightEnd.x + rightEnd.width : zoomDownButton.x + zoomDownButton.width
     height: rightEnd.y + rightEnd.height
 
-    property var    mapControl                                                          ///< Map control for which this scale control is being used
+    property var    mapControl                  ///< Map control for which this scale control is being used
+    property bool   zoomButtonsVisible: true
+    property bool   zoomButtonsOnLeft:  true    ///< Zoom buttons to left/right of scale bar
 
     property variant _scaleLengthsMeters: [5, 10, 25, 50, 100, 150, 250, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000]
     property variant _scaleLengthsFeet: [10, 25, 50, 100, 250, 500, 1000, 2000, 3000, 4000, 5280, 5280*2, 5280*5, 5280*10, 5280*25, 5280*50, 5280*100, 5280*250, 5280*500, 5280*1000]
 
+    property bool _zoomButtonsVisible:  zoomButtonsVisible && !ScreenTools.isMobile // Zoom buttons don't show on mobile since finger pinch works fine
+
     property var _color: mapControl.isSatelliteMap ? "white" : "black"
 
     function formatDistanceMeters(meters) {
@@ -143,7 +147,7 @@ Item {
         map:                mapControl
         font.family:        ScreenTools.demiboldFontFamily
         anchors.left:       parent.left
-        anchors.right:      parent.right
+        anchors.right:      rightEnd.right
         horizontalAlignment:Text.AlignRight
         text:               "0 m"
     }
@@ -151,7 +155,8 @@ Item {
     Rectangle {
         id:                 leftEnd
         anchors.top:        scaleText.bottom
-        anchors.left:       parent.left
+        anchors.leftMargin: zoomButtonsOnLeft && _zoomButtonsVisible ? ScreenTools.defaultFontPixelWidth / 2 : 0
+        anchors.left:       zoomButtonsOnLeft && _zoomButtonsVisible ? zoomDownButton.right : parent.left
         width:              2
         height:             ScreenTools.defaultFontPixelHeight
         color:              _color
@@ -175,6 +180,31 @@ Item {
         color:              _color
     }
 
+    QGCButton {
+        id:                 zoomUpButton
+        anchors.top:        scaleText.top
+        anchors.bottom:     rightEnd.bottom
+        anchors.leftMargin: zoomButtonsOnLeft ? 0 : ScreenTools.defaultFontPixelWidth / 2
+        anchors.left:       zoomButtonsOnLeft ? parent.left : rightEnd.right
+        text:               qsTr("+")
+        width:              height
+        opacity:            0.75
+        visible:            _zoomButtonsVisible
+        onClicked:          mapControl.zoomLevel += 0.5
+    }
+
+    QGCButton {
+        id:                 zoomDownButton
+        anchors.leftMargin: ScreenTools.defaultFontPixelWidth / 2
+        anchors.left:       zoomUpButton.right
+        text:               qsTr("-")
+        height:             zoomUpButton.height
+        width:              zoomUpButton.width
+        opacity:            0.75
+        visible:            _zoomButtonsVisible
+        onClicked:          mapControl.zoomLevel -= 0.5
+    }
+
     Component.onCompleted: {
         if (scale.visible) {
             calculateScale();
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index 8ec6008..0418e9f 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -535,7 +535,6 @@ Item {
             maxHeight:          mapScale.y - toolStrip.y
 
             property bool _isRally:     _editingLayer == _layerRallyPoints
-            property bool _showZoom:    !ScreenTools.isMobile
 
             model: [
                 {
@@ -581,18 +580,6 @@ Item {
                     buttonEnabled:      true,
                     buttonVisible:      true,
                     dropPanelComponent: centerMapDropPanel
-                },
-                {
-                    name:               qsTr("In"),
-                    buttonEnabled:      true,
-                    buttonVisible:      _showZoom,
-                    iconSource:         "/qmlimages/ZoomPlus.svg"
-                },
-                {
-                    name:               qsTr("Out"),
-                    buttonEnabled:      true,
-                    buttonVisible:      _showZoom,
-                    iconSource:         "/qmlimages/ZoomMinus.svg"
                 }
             ]
 
@@ -621,12 +608,6 @@ Item {
                         addComplexItem(_missionController.complexMissionItemNames[0])
                     }
                     break
-                case 6:
-                    editorMap.zoomLevel += 0.5
-                    break
-                case 7:
-                    editorMap.zoomLevel -= 0.5
-                    break
                 }
             }
         }
@@ -832,6 +813,7 @@ Item {
             anchors.bottom:     waypointValuesDisplay.visible ? waypointValuesDisplay.top : parent.bottom
             anchors.left:       parent.left
             mapControl:         editorMap
+            zoomButtonsOnLeft:  true
             visible:            _toolStripBottom < y
         }
 
diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml
index 4b36ed6..3712941 100644
--- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml
+++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml
@@ -400,6 +400,7 @@ Item {
                 anchors.left:           parent.left
                 anchors.bottom:         parent.bottom
                 mapControl:             _map
+                zoomButtonsOnLeft:      true
             }
 
             //-----------------------------------------------------------------
@@ -602,6 +603,7 @@ Item {
                             anchors.left:           parent.left
                             anchors.bottom:         parent.bottom
                             mapControl:             parent
+                            zoomButtonsVisible:     false
                         }
 
                         Rectangle {
@@ -641,6 +643,7 @@ Item {
                             anchors.left:           parent.left
                             anchors.bottom:         parent.bottom
                             mapControl:             parent
+                            zoomButtonsVisible:     false
                         }
 
                         Rectangle {