Commit 950aaab0 authored by Don Gagne's avatar Don Gagne

Fit map viewport to mission items

parent 94c26ac4
...@@ -91,6 +91,53 @@ QGCView { ...@@ -91,6 +91,53 @@ QGCView {
} }
} }
function loadFromVehicle() {
controller.getMissionItems()
}
function loadFromFile() {
controller.loadMissionFromFile()
fitViewportToMissionItems()
}
function normalizeLat(lat) {
// Normalize latitude to range: 0 to 180, S to N
return lat + 90.0
}
function normalizeLon(lon) {
// Normalize longitude to range: 0 to 360, W to E
return lon + 180.0
}
/// Fix the map viewport to the current mission items. We don't fit the home position in this process.
function fitViewportToMissionItems() {
if (_missionItems.count <= 1) {
return
}
var missionItem = _missionItems.get(1)
var north = normalizeLat(missionItem.coordinate.latitude)
var south = north
var east = normalizeLon(missionItem.coordinate.longitude)
var west = east
for (var i=2; i<_missionItems.count; i++) {
missionItem = _missionItems.get(i)
var lat = normalizeLat(missionItem.coordinate.latitude)
var lon = normalizeLon(missionItem.coordinate.longitude)
north = Math.max(north, lat)
south = Math.min(south, lat)
east = Math.max(east, lon)
west = Math.min(west, lon)
}
editorMap.visibleRegion = QtPositioning.rectangle(QtPositioning.coordinate(north - 90.0, west - 180.0), QtPositioning.coordinate(south - 90.0, east - 180.0))
}
MissionController { MissionController {
id: controller id: controller
...@@ -107,6 +154,7 @@ QGCView { ...@@ -107,6 +154,7 @@ QGCView {
*/ */
onMissionItemsChanged: itemDragger.clearItem() onMissionItemsChanged: itemDragger.clearItem()
onNewItemsFromVehicle: fitViewportToMissionItems()
} }
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
...@@ -261,11 +309,11 @@ QGCView { ...@@ -261,11 +309,11 @@ QGCView {
// Add the mission items to the map // Add the mission items to the map
MapItemView { MapItemView {
model: controller.missionItems model: controller.missionItems
delegate: delegateComponent delegate: missionItemComponent
} }
Component { Component {
id: delegateComponent id: missionItemComponent
MissionItemIndicator { MissionItemIndicator {
id: itemIndicator id: itemIndicator
...@@ -549,7 +597,7 @@ QGCView { ...@@ -549,7 +597,7 @@ QGCView {
function accept() { function accept() {
hideDialog() hideDialog()
controller.getMissionItems() loadFromVehicle()
} }
} }
} }
...@@ -563,7 +611,7 @@ QGCView { ...@@ -563,7 +611,7 @@ QGCView {
function accept() { function accept() {
hideDialog() hideDialog()
controller.loadMissionFromFile() loadFromFile()
} }
} }
} }
...@@ -606,7 +654,7 @@ QGCView { ...@@ -606,7 +654,7 @@ QGCView {
if (syncNeeded) { if (syncNeeded) {
_root.showDialog(syncLoadFromVehicleOverwrite, "Mission overwrite", _root.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) _root.showDialog(syncLoadFromVehicleOverwrite, "Mission overwrite", _root.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
} else { } else {
controller.getMissionItems() loadFromVehicle()
} }
} }
} }
...@@ -633,7 +681,7 @@ QGCView { ...@@ -633,7 +681,7 @@ QGCView {
if (syncNeeded) { if (syncNeeded) {
_root.showDialog(syncLoadFromFileOverwrite, "Mission overwrite", _root.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) _root.showDialog(syncLoadFromFileOverwrite, "Mission overwrite", _root.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
} else { } else {
controller.loadMissionFromFile() loadFromFile()
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment