From ebd8d82fd1c70beeb14eb1e7149d318c07efd0e4 Mon Sep 17 00:00:00 2001
From: Don Gagne <Don@laptop-3.local>
Date: Sat, 8 Apr 2017 22:05:59 -0700
Subject: [PATCH 1/2] Fix MissionItemStatus visibility/position

---
 src/PlanView/MissionItemStatus.qml        | 49 ++++++++++++-------------------
 src/PlanView/PlanView.qml                 | 43 ++++++++++++---------------
 src/QmlControls/MissionItemIndexLabel.qml |  1 -
 3 files changed, 38 insertions(+), 55 deletions(-)

diff --git a/src/PlanView/MissionItemStatus.qml b/src/PlanView/MissionItemStatus.qml
index c426103..193ffdb 100644
--- a/src/PlanView/MissionItemStatus.qml
+++ b/src/PlanView/MissionItemStatus.qml
@@ -7,64 +7,52 @@
  *
  ****************************************************************************/
 
-
 import QtQuick          2.3
 import QtQuick.Controls 1.2
 import QtQuick.Layouts  1.2
 
+import QGroundControl               1.0
 import QGroundControl.ScreenTools   1.0
 import QGroundControl.Controls      1.0
 import QGroundControl.Palette       1.0
-import QGroundControl               1.0
 import QGroundControl.FactSystem    1.0
 import QGroundControl.FactControls  1.0
 
 Rectangle {
-    width:      expandedWidth
     height:     ScreenTools.defaultFontPixelHeight * 7
     radius:     ScreenTools.defaultFontPixelWidth * 0.5
     color:      qgcPal.window
     opacity:    0.80
     clip:       true
 
-    property var    currentMissionItem          ///< Mission item to display status for
-    property var    missionItems                ///< List of all available mission items
-    property real   expandedWidth               ///< Width of control when expanded
-    property real   missionDistance             ///< Total mission distance
-    property real   missionTime                 ///< Total mission time
-    property real   missionMaxTelemetry
+    property var missionItems                ///< List of all available mission items
 
-    property bool   _statusValid:               currentMissionItem != undefined
-    property bool   _missionValid:              missionItems != undefined
+    readonly property real _margins: ScreenTools.defaultFontPixelWidth
 
-    property real   _distance:                  _statusValid ? _currentMissionItem.distance : NaN
-    property real   _altDifference:             _statusValid ? _currentMissionItem.altDifference : NaN
-    property real   _gradient:                  _statusValid && _currentMissionItem.distance > 0 ? Math.atan(_currentMissionItem.altDifference / _currentMissionItem.distance) : NaN
-    property real   _gradientPercent:           isNaN(_gradient) ? NaN : _gradient * 100
-    property real   _azimuth:                   _statusValid ? _currentMissionItem.azimuth : NaN
-    property real   _missionDistance:           _missionValid ? missionDistance : NaN
-    property real   _missionMaxTelemetry:       _missionValid ? missionMaxTelemetry : NaN
-    property real   _missionTime:               _missionValid ? missionTime : NaN
+    QGCPalette { id: qgcPal }
 
-    property string _distanceText:              isNaN(_distance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
-    property string _altDifferenceText:         isNaN(_altDifference) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
-    property string _gradientText:              isNaN(_gradient) ? "-.-" : _gradientPercent.toFixed(0) + "%"
-    property string _azimuthText:               isNaN(_azimuth) ? "-.-" : Math.round(_azimuth)
-    property string _missionDistanceText:       isNaN(_missionDistance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
-    property string _missionTimeText:           isNaN(_missionTime) ? "-.-" : Number(_missionTime / 60).toFixed(1) + " min"
-    property string _missionMaxTelemetryText:   isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
-
-    readonly property real _margins:    ScreenTools.defaultFontPixelWidth
+    QGCLabel {
+        id:                     label
+        anchors.top:            parent.bottom
+        width:                  parent.height
+        text:                   qsTr("Altitude")
+        horizontalAlignment:    Text.AlignHCenter
+        rotation:               -90
+        transformOrigin:        Item.TopLeft
+    }
 
     QGCListView {
         id:                     statusListView
-        anchors.fill:           parent
         anchors.margins:        _margins
+        anchors.top:            parent.top
+        anchors.bottom:         parent.bottom
+        anchors.leftMargin:     ScreenTools.defaultFontPixelHeight
+        anchors.left:           parent.left
+        anchors.right:          parent.right
         model:                  missionItems
         highlightMoveDuration:  250
         orientation:            ListView.Horizontal
         spacing:                0
-        width:                  parent.width -  (_margins * 2)
         clip:                   true
         currentIndex:           _currentMissionIndex
 
@@ -92,3 +80,4 @@ Rectangle {
     }
 }
 
+
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index c8c0e63..2e9994b 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -610,30 +610,6 @@ QGCView {
                     }
                 }
             }
-
-            MapScale {
-                id:                 mapScale
-                anchors.margins:    ScreenTools.defaultFontPixelHeight * (0.66)
-                anchors.bottom:     waypointValuesDisplay.visible ? waypointValuesDisplay.top : parent.bottom
-                anchors.left:       parent.left
-                mapControl:         editorMap
-                visible:            !ScreenTools.isTinyScreen
-            }
-
-            MissionItemStatus {
-                id:                     waypointValuesDisplay
-                anchors.margins:        ScreenTools.defaultFontPixelWidth
-                anchors.left:           parent.left
-                anchors.bottom:         parent.bottom
-                z:                      QGroundControl.zOrderTopMost
-                currentMissionItem:     _currentMissionItem
-                missionItems:           missionController.visualItems
-                expandedWidth:          missionItemEditor.x - (ScreenTools.defaultFontPixelWidth * 2)
-                missionDistance:        missionController.missionDistance
-                missionTime:            missionController.missionTime
-                missionMaxTelemetry:    missionController.missionMaxTelemetry
-                visible:                _editingLayer == _layerMission && !ScreenTools.isShortScreen
-            }
         } // FlightMap
 
         // Right pane for mission editing controls
@@ -795,6 +771,25 @@ QGCView {
                 controller:         rallyPointController
             }
         } // Right panel
+
+        MapScale {
+            id:                 mapScale
+            anchors.margins:    ScreenTools.defaultFontPixelHeight * (0.66)
+            anchors.bottom:     waypointValuesDisplay.visible ? waypointValuesDisplay.top : parent.bottom
+            anchors.left:       parent.left
+            mapControl:         editorMap
+            visible:            !ScreenTools.isTinyScreen
+        }
+
+        MissionItemStatus {
+            id:                 waypointValuesDisplay
+            anchors.margins:    ScreenTools.defaultFontPixelWidth
+            anchors.left:       parent.left
+            anchors.right:      rightPanel.left
+            anchors.bottom:     parent.bottom
+            missionItems:       missionController.visualItems
+            //visible:            _editingLayer === _layerMission && !ScreenTools.isShortScreen
+        }
     } // QGCViewPanel
 
     Component {
diff --git a/src/QmlControls/MissionItemIndexLabel.qml b/src/QmlControls/MissionItemIndexLabel.qml
index 48df184..c39447b 100644
--- a/src/QmlControls/MissionItemIndexLabel.qml
+++ b/src/QmlControls/MissionItemIndexLabel.qml
@@ -81,7 +81,6 @@ Canvas {
         visible:            _label.length !== 0
     }
 
-
     QGCLabel {
         id:                     labelControlLabel
         anchors.leftMargin:     indicator.width + _labelMargin

From 18e2f0f20dd02d72c2bffbe2c0e95614154235b2 Mon Sep 17 00:00:00 2001
From: Don Gagne <Don@laptop-3.local>
Date: Sat, 8 Apr 2017 22:06:18 -0700
Subject: [PATCH 2/2] Max initial survey size of 3000mx3000m

---
 src/PlanView/SurveyMapVisual.qml | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/PlanView/SurveyMapVisual.qml b/src/PlanView/SurveyMapVisual.qml
index 00d1d51..e46205f 100644
--- a/src/PlanView/SurveyMapVisual.qml
+++ b/src/PlanView/SurveyMapVisual.qml
@@ -52,20 +52,29 @@ Item {
         if (_mapPolygon.count < 3) {
             // Initial polygon is inset to take 2/3rds space
             var rect = Qt.rect(map.centerViewport.x, map.centerViewport.y, map.centerViewport.width, map.centerViewport.height)
-            console.log(map.centerViewport)
             rect.x += (rect.width * 0.25) / 2
             rect.y += (rect.height * 0.25) / 2
             rect.width *= 0.75
             rect.height *= 0.75
-            console.log(map.centerViewport)
-            var topLeft = Qt.point(rect.x, rect.y)
-            var topRight = Qt.point(rect.x + rect.width, rect.y)
-            var bottomLeft = Qt.point(rect.x, rect.y + rect.height)
-            var bottomRight = Qt.point(rect.x + rect.width, rect.y + rect.height)
-            _mapPolygon.appendVertex(map.toCoordinate(topLeft, false /* clipToViewPort */))
-            _mapPolygon.appendVertex(map.toCoordinate(topRight, false /* clipToViewPort */))
-            _mapPolygon.appendVertex(map.toCoordinate(bottomRight, false /* clipToViewPort */))
-            _mapPolygon.appendVertex(map.toCoordinate(bottomLeft, false /* clipToViewPort */))
+
+            var centerCoord =       map.toCoordinate(Qt.point(rect.x + (rect.width / 2), rect.y + (rect.height / 2)),   false /* clipToViewPort */)
+            var topLeftCoord =      map.toCoordinate(Qt.point(rect.x, rect.y),                                          false /* clipToViewPort */)
+            var topRightCoord =     map.toCoordinate(Qt.point(rect.x + rect.width, rect.y),                             false /* clipToViewPort */)
+            var bottomLeftCoord =   map.toCoordinate(Qt.point(rect.x, rect.y + rect.height),                            false /* clipToViewPort */)
+            var bottomRightCoord =  map.toCoordinate(Qt.point(rect.x + rect.width, rect.y + rect.height),               false /* clipToViewPort */)
+
+            // Initial polygon has max width and height of 3000 meters
+            var halfWidthMeters =   Math.min(topLeftCoord.distanceTo(topRightCoord), 3000) / 2
+            var halfHeightMeters =  Math.min(topLeftCoord.distanceTo(bottomLeftCoord), 3000) / 2
+            topLeftCoord =      centerCoord.atDistanceAndAzimuth(halfWidthMeters, -90).atDistanceAndAzimuth(halfHeightMeters, 0)
+            topRightCoord =     centerCoord.atDistanceAndAzimuth(halfWidthMeters, 90).atDistanceAndAzimuth(halfHeightMeters, 0)
+            bottomLeftCoord =   centerCoord.atDistanceAndAzimuth(halfWidthMeters, -90).atDistanceAndAzimuth(halfHeightMeters, 180)
+            bottomRightCoord =  centerCoord.atDistanceAndAzimuth(halfWidthMeters, 90).atDistanceAndAzimuth(halfHeightMeters, 180)
+
+            _mapPolygon.appendVertex(topLeftCoord)
+            _mapPolygon.appendVertex(topRightCoord)
+            _mapPolygon.appendVertex(bottomRightCoord)
+            _mapPolygon.appendVertex(bottomLeftCoord)
         }
     }