Commit cff65ebe authored by DonLakeFlyer's avatar DonLakeFlyer

Better initial map positions and planned home position support

parent 079ffd7a
...@@ -307,7 +307,7 @@ INCLUDEPATH += \ ...@@ -307,7 +307,7 @@ INCLUDEPATH += \
src/FollowMe \ src/FollowMe \
src/GPS \ src/GPS \
src/Joystick \ src/Joystick \
src/MissionEditor \ src/PlanView \
src/MissionManager \ src/MissionManager \
src/PositionManager \ src/PositionManager \
src/QmlControls \ src/QmlControls \
...@@ -462,7 +462,7 @@ HEADERS += \ ...@@ -462,7 +462,7 @@ HEADERS += \
src/MissionManager/MissionController.h \ src/MissionManager/MissionController.h \
src/MissionManager/MissionItem.h \ src/MissionManager/MissionItem.h \
src/MissionManager/MissionManager.h \ src/MissionManager/MissionManager.h \
src/MissionManager/MissionSettingsComplexItem.h \ src/MissionManager/MissionSettingsItem.h \
src/MissionManager/PlanElementController.h \ src/MissionManager/PlanElementController.h \
src/MissionManager/QGCMapPolygon.h \ src/MissionManager/QGCMapPolygon.h \
src/MissionManager/RallyPoint.h \ src/MissionManager/RallyPoint.h \
...@@ -640,7 +640,7 @@ SOURCES += \ ...@@ -640,7 +640,7 @@ SOURCES += \
src/MissionManager/MissionController.cc \ src/MissionManager/MissionController.cc \
src/MissionManager/MissionItem.cc \ src/MissionManager/MissionItem.cc \
src/MissionManager/MissionManager.cc \ src/MissionManager/MissionManager.cc \
src/MissionManager/MissionSettingsComplexItem.cc \ src/MissionManager/MissionSettingsItem.cc \
src/MissionManager/PlanElementController.cc \ src/MissionManager/PlanElementController.cc \
src/MissionManager/QGCMapPolygon.cc \ src/MissionManager/QGCMapPolygon.cc \
src/MissionManager/RallyPoint.cc \ src/MissionManager/RallyPoint.cc \
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<file alias="MainWindowInner.qml">src/ui/MainWindowInner.qml</file> <file alias="MainWindowInner.qml">src/ui/MainWindowInner.qml</file>
<file alias="MainWindowNative.qml">src/ui/MainWindowNative.qml</file> <file alias="MainWindowNative.qml">src/ui/MainWindowNative.qml</file>
<file alias="MavlinkSettings.qml">src/ui/preferences/MavlinkSettings.qml</file> <file alias="MavlinkSettings.qml">src/ui/preferences/MavlinkSettings.qml</file>
<file alias="MissionEditor.qml">src/MissionEditor/MissionEditor.qml</file> <file alias="PlanView.qml">src/PlanView/PlanView.qml</file>
<file alias="MixersComponent.qml">src/AutoPilotPlugins/Common/MixersComponent.qml</file> <file alias="MixersComponent.qml">src/AutoPilotPlugins/Common/MixersComponent.qml</file>
<file alias="MockLink.qml">src/ui/preferences/MockLink.qml</file> <file alias="MockLink.qml">src/ui/preferences/MockLink.qml</file>
<file alias="MockLinkSettings.qml">src/ui/preferences/MockLinkSettings.qml</file> <file alias="MockLinkSettings.qml">src/ui/preferences/MockLinkSettings.qml</file>
...@@ -47,32 +47,32 @@ ...@@ -47,32 +47,32 @@
<file alias="PX4FlowSensor.qml">src/VehicleSetup/PX4FlowSensor.qml</file> <file alias="PX4FlowSensor.qml">src/VehicleSetup/PX4FlowSensor.qml</file>
<file alias="QGroundControl/Controls/AnalyzePage.qml">src/AnalyzeView/AnalyzePage.qml</file> <file alias="QGroundControl/Controls/AnalyzePage.qml">src/AnalyzeView/AnalyzePage.qml</file>
<file alias="QGroundControl/Controls/AppMessages.qml">src/QmlControls/AppMessages.qml</file> <file alias="QGroundControl/Controls/AppMessages.qml">src/QmlControls/AppMessages.qml</file>
<file alias="QGroundControl/Controls/CameraSection.qml">src/MissionEditor/CameraSection.qml</file> <file alias="QGroundControl/Controls/CameraSection.qml">src/PlanView/CameraSection.qml</file>
<file alias="QGroundControl/Controls/ClickableColor.qml">src/QmlControls/ClickableColor.qml</file> <file alias="QGroundControl/Controls/ClickableColor.qml">src/QmlControls/ClickableColor.qml</file>
<file alias="QGroundControl/Controls/DropButton.qml">src/QmlControls/DropButton.qml</file> <file alias="QGroundControl/Controls/DropButton.qml">src/QmlControls/DropButton.qml</file>
<file alias="QGroundControl/Controls/ExclusiveGroupItem.qml">src/QmlControls/ExclusiveGroupItem.qml</file> <file alias="QGroundControl/Controls/ExclusiveGroupItem.qml">src/QmlControls/ExclusiveGroupItem.qml</file>
<file alias="QGroundControl/Controls/FactSliderPanel.qml">src/QmlControls/FactSliderPanel.qml</file> <file alias="QGroundControl/Controls/FactSliderPanel.qml">src/QmlControls/FactSliderPanel.qml</file>
<file alias="QGroundControl/Controls/FlightModeDropdown.qml">src/QmlControls/FlightModeDropdown.qml</file> <file alias="QGroundControl/Controls/FlightModeDropdown.qml">src/QmlControls/FlightModeDropdown.qml</file>
<file alias="QGroundControl/Controls/FlightModeMenu.qml">src/QmlControls/FlightModeMenu.qml</file> <file alias="QGroundControl/Controls/FlightModeMenu.qml">src/QmlControls/FlightModeMenu.qml</file>
<file alias="QGroundControl/Controls/FWLandingPatternMapVisual.qml">src/MissionEditor/FWLandingPatternMapVisual.qml</file> <file alias="QGroundControl/Controls/FWLandingPatternMapVisual.qml">src/PlanView/FWLandingPatternMapVisual.qml</file>
<file alias="QGroundControl/Controls/GeoFenceEditor.qml">src/MissionEditor/GeoFenceEditor.qml</file> <file alias="QGroundControl/Controls/GeoFenceEditor.qml">src/PlanView/GeoFenceEditor.qml</file>
<file alias="QGroundControl/Controls/GeoFenceMapVisuals.qml">src/MissionEditor/GeoFenceMapVisuals.qml</file> <file alias="QGroundControl/Controls/GeoFenceMapVisuals.qml">src/PlanView/GeoFenceMapVisuals.qml</file>
<file alias="QGroundControl/Controls/IndicatorButton.qml">src/QmlControls/IndicatorButton.qml</file> <file alias="QGroundControl/Controls/IndicatorButton.qml">src/QmlControls/IndicatorButton.qml</file>
<file alias="QGroundControl/Controls/JoystickThumbPad.qml">src/QmlControls/JoystickThumbPad.qml</file> <file alias="QGroundControl/Controls/JoystickThumbPad.qml">src/QmlControls/JoystickThumbPad.qml</file>
<file alias="QGroundControl/Controls/MainToolBar.qml">src/ui/toolbar/MainToolBar.qml</file> <file alias="QGroundControl/Controls/MainToolBar.qml">src/ui/toolbar/MainToolBar.qml</file>
<file alias="QGroundControl/Controls/MainToolBarIndicators.qml">src/ui/toolbar/MainToolBarIndicators.qml</file> <file alias="QGroundControl/Controls/MainToolBarIndicators.qml">src/ui/toolbar/MainToolBarIndicators.qml</file>
<file alias="QGroundControl/Controls/MissionCommandDialog.qml">src/QmlControls/MissionCommandDialog.qml</file> <file alias="QGroundControl/Controls/MissionCommandDialog.qml">src/QmlControls/MissionCommandDialog.qml</file>
<file alias="QGroundControl/Controls/MissionItemEditor.qml">src/MissionEditor/MissionItemEditor.qml</file> <file alias="QGroundControl/Controls/MissionItemEditor.qml">src/PlanView/MissionItemEditor.qml</file>
<file alias="QGroundControl/Controls/MissionItemIndexLabel.qml">src/QmlControls/MissionItemIndexLabel.qml</file> <file alias="QGroundControl/Controls/MissionItemIndexLabel.qml">src/QmlControls/MissionItemIndexLabel.qml</file>
<file alias="QGroundControl/Controls/MissionItemMapVisual.qml">src/MissionEditor/MissionItemMapVisual.qml</file> <file alias="QGroundControl/Controls/MissionItemMapVisual.qml">src/PlanView/MissionItemMapVisual.qml</file>
<file alias="QGroundControl/Controls/MissionItemStatus.qml">src/MissionEditor/MissionItemStatus.qml</file> <file alias="QGroundControl/Controls/MissionItemStatus.qml">src/PlanView/MissionItemStatus.qml</file>
<file alias="QGroundControl/Controls/MissionSettingsMapVisual.qml">src/MissionEditor/MissionSettingsMapVisual.qml</file> <file alias="QGroundControl/Controls/MissionSettingsMapVisual.qml">src/PlanView/MissionSettingsMapVisual.qml</file>
<file alias="QGroundControl/Controls/ModeSwitchDisplay.qml">src/QmlControls/ModeSwitchDisplay.qml</file> <file alias="QGroundControl/Controls/ModeSwitchDisplay.qml">src/QmlControls/ModeSwitchDisplay.qml</file>
<file alias="QGroundControl/Controls/MultiRotorMotorDisplay.qml">src/QmlControls/MultiRotorMotorDisplay.qml</file> <file alias="QGroundControl/Controls/MultiRotorMotorDisplay.qml">src/QmlControls/MultiRotorMotorDisplay.qml</file>
<file alias="QGroundControl/Controls/OfflineMapButton.qml">src/QmlControls/OfflineMapButton.qml</file> <file alias="QGroundControl/Controls/OfflineMapButton.qml">src/QmlControls/OfflineMapButton.qml</file>
<file alias="QGroundControl/Controls/ParameterEditor.qml">src/QmlControls/ParameterEditor.qml</file> <file alias="QGroundControl/Controls/ParameterEditor.qml">src/QmlControls/ParameterEditor.qml</file>
<file alias="QGroundControl/Controls/ParameterEditorDialog.qml">src/QmlControls/ParameterEditorDialog.qml</file> <file alias="QGroundControl/Controls/ParameterEditorDialog.qml">src/QmlControls/ParameterEditorDialog.qml</file>
<file alias="QGroundControl/Controls/PlanToolBar.qml">src/MissionEditor/PlanToolBar.qml</file> <file alias="QGroundControl/Controls/PlanToolBar.qml">src/PlanView/PlanToolBar.qml</file>
<file alias="QGroundControl/Controls/QGCButton.qml">src/QmlControls/QGCButton.qml</file> <file alias="QGroundControl/Controls/QGCButton.qml">src/QmlControls/QGCButton.qml</file>
<file alias="QGroundControl/Controls/QGCCheckBox.qml">src/QmlControls/QGCCheckBox.qml</file> <file alias="QGroundControl/Controls/QGCCheckBox.qml">src/QmlControls/QGCCheckBox.qml</file>
<file alias="QGroundControl/Controls/QGCColoredImage.qml">src/QmlControls/QGCColoredImage.qml</file> <file alias="QGroundControl/Controls/QGCColoredImage.qml">src/QmlControls/QGCColoredImage.qml</file>
...@@ -98,17 +98,17 @@ ...@@ -98,17 +98,17 @@
<file alias="QGroundControl/Controls/QGCViewMessage.qml">src/QmlControls/QGCViewMessage.qml</file> <file alias="QGroundControl/Controls/QGCViewMessage.qml">src/QmlControls/QGCViewMessage.qml</file>
<file alias="QGroundControl/Controls/QGCViewPanel.qml">src/QmlControls/QGCViewPanel.qml</file> <file alias="QGroundControl/Controls/QGCViewPanel.qml">src/QmlControls/QGCViewPanel.qml</file>
<file alias="QGroundControl/Controls/qmldir">src/QmlControls/QGroundControl.Controls.qmldir</file> <file alias="QGroundControl/Controls/qmldir">src/QmlControls/QGroundControl.Controls.qmldir</file>
<file alias="QGroundControl/Controls/RallyPointEditorHeader.qml">src/MissionEditor/RallyPointEditorHeader.qml</file> <file alias="QGroundControl/Controls/RallyPointEditorHeader.qml">src/PlanView/RallyPointEditorHeader.qml</file>
<file alias="QGroundControl/Controls/RallyPointItemEditor.qml">src/MissionEditor/RallyPointItemEditor.qml</file> <file alias="QGroundControl/Controls/RallyPointItemEditor.qml">src/PlanView/RallyPointItemEditor.qml</file>
<file alias="QGroundControl/Controls/RCChannelMonitor.qml">src/QmlControls/RCChannelMonitor.qml</file> <file alias="QGroundControl/Controls/RCChannelMonitor.qml">src/QmlControls/RCChannelMonitor.qml</file>
<file alias="QGroundControl/Controls/RoundButton.qml">src/QmlControls/RoundButton.qml</file> <file alias="QGroundControl/Controls/RoundButton.qml">src/QmlControls/RoundButton.qml</file>
<file alias="QGroundControl/Controls/SectionHeader.qml">src/MissionEditor/SectionHeader.qml</file> <file alias="QGroundControl/Controls/SectionHeader.qml">src/PlanView/SectionHeader.qml</file>
<file alias="QGroundControl/Controls/SetupPage.qml">src/AutoPilotPlugins/Common/SetupPage.qml</file> <file alias="QGroundControl/Controls/SetupPage.qml">src/AutoPilotPlugins/Common/SetupPage.qml</file>
<file alias="QGroundControl/Controls/SignalStrength.qml">src/ui/toolbar/SignalStrength.qml</file> <file alias="QGroundControl/Controls/SignalStrength.qml">src/ui/toolbar/SignalStrength.qml</file>
<file alias="QGroundControl/Controls/SimpleItemMapVisual.qml">src/MissionEditor/SimpleItemMapVisual.qml</file> <file alias="QGroundControl/Controls/SimpleItemMapVisual.qml">src/PlanView/SimpleItemMapVisual.qml</file>
<file alias="QGroundControl/Controls/SliderSwitch.qml">src/QmlControls/SliderSwitch.qml</file> <file alias="QGroundControl/Controls/SliderSwitch.qml">src/QmlControls/SliderSwitch.qml</file>
<file alias="QGroundControl/Controls/SubMenuButton.qml">src/QmlControls/SubMenuButton.qml</file> <file alias="QGroundControl/Controls/SubMenuButton.qml">src/QmlControls/SubMenuButton.qml</file>
<file alias="QGroundControl/Controls/SurveyMapVisual.qml">src/MissionEditor/SurveyMapVisual.qml</file> <file alias="QGroundControl/Controls/SurveyMapVisual.qml">src/PlanView/SurveyMapVisual.qml</file>
<file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file> <file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file>
<file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file> <file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file>
<file alias="QGroundControl/Controls/ToolStrip.qml">src/QmlControls/ToolStrip.qml</file> <file alias="QGroundControl/Controls/ToolStrip.qml">src/QmlControls/ToolStrip.qml</file>
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<file alias="QGroundControl/FlightMap/QGCCompassWidget.qml">src/FlightMap/Widgets/QGCCompassWidget.qml</file> <file alias="QGroundControl/FlightMap/QGCCompassWidget.qml">src/FlightMap/Widgets/QGCCompassWidget.qml</file>
<file alias="QGCInstrumentWidget.qml">src/FlightMap/Widgets/QGCInstrumentWidget.qml</file> <file alias="QGCInstrumentWidget.qml">src/FlightMap/Widgets/QGCInstrumentWidget.qml</file>
<file alias="QGCInstrumentWidgetAlternate.qml">src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml</file> <file alias="QGCInstrumentWidgetAlternate.qml">src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml</file>
<file alias="QGroundControl/FlightMap/QGCMapPolygonControls.qml">src/MissionEditor/QGCMapPolygonControls.qml</file> <file alias="QGroundControl/FlightMap/QGCMapPolygonControls.qml">src/PlanView/QGCMapPolygonControls.qml</file>
<file alias="QGroundControl/FlightMap/QGCPitchIndicator.qml">src/FlightMap/Widgets/QGCPitchIndicator.qml</file> <file alias="QGroundControl/FlightMap/QGCPitchIndicator.qml">src/FlightMap/Widgets/QGCPitchIndicator.qml</file>
<file alias="QGroundControl/FlightMap/QGCVideoBackground.qml">src/FlightMap/QGCVideoBackground.qml</file> <file alias="QGroundControl/FlightMap/QGCVideoBackground.qml">src/FlightMap/QGCVideoBackground.qml</file>
<file alias="QGroundControl/FlightMap/qmldir">src/FlightMap/qmldir</file> <file alias="QGroundControl/FlightMap/qmldir">src/FlightMap/qmldir</file>
...@@ -168,10 +168,10 @@ ...@@ -168,10 +168,10 @@
<file alias="SerialSettings.qml">src/ui/preferences/SerialSettings.qml</file> <file alias="SerialSettings.qml">src/ui/preferences/SerialSettings.qml</file>
<file alias="SetupParameterEditor.qml">src/VehicleSetup/SetupParameterEditor.qml</file> <file alias="SetupParameterEditor.qml">src/VehicleSetup/SetupParameterEditor.qml</file>
<file alias="SetupView.qml">src/VehicleSetup/SetupView.qml</file> <file alias="SetupView.qml">src/VehicleSetup/SetupView.qml</file>
<file alias="SimpleItemEditor.qml">src/MissionEditor/SimpleItemEditor.qml</file> <file alias="SimpleItemEditor.qml">src/PlanView/SimpleItemEditor.qml</file>
<file alias="SurveyItemEditor.qml">src/MissionEditor/SurveyItemEditor.qml</file> <file alias="SurveyItemEditor.qml">src/PlanView/SurveyItemEditor.qml</file>
<file alias="FWLandingPatternEditor.qml">src/MissionEditor/FWLandingPatternEditor.qml</file> <file alias="FWLandingPatternEditor.qml">src/PlanView/FWLandingPatternEditor.qml</file>
<file alias="MissionSettingsEditor.qml">src/MissionEditor/MissionSettingsEditor.qml</file> <file alias="MissionSettingsEditor.qml">src/PlanView/MissionSettingsEditor.qml</file>
<file alias="TcpSettings.qml">src/ui/preferences/TcpSettings.qml</file> <file alias="TcpSettings.qml">src/ui/preferences/TcpSettings.qml</file>
<file alias="test.qml">src/test.qml</file> <file alias="test.qml">src/test.qml</file>
<file alias="UdpSettings.qml">src/ui/preferences/UdpSettings.qml</file> <file alias="UdpSettings.qml">src/ui/preferences/UdpSettings.qml</file>
......
...@@ -34,42 +34,54 @@ FlightMap { ...@@ -34,42 +34,54 @@ FlightMap {
property var qgcView ///< QGCView control which contains this map property var qgcView ///< QGCView control which contains this map
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
property bool _activeVehicleCoordinateValid: _activeVehicle ? _activeVehicle.coordinateValid : false property var _activeVehicleCoordinate: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
property var activeVehicleCoordinate: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
property var _gotoHereCoordinate: QtPositioning.coordinate() property var _gotoHereCoordinate: QtPositioning.coordinate()
property int _retaskSequence: 0 property int _retaskSequence: 0
property real _toolButtonTopMargin: parent.height - ScreenTools.availableHeight + (ScreenTools.defaultFontPixelHeight / 2) property real _toolButtonTopMargin: parent.height - ScreenTools.availableHeight + (ScreenTools.defaultFontPixelHeight / 2)
property bool _disableVehicleTracking: false property bool _disableVehicleTracking: false
property bool _keepVehicleCentered: _mainIsMap ? false : true property bool _keepVehicleCentered: _mainIsMap ? false : true
property bool _followVehicleSetting: true ///< User facing setting for follow vehicle property bool _firstVehiclePositionReceived: false
property bool _followVehicle: _followVehicleSetting && _activeVehicleCoordinateValid ///< Control map follow vehicle functionality property bool _userPanned: false
property bool _firstVehiclePosition: true
Component.onCompleted: { Component.onCompleted: {
QGroundControl.flightMapPosition = center QGroundControl.flightMapPosition = center
QGroundControl.flightMapZoom = zoomLevel QGroundControl.flightMapZoom = zoomLevel
possibleCenterToGCSPosition()
} }
// Track last known map position and zoom in settings
onZoomLevelChanged: QGroundControl.flightMapZoom = zoomLevel onZoomLevelChanged: QGroundControl.flightMapZoom = zoomLevel
onCenterChanged: QGroundControl.flightMapPosition = center
// When the user pans the map we leave things alone until the panRecenterTimer fires // We move the map to the gcs position id:
// - We don't have a vehicle position yet
// - The user has not futzed with the map
onGcsPositionChanged: possibleCenterToGCSPosition()
function possibleCenterToGCSPosition() {
if (!_firstVehiclePositionReceived && !_userPanned && gcsPosition.isValid) {
center = gcsPosition
}
}
// When the user pans the map we stop responding to vehicle coordinate updates until the panRecenterTimer fires
Connections { Connections {
target: gesture target: gesture
onPanFinished: { onPanFinished: {
_userPanned = true
_disableVehicleTracking = true _disableVehicleTracking = true
panRecenterTimer.start() panRecenterTimer.start()
} }
onFlickFinished: { onFlickFinished: {
_userPanned = true
_disableVehicleTracking = true _disableVehicleTracking = true
panRecenterTimer.start() panRecenterTimer.start()
} }
} }
onCenterChanged: QGroundControl.flightMapPosition = center
function pointInRect(point, rect) { function pointInRect(point, rect) {
return point.x > rect.x && return point.x > rect.x &&
point.x < rect.x + rect.width && point.x < rect.x + rect.width &&
...@@ -100,22 +112,22 @@ FlightMap { ...@@ -100,22 +112,22 @@ FlightMap {
} }
function recenterNeeded() { function recenterNeeded() {
var vehiclePoint = flightMap.fromCoordinate(activeVehicleCoordinate, false /* clipToViewport */) var vehiclePoint = flightMap.fromCoordinate(_activeVehicleCoordinate, false /* clipToViewport */)
var centerViewport = Qt.rect(0, 0, width, height) var centerViewport = Qt.rect(0, 0, width, height)
return !pointInRect(vehiclePoint, centerViewport) return !pointInRect(vehiclePoint, centerViewport)
} }
function updateMapToVehiclePosition() { function updateMapToVehiclePosition() {
if (_followVehicle && !_disableVehicleTracking) { if (_activeVehicleCoordinate.isValid && !_disableVehicleTracking) {
if (_keepVehicleCentered) { if (_keepVehicleCentered) {
_firstVehiclePosition = true _firstVehiclePositionReceived = true
flightMap.center = activeVehicleCoordinate flightMap.center = _activeVehicleCoordinate
} else { } else {
if (_firstVehiclePosition) { if (!_firstVehiclePositionReceived) {
_firstVehiclePosition = false _firstVehiclePositionReceived = true
flightMap.center = activeVehicleCoordinate flightMap.center = _activeVehicleCoordinate
} else if (recenterNeeded()) { } else if (recenterNeeded()) {
animatedMapRecenter(flightMap.center, activeVehicleCoordinate) animatedMapRecenter(flightMap.center, _activeVehicleCoordinate)
} }
} }
} }
...@@ -266,10 +278,6 @@ FlightMap { ...@@ -266,10 +278,6 @@ FlightMap {
CenterMapDropPanel { CenterMapDropPanel {
map: _flightMap map: _flightMap
fitFunctions: mapFitFunctions fitFunctions: mapFitFunctions
showFollowVehicle: true
followVehicle: _followVehicleSetting
onFollowVehicleChanged: _followVehicleSetting = followVehicle
} }
} }
......
...@@ -7,13 +7,6 @@ ...@@ -7,13 +7,6 @@
* *
****************************************************************************/ ****************************************************************************/
/**
* @file
* @brief QGC Map Background
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.3 import QtQuick 2.3
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtLocation 5.3 import QtLocation 5.3
...@@ -27,34 +20,21 @@ import QGroundControl.ScreenTools 1.0 ...@@ -27,34 +20,21 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0 import QGroundControl.MultiVehicleManager 1.0
import QGroundControl.Vehicle 1.0 import QGroundControl.Vehicle 1.0
import QGroundControl.Mavlink 1.0 import QGroundControl.Mavlink 1.0
import QGroundControl.QGCPositionManager 1.0
Map { Map {
id: _map id: _map
zoomLevel: QGroundControl.flightMapZoom
center: QGroundControl.flightMapPosition
gesture.flickDeceleration: 3000
plugin: Plugin { name: "QGroundControl" }
property string mapName: 'defaultMap' property string mapName: 'defaultMap'
property bool isSatelliteMap: activeMapType.name.indexOf("Satellite") > -1 || activeMapType.name.indexOf("Hybrid") > -1 property bool isSatelliteMap: activeMapType.name.indexOf("Satellite") > -1 || activeMapType.name.indexOf("Hybrid") > -1
property var gcsPosition: QtPositioning.coordinate()
readonly property real maxZoomLevel: 20 readonly property real maxZoomLevel: 20
property variant scaleLengths: [5, 10, 25, 50, 100, 150, 250, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000]
function formatDistance(meters)
{
var dist = Math.round(meters)
if (dist > 1000 ){
if (dist > 100000){
dist = Math.round(dist / 1000)
}
else{
dist = Math.round(dist / 100)
dist = dist / 10
}
dist = dist + " km"
}
else{
dist = dist + " m"
}
return dist
}
function setVisibleRegion(region) { function setVisibleRegion(region) {
// This works around a bug on Qt where if you set a visibleRegion and then the user moves or zooms the map // This works around a bug on Qt where if you set a visibleRegion and then the user moves or zooms the map
...@@ -64,13 +44,18 @@ Map { ...@@ -64,13 +44,18 @@ Map {
_map.visibleRegion = region _map.visibleRegion = region
} }
zoomLevel: 18 ExclusiveGroup { id: mapTypeGroup }
center: QGroundControl.lastKnownHomePosition
gesture.flickDeceleration: 3000
plugin: Plugin { name: "QGroundControl" } // Update ground station position
Connections {
target: QGroundControl.qgcPositionManger
ExclusiveGroup { id: mapTypeGroup } onLastPositionUpdated: {
if (valid && lastPosition.latitude && Math.abs(lastPosition.latitude) > 0.001 && lastPosition.longitude && Math.abs(lastPosition.longitude) > 0.001) {
gcsPosition = QtPositioning.coordinate(lastPosition.latitude,lastPosition.longitude)
}
}
}
function updateActiveMapType() { function updateActiveMapType() {
var settings = QGroundControl.settingsManager.flightMapSettings var settings = QGroundControl.settingsManager.flightMapSettings
...@@ -99,10 +84,10 @@ Map { ...@@ -99,10 +84,10 @@ Map {
MapQuickItem { MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY anchorPoint.y: sourceItem.anchorPointY
visible: mainWindow.gcsPosition.isValid visible: gcsPosition.isValid
coordinate: mainWindow.gcsPosition coordinate: gcsPosition
sourceItem: MissionItemIndexLabel { sourceItem: MissionItemIndexLabel {
label: "Q" label: "Q"
} }
} }
} // Map } // Map
...@@ -25,8 +25,6 @@ ColumnLayout { ...@@ -25,8 +25,6 @@ ColumnLayout {
property var fitFunctions property var fitFunctions
property bool showMission: true property bool showMission: true
property bool showAllItems: true property bool showAllItems: true
property bool showFollowVehicle: false
property bool followVehicle: false
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
...@@ -70,7 +68,7 @@ ColumnLayout { ...@@ -70,7 +68,7 @@ ColumnLayout {
QGCButton { QGCButton {
text: qsTr("Current Location") text: qsTr("Current Location")
Layout.fillWidth: true Layout.fillWidth: true
enabled: mainWindow.gcsPosition.isValid && !followVehicleCheckBox.checked enabled: mainWindow.gcsPosition.isValid
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
...@@ -81,23 +79,11 @@ ColumnLayout { ...@@ -81,23 +79,11 @@ ColumnLayout {
QGCButton { QGCButton {
text: qsTr("Vehicle") text: qsTr("Vehicle")
Layout.fillWidth: true Layout.fillWidth: true
enabled: _activeVehicle && _activeVehicle.latitude != 0 && _activeVehicle.longitude != 0 && !followVehicleCheckBox.checked enabled: _activeVehicle && _activeVehicle.coordinate.isValid
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
map.center = activeVehicle.coordinate map.center = activeVehicle.coordinate
} }
} }
QGCCheckBox {
id: followVehicleCheckBox
text: qsTr("Follow Vehicle")
checked: followVehicle
visible: showFollowVehicle
onClicked: {
dropPanel.hide()
root.followVehicle = checked
}
}
} // Column } // Column
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include "ParameterManager.h" #include "ParameterManager.h"
#include "QGroundControlQmlGlobal.h" #include "QGroundControlQmlGlobal.h"
#include "SettingsManager.h" #include "SettingsManager.h"
#include "MissionSettingsComplexItem.h" #include "MissionSettingsItem.h"
#ifndef __mobile__ #ifndef __mobile__
#include "MainWindow.h" #include "MainWindow.h"
...@@ -49,6 +49,7 @@ const int MissionController::_missionFileVersion = 2; ...@@ -49,6 +49,7 @@ const int MissionController::_missionFileVersion = 2;
MissionController::MissionController(QObject *parent) MissionController::MissionController(QObject *parent)
: PlanElementController(parent) : PlanElementController(parent)
, _visualItems(NULL) , _visualItems(NULL)
, _settingsItem(NULL)
, _firstItemsFromVehicle(false) , _firstItemsFromVehicle(false)
, _missionItemsRequested(false) , _missionItemsRequested(false)
, _queuedSend(false) , _queuedSend(false)
...@@ -117,7 +118,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -117,7 +118,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
if (_activeVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0) { if (_activeVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0) {
// First item is fake home position // First item is fake home position
_addMissionSettings(_activeVehicle, newControllerMissionItems, false /* addToCenter */); _addMissionSettings(_activeVehicle, newControllerMissionItems, false /* addToCenter */);
MissionSettingsComplexItem* settingsItem = newControllerMissionItems->value<MissionSettingsComplexItem*>(0); MissionSettingsItem* settingsItem = newControllerMissionItems->value<MissionSettingsItem*>(0);
if (!settingsItem) { if (!settingsItem) {
qWarning() << "First item is not settings item"; qWarning() << "First item is not settings item";
return; return;
...@@ -133,10 +134,11 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -133,10 +134,11 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_deinitAllVisualItems(); _deinitAllVisualItems();
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = NULL;
_visualItems = newControllerMissionItems; _visualItems = newControllerMissionItems;
if (!_activeVehicle->firmwarePlugin()->sendHomePositionToVehicle() || _visualItems->count() == 0) { if (!_activeVehicle->firmwarePlugin()->sendHomePositionToVehicle() || _visualItems->count() == 0) {
_addMissionSettings(_activeVehicle, _visualItems, true /* addToCenter */); _addMissionSettings(_activeVehicle, _visualItems, _visualItems->count() > 0 /* addToCenter */);
} }
_missionItemsRequested = false; _missionItemsRequested = false;
...@@ -187,7 +189,7 @@ bool MissionController::_convertToMissionItems(QmlObjectListModel* visualMission ...@@ -187,7 +189,7 @@ bool MissionController::_convertToMissionItems(QmlObjectListModel* visualMission
} }
// Mission settings has a special case for end mission action // Mission settings has a special case for end mission action
MissionSettingsComplexItem* settingsItem = visualMissionItems->value<MissionSettingsComplexItem*>(0); MissionSettingsItem* settingsItem = visualMissionItems->value<MissionSettingsItem*>(0);
if (settingsItem) { if (settingsItem) {
endActionSet = settingsItem->addMissionEndAction(rgMissionItems, lastSeqNum + 1, missionItemParent); endActionSet = settingsItem->addMissionEndAction(rgMissionItems, lastSeqNum + 1, missionItemParent);
} }
...@@ -289,6 +291,7 @@ void MissionController::removeAll(void) ...@@ -289,6 +291,7 @@ void MissionController::removeAll(void)
if (_visualItems) { if (_visualItems) {
_deinitAllVisualItems(); _deinitAllVisualItems();
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = NULL;
_visualItems = new QmlObjectListModel(this); _visualItems = new QmlObjectListModel(this);
_addMissionSettings(_activeVehicle, _visualItems, false /* addToCenter */); _addMissionSettings(_activeVehicle, _visualItems, false /* addToCenter */);
_initAllVisualItems(); _initAllVisualItems();
...@@ -412,7 +415,7 @@ bool MissionController::_loadJsonMissionFileV1(Vehicle* vehicle, const QJsonObje ...@@ -412,7 +415,7 @@ bool MissionController::_loadJsonMissionFileV1(Vehicle* vehicle, const QJsonObje
SimpleMissionItem* item = new SimpleMissionItem(vehicle, visualItems); SimpleMissionItem* item = new SimpleMissionItem(vehicle, visualItems);
if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) { if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) {
MissionSettingsComplexItem* settingsItem = new MissionSettingsComplexItem(vehicle, visualItems); MissionSettingsItem* settingsItem = new MissionSettingsItem(vehicle, visualItems);
settingsItem->setCoordinate(item->coordinate()); settingsItem->setCoordinate(item->coordinate());
visualItems->insert(0, settingsItem); visualItems->insert(0, settingsItem);
item->deleteLater(); item->deleteLater();
...@@ -459,7 +462,7 @@ bool MissionController::_loadJsonMissionFileV2(Vehicle* vehicle, const QJsonObje ...@@ -459,7 +462,7 @@ bool MissionController::_loadJsonMissionFileV2(Vehicle* vehicle, const QJsonObje
settingsManager->appSettings()->offlineEditingHoverSpeed()->setRawValue(json[_jsonHoverSpeedKey].toDouble()); settingsManager->appSettings()->offlineEditingHoverSpeed()->setRawValue(json[_jsonHoverSpeedKey].toDouble());
} }
MissionSettingsComplexItem* settingsItem = new MissionSettingsComplexItem(vehicle, visualItems); MissionSettingsItem* settingsItem = new MissionSettingsItem(vehicle, visualItems);
settingsItem->setCoordinate(homeCoordinate); settingsItem->setCoordinate(homeCoordinate);
visualItems->insert(0, settingsItem); visualItems->insert(0, settingsItem);
qCDebug(MissionControllerLog) << "plannedHomePosition" << homeCoordinate; qCDebug(MissionControllerLog) << "plannedHomePosition" << homeCoordinate;
...@@ -523,9 +526,9 @@ bool MissionController::_loadJsonMissionFileV2(Vehicle* vehicle, const QJsonObje ...@@ -523,9 +526,9 @@ bool MissionController::_loadJsonMissionFileV2(Vehicle* vehicle, const QJsonObje
nextSequenceNumber = landingItem->lastSequenceNumber() + 1; nextSequenceNumber = landingItem->lastSequenceNumber() + 1;
qCDebug(MissionControllerLog) << "FW Landing Pattern load complete: nextSequenceNumber" << nextSequenceNumber; qCDebug(MissionControllerLog) << "FW Landing Pattern load complete: nextSequenceNumber" << nextSequenceNumber;
visualItems->append(landingItem); visualItems->append(landingItem);
} else if (complexItemType == MissionSettingsComplexItem::jsonComplexItemTypeValue) { } else if (complexItemType == MissionSettingsItem::jsonComplexItemTypeValue) {
qCDebug(MissionControllerLog) << "Loading Mission Settings: nextSequenceNumber" << nextSequenceNumber; qCDebug(MissionControllerLog) << "Loading Mission Settings: nextSequenceNumber" << nextSequenceNumber;
MissionSettingsComplexItem* settingsItem = new MissionSettingsComplexItem(vehicle, visualItems); MissionSettingsItem* settingsItem = new MissionSettingsItem(vehicle, visualItems);
if (!settingsItem->load(itemObject, nextSequenceNumber++, errorString)) { if (!settingsItem->load(itemObject, nextSequenceNumber++, errorString)) {
return false; return false;
} }
...@@ -630,6 +633,7 @@ void MissionController::loadFromFile(const QString& filename) ...@@ -630,6 +633,7 @@ void MissionController::loadFromFile(const QString& filename)
if (_visualItems) { if (_visualItems) {
_deinitAllVisualItems(); _deinitAllVisualItems();
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = NULL;
} }
_visualItems = newVisualItems; _visualItems = newVisualItems;
...@@ -719,9 +723,9 @@ void MissionController::saveToFile(const QString& filename) ...@@ -719,9 +723,9 @@ void MissionController::saveToFile(const QString& filename)
// Mission settings // Mission settings
MissionSettingsComplexItem* settingsItem = _visualItems->value<MissionSettingsComplexItem*>(0); MissionSettingsItem* settingsItem = _visualItems->value<MissionSettingsItem*>(0);
if (!settingsItem) { if (!settingsItem) {
qWarning() << "First item is not MissionSettingsComplexItem"; qWarning() << "First item is not MissionSettingsItem";
return; return;
} }
QJsonValue coordinateValue; QJsonValue coordinateValue;
...@@ -828,13 +832,7 @@ void MissionController::_recalcWaypointLines(void) ...@@ -828,13 +832,7 @@ void MissionController::_recalcWaypointLines(void)
bool firstCoordinateItem = true; bool firstCoordinateItem = true;
VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0)); VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0));
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(lastCoordinateItem); bool showHomePosition = _settingsItem->coordinate().isValid();
if (!settingsItem) {
qWarning() << "First item is not MissionSettingsComplexItem";
}
bool showHomePosition = settingsItem->showHomePosition();
qCDebug(MissionControllerLog) << "_recalcWaypointLines"; qCDebug(MissionControllerLog) << "_recalcWaypointLines";
...@@ -859,7 +857,7 @@ void MissionController::_recalcWaypointLines(void) ...@@ -859,7 +857,7 @@ void MissionController::_recalcWaypointLines(void)
if (!item->isStandaloneCoordinate()) { if (!item->isStandaloneCoordinate()) {
firstCoordinateItem = false; firstCoordinateItem = false;
VisualItemPair pair(lastCoordinateItem, item); VisualItemPair pair(lastCoordinateItem, item);
if (lastCoordinateItem != settingsItem || (showHomePosition && linkBackToHome)) { if (lastCoordinateItem != _settingsItem || (showHomePosition && linkBackToHome)) {
if (old_table.contains(pair)) { if (old_table.contains(pair)) {
// Do nothing, this segment already exists and is wired up // Do nothing, this segment already exists and is wired up
_linesTable[pair] = old_table.take(pair); _linesTable[pair] = old_table.take(pair);
...@@ -911,13 +909,8 @@ void MissionController::_recalcMissionFlightStatus() ...@@ -911,13 +909,8 @@ void MissionController::_recalcMissionFlightStatus()
bool firstCoordinateItem = true; bool firstCoordinateItem = true;
VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0)); VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0));
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(lastCoordinateItem);
if (!settingsItem) { bool showHomePosition = _settingsItem->coordinate().isValid();
qWarning() << "First item is not MissionSettingsComplexItem";
}
bool showHomePosition = settingsItem->showHomePosition();
qCDebug(MissionControllerLog) << "_recalcMissionFlightStatus"; qCDebug(MissionControllerLog) << "_recalcMissionFlightStatus";
...@@ -932,8 +925,8 @@ void MissionController::_recalcMissionFlightStatus() ...@@ -932,8 +925,8 @@ void MissionController::_recalcMissionFlightStatus()
double minAltSeen = 0.0; double minAltSeen = 0.0;
double maxAltSeen = 0.0; double maxAltSeen = 0.0;
const double homePositionAltitude = settingsItem->coordinate().altitude(); const double homePositionAltitude = _settingsItem->coordinate().altitude();
minAltSeen = maxAltSeen = settingsItem->coordinate().altitude(); minAltSeen = maxAltSeen = _settingsItem->coordinate().altitude();
double lastVehicleYaw = 0; double lastVehicleYaw = 0;
...@@ -1050,7 +1043,7 @@ void MissionController::_recalcMissionFlightStatus() ...@@ -1050,7 +1043,7 @@ void MissionController::_recalcMissionFlightStatus()
if (!item->isStandaloneCoordinate()) { if (!item->isStandaloneCoordinate()) {
firstCoordinateItem = false; firstCoordinateItem = false;
if (lastCoordinateItem != settingsItem || linkBackToHome) { if (lastCoordinateItem != _settingsItem || linkBackToHome) {
// This is a subsequent waypoint or we are forcing the first waypoint back to home // This is a subsequent waypoint or we are forcing the first waypoint back to home
double azimuth, distance, altDifference; double azimuth, distance, altDifference;
...@@ -1060,7 +1053,7 @@ void MissionController::_recalcMissionFlightStatus() ...@@ -1060,7 +1053,7 @@ void MissionController::_recalcMissionFlightStatus()
item->setDistance(distance); item->setDistance(distance);
_missionFlightStatus.totalDistance += distance; _missionFlightStatus.totalDistance += distance;
_missionFlightStatus.maxTelemetryDistance = qMax(_missionFlightStatus.maxTelemetryDistance, _calcDistanceToHome(item, settingsItem)); _missionFlightStatus.maxTelemetryDistance = qMax(_missionFlightStatus.maxTelemetryDistance, _calcDistanceToHome(item, _settingsItem));
// Calculate time/distance // Calculate time/distance
double hoverTime = distance / _missionFlightStatus.hoverSpeed; double hoverTime = distance / _missionFlightStatus.hoverSpeed;
...@@ -1093,7 +1086,7 @@ void MissionController::_recalcMissionFlightStatus() ...@@ -1093,7 +1086,7 @@ void MissionController::_recalcMissionFlightStatus()
// Add in distance/time inside complex items as well // Add in distance/time inside complex items as well
double distance = complexItem->complexDistance(); double distance = complexItem->complexDistance();
_missionFlightStatus.totalDistance += distance; _missionFlightStatus.totalDistance += distance;
_missionFlightStatus.maxTelemetryDistance = qMax(_missionFlightStatus.maxTelemetryDistance, complexItem->greatestDistanceTo(settingsItem->exitCoordinate())); _missionFlightStatus.maxTelemetryDistance = qMax(_missionFlightStatus.maxTelemetryDistance, complexItem->greatestDistanceTo(complexItem->exitCoordinate()));
double hoverTime = _missionFlightStatus.totalDistance / _missionFlightStatus.hoverSpeed; double hoverTime = _missionFlightStatus.totalDistance / _missionFlightStatus.hoverSpeed;
double cruiseTime = _missionFlightStatus.totalDistance / _missionFlightStatus.cruiseSpeed; double cruiseTime = _missionFlightStatus.totalDistance / _missionFlightStatus.cruiseSpeed;
...@@ -1191,8 +1184,26 @@ void MissionController::_recalcChildItems(void) ...@@ -1191,8 +1184,26 @@ void MissionController::_recalcChildItems(void)
} }
} }
void MissionController::_setPlannedHomePositionFromFirstCoordinate(void)
{
if (_settingsItem->coordinate().isValid()) {
return;
}
// Set the planned home position to be a deltae from first coordinate
for (int i=1; i<_visualItems->count(); i++) {
VisualMissionItem* item = _visualItems->value<VisualMissionItem*>(i);
if (item->specifiesCoordinate()) {
_settingsItem->setCoordinate(item->coordinate().atDistanceAndAzimuth(30, 0));
}
}
}
void MissionController::_recalcAll(void) void MissionController::_recalcAll(void)
{ {
_setPlannedHomePositionFromFirstCoordinate();
_recalcSequence(); _recalcSequence();
_recalcChildItems(); _recalcChildItems();
_recalcWaypointLines(); _recalcWaypointLines();
...@@ -1201,27 +1212,20 @@ void MissionController::_recalcAll(void) ...@@ -1201,27 +1212,20 @@ void MissionController::_recalcAll(void)
/// Initializes a new set of mission items /// Initializes a new set of mission items
void MissionController::_initAllVisualItems(void) void MissionController::_initAllVisualItems(void)
{ {
MissionSettingsComplexItem* settingsItem = NULL;
// Setup home position at index 0 // Setup home position at index 0
settingsItem = qobject_cast<MissionSettingsComplexItem*>(_visualItems->get(0)); _settingsItem = qobject_cast<MissionSettingsItem*>(_visualItems->get(0));
if (!settingsItem) { if (!_settingsItem) {
qWarning() << "First item not MissionSettingsComplexItem"; qWarning() << "First item not MissionSettingsItem";
return; return;
} }
_settingsItem->setIsCurrentItem(true);
settingsItem->setShowHomePosition(_editMode); if (!_editMode && _activeVehicle) {
settingsItem->setIsCurrentItem(true); _settingsItem->setCoordinate(_activeVehicle->homePosition());
if (!_editMode && _activeVehicle && _activeVehicle->homePositionAvailable()) {
settingsItem->setCoordinate(_activeVehicle->homePosition());
settingsItem->setShowHomePosition(true);
} }
emit plannedHomePositionChanged(plannedHomePosition()); connect(_settingsItem, &MissionSettingsItem::coordinateChanged, this, &MissionController::_recalcAll);
connect(settingsItem, &VisualMissionItem::coordinateChanged, this, &MissionController::_homeCoordinateChanged);
for (int i=0; i<_visualItems->count(); i++) { for (int i=0; i<_visualItems->count(); i++) {
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->get(i)); VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
...@@ -1298,7 +1302,6 @@ void MissionController::_activeVehicleBeingRemoved(void) ...@@ -1298,7 +1302,6 @@ void MissionController::_activeVehicleBeingRemoved(void)
disconnect(missionManager, &MissionManager::newMissionItemsAvailable, this, &MissionController::_newMissionItemsAvailableFromVehicle); disconnect(missionManager, &MissionManager::newMissionItemsAvailable, this, &MissionController::_newMissionItemsAvailableFromVehicle);
disconnect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged); disconnect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged);
disconnect(missionManager, &MissionManager::currentItemChanged, this, &MissionController::_currentMissionItemChanged); disconnect(missionManager, &MissionManager::currentItemChanged, this, &MissionController::_currentMissionItemChanged);
disconnect(_activeVehicle, &Vehicle::homePositionAvailableChanged, this, &MissionController::_activeVehicleHomePositionAvailableChanged);
disconnect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged); disconnect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged);
// We always remove all items on vehicle change. This leaves a user model hole: // We always remove all items on vehicle change. This leaves a user model hole:
...@@ -1317,7 +1320,6 @@ void MissionController::_activeVehicleSet(void) ...@@ -1317,7 +1320,6 @@ void MissionController::_activeVehicleSet(void)
connect(missionManager, &MissionManager::newMissionItemsAvailable, this, &MissionController::_newMissionItemsAvailableFromVehicle); connect(missionManager, &MissionManager::newMissionItemsAvailable, this, &MissionController::_newMissionItemsAvailableFromVehicle);
connect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged); connect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged);
connect(missionManager, &MissionManager::currentItemChanged, this, &MissionController::_currentMissionItemChanged); connect(missionManager, &MissionManager::currentItemChanged, this, &MissionController::_currentMissionItemChanged);
connect(_activeVehicle, &Vehicle::homePositionAvailableChanged, this, &MissionController::_activeVehicleHomePositionAvailableChanged);
connect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged); connect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged);
connect(_activeVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_activeVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
connect(_activeVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_activeVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
...@@ -1330,40 +1332,18 @@ void MissionController::_activeVehicleSet(void) ...@@ -1330,40 +1332,18 @@ void MissionController::_activeVehicleSet(void)
} }
_activeVehicleHomePositionChanged(_activeVehicle->homePosition()); _activeVehicleHomePositionChanged(_activeVehicle->homePosition());
_activeVehicleHomePositionAvailableChanged(_activeVehicle->homePositionAvailable());
emit complexMissionItemNamesChanged(); emit complexMissionItemNamesChanged();
} }
void MissionController::_activeVehicleHomePositionAvailableChanged(bool homePositionAvailable)
{
if (!_editMode && _visualItems) {
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(_visualItems->get(0));
if (settingsItem) {
settingsItem->setShowHomePosition(homePositionAvailable);
emit plannedHomePositionChanged(plannedHomePosition());
_recalcWaypointLines();
} else {
qWarning() << "First item is not MissionSettingsComplexItem";
}
}
}
void MissionController::_activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition) void MissionController::_activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition)
{ {
if (!_editMode && _visualItems) { if (_visualItems) {
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(_visualItems->get(0)); MissionSettingsItem* settingsItem = qobject_cast<MissionSettingsItem*>(_visualItems->get(0));
if (settingsItem) { if (settingsItem) {
if (settingsItem->coordinate() != homePosition) { settingsItem->setCoordinate(homePosition);
settingsItem->setCoordinate(homePosition);
settingsItem->setShowHomePosition(true);
qCDebug(MissionControllerLog) << "Home position update" << homePosition;
emit plannedHomePositionChanged(plannedHomePosition());
_recalcWaypointLines();
}
} else { } else {
qWarning() << "First item is not MissionSettingsComplexItem"; qWarning() << "First item is not MissionSettingsItem";
} }
} }
} }
...@@ -1479,46 +1459,44 @@ double MissionController::_normalizeLon(double lon) ...@@ -1479,46 +1459,44 @@ double MissionController::_normalizeLon(double lon)
/// Add the Mission Settings complex item to the front of the items /// Add the Mission Settings complex item to the front of the items
void MissionController::_addMissionSettings(Vehicle* vehicle, QmlObjectListModel* visualItems, bool addToCenter) void MissionController::_addMissionSettings(Vehicle* vehicle, QmlObjectListModel* visualItems, bool addToCenter)
{ {
bool homePositionSet = false; MissionSettingsItem* settingsItem = new MissionSettingsItem(vehicle, visualItems);
MissionSettingsComplexItem* settingsItem = new MissionSettingsComplexItem(vehicle, visualItems);
visualItems->insert(0, settingsItem); visualItems->insert(0, settingsItem);
if (visualItems->count() > 1 && addToCenter) { if (addToCenter) {
double north = 0.0; if (visualItems->count() > 1) {
double south = 0.0; double north = 0.0;
double east = 0.0; double south = 0.0;
double west = 0.0; double east = 0.0;
bool firstCoordSet = false; double west = 0.0;
bool firstCoordSet = false;
for (int i=1; i<visualItems->count(); i++) {
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(visualItems->get(i)); for (int i=1; i<visualItems->count(); i++) {
if (item->specifiesCoordinate()) { VisualMissionItem* item = qobject_cast<VisualMissionItem*>(visualItems->get(i));
if (firstCoordSet) { if (item->specifiesCoordinate()) {
double lat = _normalizeLat(item->coordinate().latitude()); if (firstCoordSet) {
double lon = _normalizeLon(item->coordinate().longitude()); double lat = _normalizeLat(item->coordinate().latitude());
north = fmax(north, lat); double lon = _normalizeLon(item->coordinate().longitude());
south = fmin(south, lat); north = fmax(north, lat);
east = fmax(east, lon); south = fmin(south, lat);
west = fmin(west, lon); east = fmax(east, lon);
} else { west = fmin(west, lon);
firstCoordSet = true; } else {
north = _normalizeLat(item->coordinate().latitude()); firstCoordSet = true;
south = north; north = _normalizeLat(item->coordinate().latitude());
east = _normalizeLon(item->coordinate().longitude()); south = north;
west = east; east = _normalizeLon(item->coordinate().longitude());
west = east;
}
} }
} }
}
if (firstCoordSet) { if (firstCoordSet) {
homePositionSet = true; settingsItem->setCoordinate(QGeoCoordinate((south + ((north - south) / 2)) - 90.0, (west + ((east - west) / 2)) - 180.0, 0.0));
settingsItem->setCoordinate(QGeoCoordinate((south + ((north - south) / 2)) - 90.0, (west + ((east - west) / 2)) - 180.0, 0.0)); }
} }
} } else {
settingsItem->setCoordinate(vehicle->homePosition());
if (!homePositionSet) {
settingsItem->setCoordinate(qgcApp()->lastKnownHomePosition());
} }
} }
...@@ -1554,24 +1532,6 @@ void MissionController::setDirty(bool dirty) ...@@ -1554,24 +1532,6 @@ void MissionController::setDirty(bool dirty)
} }
} }
QGeoCoordinate MissionController::plannedHomePosition(void)
{
if (_visualItems && _visualItems->count() > 0) {
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(_visualItems->get(0));
if (settingsItem && settingsItem->showHomePosition()) {
return settingsItem->coordinate();
}
}
return QGeoCoordinate();
}
void MissionController::_homeCoordinateChanged(void)
{
emit plannedHomePositionChanged(plannedHomePosition());
_recalcMissionFlightStatus();
}
QString MissionController::fileExtension(void) const QString MissionController::fileExtension(void) const
{ {
return QGCApplication::missionFileExtension; return QGCApplication::missionFileExtension;
...@@ -1585,7 +1545,7 @@ void MissionController::_scanForAdditionalSettings(QmlObjectListModel* visualIte ...@@ -1585,7 +1545,7 @@ void MissionController::_scanForAdditionalSettings(QmlObjectListModel* visualIte
qCDebug(MissionControllerLog) << "MissionController::_scanForAdditionalSettings count:scanIndex" << visualItems->count() << scanIndex; qCDebug(MissionControllerLog) << "MissionController::_scanForAdditionalSettings count:scanIndex" << visualItems->count() << scanIndex;
MissionSettingsComplexItem* settingsItem = qobject_cast<MissionSettingsComplexItem*>(visualItem); MissionSettingsItem* settingsItem = qobject_cast<MissionSettingsItem*>(visualItem);
if (settingsItem && settingsItem->scanForMissionSettings(visualItems, scanIndex, vehicle)) { if (settingsItem && settingsItem->scanForMissionSettings(visualItems, scanIndex, vehicle)) {
continue; continue;
} }
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
class CoordinateVector; class CoordinateVector;
class VisualMissionItem; class VisualMissionItem;
class MissionItem; class MissionItem;
class MissionSettingsItem;
Q_DECLARE_LOGGING_CATEGORY(MissionControllerLog) Q_DECLARE_LOGGING_CATEGORY(MissionControllerLog)
...@@ -50,7 +51,6 @@ public: ...@@ -50,7 +51,6 @@ public:
} MissionFlightStatus_t; } MissionFlightStatus_t;
// Mission settings // Mission settings
Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged)
Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged)
Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged)
Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged) Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged)
...@@ -107,7 +107,6 @@ public: ...@@ -107,7 +107,6 @@ public:
// Property accessors // Property accessors
QGeoCoordinate plannedHomePosition (void);
QmlObjectListModel* visualItems (void) { return _visualItems; } QmlObjectListModel* visualItems (void) { return _visualItems; }
QmlObjectListModel* waypointLines (void) { return &_waypointLines; } QmlObjectListModel* waypointLines (void) { return &_waypointLines; }
QStringList complexMissionItemNames (void) const; QStringList complexMissionItemNames (void) const;
...@@ -121,7 +120,6 @@ public: ...@@ -121,7 +120,6 @@ public:
double missionMaxTelemetry (void) const { return _missionFlightStatus.maxTelemetryDistance; } double missionMaxTelemetry (void) const { return _missionFlightStatus.maxTelemetryDistance; }
signals: signals:
void plannedHomePositionChanged(QGeoCoordinate plannedHomePosition);
void visualItemsChanged(void); void visualItemsChanged(void);
void waypointLinesChanged(void); void waypointLinesChanged(void);
void newItemsFromVehicle(void); void newItemsFromVehicle(void);
...@@ -137,13 +135,11 @@ signals: ...@@ -137,13 +135,11 @@ signals:
private slots: private slots:
void _newMissionItemsAvailableFromVehicle(bool removeAllRequested); void _newMissionItemsAvailableFromVehicle(bool removeAllRequested);
void _itemCommandChanged(void); void _itemCommandChanged(void);
void _activeVehicleHomePositionAvailableChanged(bool homePositionAvailable);
void _activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition); void _activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition);
void _inProgressChanged(bool inProgress); void _inProgressChanged(bool inProgress);
void _currentMissionItemChanged(int sequenceNumber); void _currentMissionItemChanged(int sequenceNumber);
void _recalcWaypointLines(void); void _recalcWaypointLines(void);
void _recalcMissionFlightStatus(void); void _recalcMissionFlightStatus(void);
void _homeCoordinateChanged(void);
void _updateContainsItems(void); void _updateContainsItems(void);
private: private:
...@@ -176,6 +172,7 @@ private: ...@@ -176,6 +172,7 @@ private:
void _setMissionMaxTelemetry(double missionMaxTelemetry); void _setMissionMaxTelemetry(double missionMaxTelemetry);
static void _scanForAdditionalSettings(QmlObjectListModel* visualItems, Vehicle* vehicle); static void _scanForAdditionalSettings(QmlObjectListModel* visualItems, Vehicle* vehicle);
static bool _convertToMissionItems(QmlObjectListModel* visualMissionItems, QList<MissionItem*>& rgMissionItems, QObject* missionItemParent); static bool _convertToMissionItems(QmlObjectListModel* visualMissionItems, QList<MissionItem*>& rgMissionItems, QObject* missionItemParent);
void _setPlannedHomePositionFromFirstCoordinate(void);
// Overrides from PlanElementController // Overrides from PlanElementController
void _activeVehicleBeingRemoved(void) final; void _activeVehicleBeingRemoved(void) final;
...@@ -183,6 +180,7 @@ private: ...@@ -183,6 +180,7 @@ private:
private: private:
QmlObjectListModel* _visualItems; QmlObjectListModel* _visualItems;
MissionSettingsItem* _settingsItem;
QmlObjectListModel _waypointLines; QmlObjectListModel _waypointLines;
CoordVectHashTable _linesTable; CoordVectHashTable _linesTable;
bool _firstItemsFromVehicle; bool _firstItemsFromVehicle;
......
[ [
{
"name": "PlannedHomePositionLatitude",
"shortDescription": "Planned home position latitude",
"type": "double",
"decimalPlaces": 7,
"defaultValue": 37.803784
},
{
"name": "PlannedHomePositionLongitude",
"shortDescription": "Planned home position longitude",
"type": "double",
"decimalPlaces": 7,
"defaultValue": -122.462276
},
{ {
"name": "PlannedHomePositionAltitude", "name": "PlannedHomePositionAltitude",
"shortDescription": "Planned home position altitude", "shortDescription": "Planned home position altitude",
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
****************************************************************************/ ****************************************************************************/
#include "MissionSettingsComplexItem.h" #include "MissionSettingsItem.h"
#include "JsonHelper.h" #include "JsonHelper.h"
#include "MissionController.h" #include "MissionController.h"
#include "QGCGeo.h" #include "QGCGeo.h"
...@@ -21,21 +21,17 @@ ...@@ -21,21 +21,17 @@
QGC_LOGGING_CATEGORY(MissionSettingsComplexItemLog, "MissionSettingsComplexItemLog") QGC_LOGGING_CATEGORY(MissionSettingsComplexItemLog, "MissionSettingsComplexItemLog")
const char* MissionSettingsComplexItem::jsonComplexItemTypeValue = "MissionSettings"; const char* MissionSettingsItem::jsonComplexItemTypeValue = "MissionSettings";
const char* MissionSettingsComplexItem::_plannedHomePositionLatitudeName = "PlannedHomePositionLatitude"; const char* MissionSettingsItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude";
const char* MissionSettingsComplexItem::_plannedHomePositionLongitudeName = "PlannedHomePositionLongitude"; const char* MissionSettingsItem::_missionFlightSpeedName = "FlightSpeed";
const char* MissionSettingsComplexItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude"; const char* MissionSettingsItem::_missionEndActionName = "MissionEndAction";
const char* MissionSettingsComplexItem::_missionFlightSpeedName = "FlightSpeed";
const char* MissionSettingsComplexItem::_missionEndActionName = "MissionEndAction";
QMap<QString, FactMetaData*> MissionSettingsComplexItem::_metaDataMap; QMap<QString, FactMetaData*> MissionSettingsItem::_metaDataMap;
MissionSettingsComplexItem::MissionSettingsComplexItem(Vehicle* vehicle, QObject* parent) MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent)
: ComplexMissionItem(vehicle, parent) : ComplexMissionItem(vehicle, parent)
, _specifyMissionFlightSpeed(false) , _specifyMissionFlightSpeed(false)
, _plannedHomePositionLatitudeFact (0, _plannedHomePositionLatitudeName, FactMetaData::valueTypeDouble)
, _plannedHomePositionLongitudeFact (0, _plannedHomePositionLongitudeName, FactMetaData::valueTypeDouble)
, _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble) , _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble)
, _missionFlightSpeedFact (0, _missionFlightSpeedName, FactMetaData::valueTypeDouble) , _missionFlightSpeedFact (0, _missionFlightSpeedName, FactMetaData::valueTypeDouble)
, _missionEndActionFact (0, _missionEndActionName, FactMetaData::valueTypeUint32) , _missionEndActionFact (0, _missionEndActionName, FactMetaData::valueTypeUint32)
...@@ -48,14 +44,10 @@ MissionSettingsComplexItem::MissionSettingsComplexItem(Vehicle* vehicle, QObject ...@@ -48,14 +44,10 @@ MissionSettingsComplexItem::MissionSettingsComplexItem(Vehicle* vehicle, QObject
_metaDataMap = FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/MissionSettings.FactMetaData.json"), NULL /* metaDataParent */); _metaDataMap = FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/MissionSettings.FactMetaData.json"), NULL /* metaDataParent */);
} }
_plannedHomePositionLatitudeFact.setMetaData (_metaDataMap[_plannedHomePositionLatitudeName]);
_plannedHomePositionLongitudeFact.setMetaData (_metaDataMap[_plannedHomePositionLongitudeName]);
_plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]); _plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]);
_missionFlightSpeedFact.setMetaData (_metaDataMap[_missionFlightSpeedName]); _missionFlightSpeedFact.setMetaData (_metaDataMap[_missionFlightSpeedName]);
_missionEndActionFact.setMetaData (_metaDataMap[_missionEndActionName]); _missionEndActionFact.setMetaData (_metaDataMap[_missionEndActionName]);
_plannedHomePositionLatitudeFact.setRawValue (_plannedHomePositionLatitudeFact.rawDefaultValue());
_plannedHomePositionLongitudeFact.setRawValue (_plannedHomePositionLongitudeFact.rawDefaultValue());
_plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue()); _plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue());
_missionEndActionFact.setRawValue (_missionEndActionFact.rawDefaultValue()); _missionEndActionFact.setRawValue (_missionEndActionFact.rawDefaultValue());
...@@ -66,25 +58,24 @@ MissionSettingsComplexItem::MissionSettingsComplexItem(Vehicle* vehicle, QObject ...@@ -66,25 +58,24 @@ MissionSettingsComplexItem::MissionSettingsComplexItem(Vehicle* vehicle, QObject
setHomePositionSpecialCase(true); setHomePositionSpecialCase(true);
connect(this, &MissionSettingsComplexItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsComplexItem::_setDirtyAndUpdateLastSequenceNumber); connect(this, &MissionSettingsItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(&_cameraSection, &CameraSection::missionItemCountChanged, this, &MissionSettingsComplexItem::_setDirtyAndUpdateLastSequenceNumber); connect(&_cameraSection, &CameraSection::missionItemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(&_plannedHomePositionLatitudeFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::_setDirtyAndUpdateCoordinate); connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty);
connect(&_plannedHomePositionLongitudeFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::_setDirtyAndUpdateCoordinate); connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_updateAltitudeInCoordinate);
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::_setDirtyAndUpdateCoordinate);
connect(&_missionFlightSpeedFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::_setDirty); connect(&_missionFlightSpeedFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty);
connect(&_missionEndActionFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::_setDirty); connect(&_missionEndActionFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty);
connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsComplexItem::_cameraSectionDirtyChanged); connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsItem::_cameraSectionDirtyChanged);
connect(&_missionFlightSpeedFact, &Fact::valueChanged, this, &MissionSettingsComplexItem::specifiedFlightSpeedChanged); connect(&_missionFlightSpeedFact, &Fact::valueChanged, this, &MissionSettingsItem::specifiedFlightSpeedChanged);
connect(&_cameraSection, &CameraSection::specifyGimbalChanged, this, &MissionSettingsComplexItem::specifiedGimbalYawChanged); connect(&_cameraSection, &CameraSection::specifyGimbalChanged, this, &MissionSettingsItem::specifiedGimbalYawChanged);
connect(&_cameraSection, &CameraSection::specifiedGimbalYawChanged, this, &MissionSettingsComplexItem::specifiedGimbalYawChanged); connect(&_cameraSection, &CameraSection::specifiedGimbalYawChanged, this, &MissionSettingsItem::specifiedGimbalYawChanged);
} }
void MissionSettingsComplexItem::setSpecifyMissionFlightSpeed(bool specifyMissionFlightSpeed) void MissionSettingsItem::setSpecifyMissionFlightSpeed(bool specifyMissionFlightSpeed)
{ {
if (specifyMissionFlightSpeed != _specifyMissionFlightSpeed) { if (specifyMissionFlightSpeed != _specifyMissionFlightSpeed) {
_specifyMissionFlightSpeed = specifyMissionFlightSpeed; _specifyMissionFlightSpeed = specifyMissionFlightSpeed;
...@@ -92,7 +83,7 @@ void MissionSettingsComplexItem::setSpecifyMissionFlightSpeed(bool specifyMissio ...@@ -92,7 +83,7 @@ void MissionSettingsComplexItem::setSpecifyMissionFlightSpeed(bool specifyMissio
} }
} }
int MissionSettingsComplexItem::lastSequenceNumber(void) const int MissionSettingsItem::lastSequenceNumber(void) const
{ {
int lastSequenceNumber = _sequenceNumber; int lastSequenceNumber = _sequenceNumber;
...@@ -104,7 +95,7 @@ int MissionSettingsComplexItem::lastSequenceNumber(void) const ...@@ -104,7 +95,7 @@ int MissionSettingsComplexItem::lastSequenceNumber(void) const
return lastSequenceNumber; return lastSequenceNumber;
} }
void MissionSettingsComplexItem::setDirty(bool dirty) void MissionSettingsItem::setDirty(bool dirty)
{ {
if (_dirty != dirty) { if (_dirty != dirty) {
_dirty = dirty; _dirty = dirty;
...@@ -112,14 +103,14 @@ void MissionSettingsComplexItem::setDirty(bool dirty) ...@@ -112,14 +103,14 @@ void MissionSettingsComplexItem::setDirty(bool dirty)
} }
} }
void MissionSettingsComplexItem::save(QJsonArray& missionItems) void MissionSettingsItem::save(QJsonArray& missionItems)
{ {
QList<MissionItem*> items; QList<MissionItem*> items;
appendMissionItems(items, this); appendMissionItems(items, this);
// First item show be planned home position, we are not reponsible for save/load // First item show be planned home position, we are not reponsible for save/load
// Remained we just output as is // Remaining items we just output as is
for (int i=1; i<items.count(); i++) { for (int i=1; i<items.count(); i++) {
MissionItem* item = items[i]; MissionItem* item = items[i];
QJsonObject saveObject; QJsonObject saveObject;
...@@ -129,7 +120,7 @@ void MissionSettingsComplexItem::save(QJsonArray& missionItems) ...@@ -129,7 +120,7 @@ void MissionSettingsComplexItem::save(QJsonArray& missionItems)
} }
} }
void MissionSettingsComplexItem::setSequenceNumber(int sequenceNumber) void MissionSettingsItem::setSequenceNumber(int sequenceNumber)
{ {
if (_sequenceNumber != sequenceNumber) { if (_sequenceNumber != sequenceNumber) {
_sequenceNumber = sequenceNumber; _sequenceNumber = sequenceNumber;
...@@ -138,7 +129,7 @@ void MissionSettingsComplexItem::setSequenceNumber(int sequenceNumber) ...@@ -138,7 +129,7 @@ void MissionSettingsComplexItem::setSequenceNumber(int sequenceNumber)
} }
} }
bool MissionSettingsComplexItem::load(const QJsonObject& complexObject, int sequenceNumber, QString& errorString) bool MissionSettingsItem::load(const QJsonObject& complexObject, int sequenceNumber, QString& errorString)
{ {
Q_UNUSED(complexObject); Q_UNUSED(complexObject);
Q_UNUSED(sequenceNumber); Q_UNUSED(sequenceNumber);
...@@ -147,22 +138,22 @@ bool MissionSettingsComplexItem::load(const QJsonObject& complexObject, int sequ ...@@ -147,22 +138,22 @@ bool MissionSettingsComplexItem::load(const QJsonObject& complexObject, int sequ
return true; return true;
} }
double MissionSettingsComplexItem::greatestDistanceTo(const QGeoCoordinate &other) const double MissionSettingsItem::greatestDistanceTo(const QGeoCoordinate &other) const
{ {
Q_UNUSED(other); Q_UNUSED(other);
return 0; return 0;
} }
bool MissionSettingsComplexItem::specifiesCoordinate(void) const bool MissionSettingsItem::specifiesCoordinate(void) const
{ {
return false; return false;
} }
void MissionSettingsComplexItem::appendMissionItems(QList<MissionItem*>& items, QObject* missionItemParent) void MissionSettingsItem::appendMissionItems(QList<MissionItem*>& items, QObject* missionItemParent)
{ {
int seqNum = _sequenceNumber; int seqNum = _sequenceNumber;
// IMPORTANT NOTE: If anything changes here you must also change MissionSettingsComplexItem::scanForMissionSettings // IMPORTANT NOTE: If anything changes here you must also change MissionSettingsItem::scanForMissionSettings
// Planned home position // Planned home position
MissionItem* item = new MissionItem(seqNum++, MissionItem* item = new MissionItem(seqNum++,
...@@ -172,8 +163,8 @@ void MissionSettingsComplexItem::appendMissionItems(QList<MissionItem*>& items, ...@@ -172,8 +163,8 @@ void MissionSettingsComplexItem::appendMissionItems(QList<MissionItem*>& items,
0, // Acceptance radius 0, // Acceptance radius
0, // Not sure? 0, // Not sure?
0, // Yaw 0, // Yaw
_plannedHomePositionLatitudeFact.rawValue().toDouble(), coordinate().latitude(),
_plannedHomePositionLongitudeFact.rawValue().toDouble(), coordinate().longitude(),
_plannedHomePositionAltitudeFact.rawValue().toDouble(), _plannedHomePositionAltitudeFact.rawValue().toDouble(),
true, // autoContinue true, // autoContinue
false, // isCurrentItem false, // isCurrentItem
...@@ -199,11 +190,11 @@ void MissionSettingsComplexItem::appendMissionItems(QList<MissionItem*>& items, ...@@ -199,11 +190,11 @@ void MissionSettingsComplexItem::appendMissionItems(QList<MissionItem*>& items,
_cameraSection.appendMissionItems(items, missionItemParent, seqNum); _cameraSection.appendMissionItems(items, missionItemParent, seqNum);
} }
bool MissionSettingsComplexItem::addMissionEndAction(QList<MissionItem*>& items, int seqNum, QObject* missionItemParent) bool MissionSettingsItem::addMissionEndAction(QList<MissionItem*>& items, int seqNum, QObject* missionItemParent)
{ {
MissionItem* item = NULL; MissionItem* item = NULL;
// IMPORTANT NOTE: If anything changes here you must also change MissionSettingsComplexItem::scanForMissionSettings // IMPORTANT NOTE: If anything changes here you must also change MissionSettingsItem::scanForMissionSettings
// Find last waypoint coordinate information so we have a lat/lon/alt to use // Find last waypoint coordinate information so we have a lat/lon/alt to use
QGeoCoordinate lastWaypointCoord; QGeoCoordinate lastWaypointCoord;
...@@ -278,17 +269,17 @@ bool MissionSettingsComplexItem::addMissionEndAction(QList<MissionItem*>& items, ...@@ -278,17 +269,17 @@ bool MissionSettingsComplexItem::addMissionEndAction(QList<MissionItem*>& items,
} }
} }
bool MissionSettingsComplexItem::scanForMissionSettings(QmlObjectListModel* visualItems, int scanIndex, Vehicle* vehicle) bool MissionSettingsItem::scanForMissionSettings(QmlObjectListModel* visualItems, int scanIndex, Vehicle* vehicle)
{ {
bool foundSpeed = false; bool foundSpeed = false;
bool foundCameraSection = false; bool foundCameraSection = false;
bool stopLooking = false; bool stopLooking = false;
qCDebug(MissionSettingsComplexItemLog) << "MissionSettingsComplexItem::scanForMissionSettings count:scanIndex" << visualItems->count() << scanIndex; qCDebug(MissionSettingsComplexItemLog) << "MissionSettingsItem::scanForMissionSettings count:scanIndex" << visualItems->count() << scanIndex;
MissionSettingsComplexItem* settingsItem = visualItems->value<MissionSettingsComplexItem*>(scanIndex); MissionSettingsItem* settingsItem = visualItems->value<MissionSettingsItem*>(scanIndex);
if (!settingsItem) { if (!settingsItem) {
qWarning() << "Item specified by scanIndex not MissionSettingsComplexItem"; qWarning() << "Item specified by scanIndex not MissionSettingsItem";
return false; return false;
} }
...@@ -305,7 +296,7 @@ bool MissionSettingsComplexItem::scanForMissionSettings(QmlObjectListModel* visu ...@@ -305,7 +296,7 @@ bool MissionSettingsComplexItem::scanForMissionSettings(QmlObjectListModel* visu
qCDebug(MissionSettingsComplexItemLog) << item->command() << missionItem.param1() << missionItem.param2() << missionItem.param3() << missionItem.param4() << missionItem.param5() << missionItem.param6() << missionItem.param7() ; qCDebug(MissionSettingsComplexItemLog) << item->command() << missionItem.param1() << missionItem.param2() << missionItem.param3() << missionItem.param4() << missionItem.param5() << missionItem.param6() << missionItem.param7() ;
// See MissionSettingsComplexItem::getMissionItems for specs on what compomises a known mission setting // See MissionSettingsItem::getMissionItems for specs on what compomises a known mission setting
switch ((MAV_CMD)item->command()) { switch ((MAV_CMD)item->command()) {
case MAV_CMD_DO_CHANGE_SPEED: case MAV_CMD_DO_CHANGE_SPEED:
...@@ -384,56 +375,57 @@ bool MissionSettingsComplexItem::scanForMissionSettings(QmlObjectListModel* visu ...@@ -384,56 +375,57 @@ bool MissionSettingsComplexItem::scanForMissionSettings(QmlObjectListModel* visu
return foundSpeed || foundCameraSection; return foundSpeed || foundCameraSection;
} }
double MissionSettingsComplexItem::complexDistance(void) const double MissionSettingsItem::complexDistance(void) const
{ {
return 0; return 0;
} }
void MissionSettingsComplexItem::_setDirty(void) void MissionSettingsItem::_setDirty(void)
{ {
setDirty(true); setDirty(true);
} }
void MissionSettingsComplexItem::setCoordinate(const QGeoCoordinate& coordinate) void MissionSettingsItem::setCoordinate(const QGeoCoordinate& coordinate)
{ {
if (this->coordinate() != coordinate) { if (_plannedHomePositionCoordinate != coordinate) {
_plannedHomePositionLatitudeFact.setRawValue(coordinate.latitude()); _plannedHomePositionCoordinate = coordinate;
_plannedHomePositionLongitudeFact.setRawValue(coordinate.longitude()); emit coordinateChanged(coordinate);
emit exitCoordinateChanged(coordinate);
_plannedHomePositionAltitudeFact.setRawValue(coordinate.altitude()); _plannedHomePositionAltitudeFact.setRawValue(coordinate.altitude());
} }
} }
void MissionSettingsComplexItem::_setDirtyAndUpdateLastSequenceNumber(void) void MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber(void)
{ {
emit lastSequenceNumberChanged(lastSequenceNumber()); emit lastSequenceNumberChanged(lastSequenceNumber());
setDirty(true); setDirty(true);
} }
void MissionSettingsComplexItem::_setDirtyAndUpdateCoordinate(void) void MissionSettingsItem::_cameraSectionDirtyChanged(bool dirty)
{
emit coordinateChanged(coordinate());
emit exitCoordinateChanged(coordinate());
setDirty(true);
}
QGeoCoordinate MissionSettingsComplexItem::coordinate(void) const
{
return QGeoCoordinate(_plannedHomePositionLatitudeFact.rawValue().toDouble(), _plannedHomePositionLongitudeFact.rawValue().toDouble(), _plannedHomePositionAltitudeFact.rawValue().toDouble());
}
void MissionSettingsComplexItem::_cameraSectionDirtyChanged(bool dirty)
{ {
if (dirty) { if (dirty) {
setDirty(true); setDirty(true);
} }
} }
double MissionSettingsComplexItem::specifiedFlightSpeed(void) double MissionSettingsItem::specifiedFlightSpeed(void)
{ {
return _specifyMissionFlightSpeed ? _missionFlightSpeedFact.rawValue().toDouble() : std::numeric_limits<double>::quiet_NaN(); return _specifyMissionFlightSpeed ? _missionFlightSpeedFact.rawValue().toDouble() : std::numeric_limits<double>::quiet_NaN();
} }
double MissionSettingsComplexItem::specifiedGimbalYaw(void) double MissionSettingsItem::specifiedGimbalYaw(void)
{ {
return _cameraSection.specifyGimbal() ? _cameraSection.gimbalYaw()->rawValue().toDouble() : std::numeric_limits<double>::quiet_NaN(); return _cameraSection.specifyGimbal() ? _cameraSection.gimbalYaw()->rawValue().toDouble() : std::numeric_limits<double>::quiet_NaN();
} }
void MissionSettingsItem::_updateAltitudeInCoordinate(QVariant value)
{
double newAltitude = value.toDouble();
if (!qFuzzyCompare(_plannedHomePositionCoordinate.altitude(), newAltitude)) {
_plannedHomePositionCoordinate.setAltitude(newAltitude);
emit coordinateChanged(_plannedHomePositionCoordinate);
emit exitCoordinateChanged(_plannedHomePositionCoordinate);
}
}
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
Q_DECLARE_LOGGING_CATEGORY(MissionSettingsComplexItemLog) Q_DECLARE_LOGGING_CATEGORY(MissionSettingsComplexItemLog)
class MissionSettingsComplexItem : public ComplexMissionItem class MissionSettingsItem : public ComplexMissionItem
{ {
Q_OBJECT Q_OBJECT
public: public:
MissionSettingsComplexItem(Vehicle* vehicle, QObject* parent = NULL); MissionSettingsItem(Vehicle* vehicle, QObject* parent = NULL);
enum MissionEndAction { enum MissionEndAction {
MissionEndNoAction, MissionEndNoAction,
...@@ -36,14 +36,10 @@ public: ...@@ -36,14 +36,10 @@ public:
Q_PROPERTY(bool specifyMissionFlightSpeed READ specifyMissionFlightSpeed WRITE setSpecifyMissionFlightSpeed NOTIFY specifyMissionFlightSpeedChanged) Q_PROPERTY(bool specifyMissionFlightSpeed READ specifyMissionFlightSpeed WRITE setSpecifyMissionFlightSpeed NOTIFY specifyMissionFlightSpeedChanged)
Q_PROPERTY(Fact* missionFlightSpeed READ missionFlightSpeed CONSTANT) Q_PROPERTY(Fact* missionFlightSpeed READ missionFlightSpeed CONSTANT)
Q_PROPERTY(Fact* missionEndAction READ missionEndAction CONSTANT) Q_PROPERTY(Fact* missionEndAction READ missionEndAction CONSTANT)
Q_PROPERTY(Fact* plannedHomePositionLatitude READ plannedHomePositionLatitude CONSTANT)
Q_PROPERTY(Fact* plannedHomePositionLongitude READ plannedHomePositionLongitude CONSTANT)
Q_PROPERTY(Fact* plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT) Q_PROPERTY(Fact* plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT)
Q_PROPERTY(QObject* cameraSection READ cameraSection CONSTANT) Q_PROPERTY(QObject* cameraSection READ cameraSection CONSTANT)
bool specifyMissionFlightSpeed (void) const { return _specifyMissionFlightSpeed; } bool specifyMissionFlightSpeed (void) const { return _specifyMissionFlightSpeed; }
Fact* plannedHomePositionLatitude (void) { return &_plannedHomePositionLatitudeFact; }
Fact* plannedHomePositionLongitude(void) { return &_plannedHomePositionLongitudeFact; }
Fact* plannedHomePositionAltitude (void) { return &_plannedHomePositionAltitudeFact; } Fact* plannedHomePositionAltitude (void) { return &_plannedHomePositionAltitudeFact; }
Fact* missionFlightSpeed (void) { return &_missionFlightSpeedFact; } Fact* missionFlightSpeed (void) { return &_missionFlightSpeedFact; }
Fact* missionEndAction (void) { return &_missionEndActionFact; } Fact* missionEndAction (void) { return &_missionEndActionFact; }
...@@ -79,8 +75,8 @@ public: ...@@ -79,8 +75,8 @@ public:
QString commandDescription (void) const final { return "Mission Settings"; } QString commandDescription (void) const final { return "Mission Settings"; }
QString commandName (void) const final { return "Mission Settings"; } QString commandName (void) const final { return "Mission Settings"; }
QString abbreviation (void) const final { return "H"; } QString abbreviation (void) const final { return "H"; }
QGeoCoordinate coordinate (void) const final; QGeoCoordinate coordinate (void) const final { return _plannedHomePositionCoordinate; }
QGeoCoordinate exitCoordinate (void) const final { return coordinate(); } QGeoCoordinate exitCoordinate (void) const final { return _plannedHomePositionCoordinate; }
int sequenceNumber (void) const final { return _sequenceNumber; } int sequenceNumber (void) const final { return _sequenceNumber; }
double specifiedFlightSpeed (void) final; double specifiedFlightSpeed (void) final;
double specifiedGimbalYaw (void) final; double specifiedGimbalYaw (void) final;
...@@ -102,14 +98,13 @@ signals: ...@@ -102,14 +98,13 @@ signals:
private slots: private slots:
void _setDirtyAndUpdateLastSequenceNumber (void); void _setDirtyAndUpdateLastSequenceNumber (void);
void _setDirtyAndUpdateCoordinate (void);
void _setDirty (void); void _setDirty (void);
void _cameraSectionDirtyChanged (bool dirty); void _cameraSectionDirtyChanged (bool dirty);
void _updateAltitudeInCoordinate (QVariant value);
private: private:
bool _specifyMissionFlightSpeed; bool _specifyMissionFlightSpeed;
Fact _plannedHomePositionLatitudeFact; QGeoCoordinate _plannedHomePositionCoordinate; // Does not include altitde
Fact _plannedHomePositionLongitudeFact;
Fact _plannedHomePositionAltitudeFact; Fact _plannedHomePositionAltitudeFact;
Fact _missionFlightSpeedFact; Fact _missionFlightSpeedFact;
Fact _missionEndActionFact; Fact _missionEndActionFact;
...@@ -120,8 +115,6 @@ private: ...@@ -120,8 +115,6 @@ private:
static QMap<QString, FactMetaData*> _metaDataMap; static QMap<QString, FactMetaData*> _metaDataMap;
static const char* _plannedHomePositionLatitudeName;
static const char* _plannedHomePositionLongitudeName;
static const char* _plannedHomePositionAltitudeName; static const char* _plannedHomePositionAltitudeName;
static const char* _missionFlightSpeedName; static const char* _missionFlightSpeedName;
static const char* _missionEndActionName; static const char* _missionEndActionName;
......
...@@ -144,7 +144,6 @@ const SimpleMissionItem& SimpleMissionItem::operator=(const SimpleMissionItem& o ...@@ -144,7 +144,6 @@ const SimpleMissionItem& SimpleMissionItem::operator=(const SimpleMissionItem& o
setRawEdit(other._rawEdit); setRawEdit(other._rawEdit);
setDirty(other._dirty); setDirty(other._dirty);
setHomePositionSpecialCase(other._homePositionSpecialCase); setHomePositionSpecialCase(other._homePositionSpecialCase);
setShowHomePosition(other._showHomePosition);
_syncFrameToAltitudeRelativeToHome(); _syncFrameToAltitudeRelativeToHome();
......
...@@ -156,7 +156,6 @@ void SimpleMissionItemTest::_testSignals(void) ...@@ -156,7 +156,6 @@ void SimpleMissionItemTest::_testSignals(void)
headingDegreesChangedIndex, headingDegreesChangedIndex,
rawEditChangedIndex, rawEditChangedIndex,
uiModelChangedIndex, uiModelChangedIndex,
showHomePositionChangedIndex,
maxSignalIndex maxSignalIndex
}; };
...@@ -170,7 +169,6 @@ void SimpleMissionItemTest::_testSignals(void) ...@@ -170,7 +169,6 @@ void SimpleMissionItemTest::_testSignals(void)
headingDegreesChangedMask = 1 << headingDegreesChangedIndex, headingDegreesChangedMask = 1 << headingDegreesChangedIndex,
rawEditChangedMask = 1 << rawEditChangedIndex, rawEditChangedMask = 1 << rawEditChangedIndex,
uiModelChangedMask = 1 << uiModelChangedIndex, uiModelChangedMask = 1 << uiModelChangedIndex,
showHomePositionChangedMask = 1 << showHomePositionChangedIndex,
}; };
static const size_t cSimpleMissionItemSignals = maxSignalIndex; static const size_t cSimpleMissionItemSignals = maxSignalIndex;
...@@ -185,7 +183,6 @@ void SimpleMissionItemTest::_testSignals(void) ...@@ -185,7 +183,6 @@ void SimpleMissionItemTest::_testSignals(void)
rgSimpleMissionItemSignals[headingDegreesChangedIndex] = SIGNAL(headingDegreesChanged(double)); rgSimpleMissionItemSignals[headingDegreesChangedIndex] = SIGNAL(headingDegreesChanged(double));
rgSimpleMissionItemSignals[rawEditChangedIndex] = SIGNAL(rawEditChanged(bool)); rgSimpleMissionItemSignals[rawEditChangedIndex] = SIGNAL(rawEditChanged(bool));
rgSimpleMissionItemSignals[uiModelChangedIndex] = SIGNAL(uiModelChanged()); rgSimpleMissionItemSignals[uiModelChangedIndex] = SIGNAL(uiModelChanged());
rgSimpleMissionItemSignals[showHomePositionChangedIndex] = SIGNAL(showHomePositionChanged(bool));
MissionItem missionItem(1, // sequence number MissionItem missionItem(1, // sequence number
MAV_CMD_NAV_WAYPOINT, MAV_CMD_NAV_WAYPOINT,
......
...@@ -26,7 +26,6 @@ VisualMissionItem::VisualMissionItem(Vehicle* vehicle, QObject* parent) ...@@ -26,7 +26,6 @@ VisualMissionItem::VisualMissionItem(Vehicle* vehicle, QObject* parent)
, _isCurrentItem(false) , _isCurrentItem(false)
, _dirty(false) , _dirty(false)
, _homePositionSpecialCase(false) , _homePositionSpecialCase(false)
, _showHomePosition(false)
, _altDifference(0.0) , _altDifference(0.0)
, _altPercent(0.0) , _altPercent(0.0)
, _azimuth(0.0) , _azimuth(0.0)
...@@ -43,7 +42,6 @@ VisualMissionItem::VisualMissionItem(const VisualMissionItem& other, QObject* pa ...@@ -43,7 +42,6 @@ VisualMissionItem::VisualMissionItem(const VisualMissionItem& other, QObject* pa
, _isCurrentItem(false) , _isCurrentItem(false)
, _dirty(false) , _dirty(false)
, _homePositionSpecialCase(false) , _homePositionSpecialCase(false)
, _showHomePosition(false)
, _altDifference(0.0) , _altDifference(0.0)
, _altPercent(0.0) , _altPercent(0.0)
, _azimuth(0.0) , _azimuth(0.0)
...@@ -59,7 +57,6 @@ const VisualMissionItem& VisualMissionItem::operator=(const VisualMissionItem& o ...@@ -59,7 +57,6 @@ const VisualMissionItem& VisualMissionItem::operator=(const VisualMissionItem& o
setIsCurrentItem(other._isCurrentItem); setIsCurrentItem(other._isCurrentItem);
setDirty(other._dirty); setDirty(other._dirty);
_homePositionSpecialCase = other._homePositionSpecialCase; _homePositionSpecialCase = other._homePositionSpecialCase;
setShowHomePosition(other.showHomePosition());
setAltDifference(other._altDifference); setAltDifference(other._altDifference);
setAltPercent(other._altPercent); setAltPercent(other._altPercent);
setAzimuth(other._azimuth); setAzimuth(other._azimuth);
...@@ -112,14 +109,6 @@ void VisualMissionItem::setAzimuth(double azimuth) ...@@ -112,14 +109,6 @@ void VisualMissionItem::setAzimuth(double azimuth)
} }
} }
void VisualMissionItem::setShowHomePosition(bool showHomePosition)
{
if (showHomePosition != _showHomePosition) {
_showHomePosition = showHomePosition;
emit showHomePositionChanged(_showHomePosition);
}
}
void VisualMissionItem::setMissionFlightStatus(MissionController::MissionFlightStatus_t& missionFlightStatus) void VisualMissionItem::setMissionFlightStatus(MissionController::MissionFlightStatus_t& missionFlightStatus)
{ {
_missionFlightStatus = missionFlightStatus; _missionFlightStatus = missionFlightStatus;
......
...@@ -44,7 +44,6 @@ public: ...@@ -44,7 +44,6 @@ public:
const VisualMissionItem& operator=(const VisualMissionItem& other); const VisualMissionItem& operator=(const VisualMissionItem& other);
Q_PROPERTY(bool homePosition READ homePosition CONSTANT) ///< true: This item is being used as a home position indicator Q_PROPERTY(bool homePosition READ homePosition CONSTANT) ///< true: This item is being used as a home position indicator
Q_PROPERTY(bool showHomePosition READ showHomePosition WRITE setShowHomePosition NOTIFY showHomePositionChanged)
Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) ///< This is the entry point for a waypoint line into the item. For a simple item it is also the location of the item Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) ///< This is the entry point for a waypoint line into the item. For a simple item it is also the location of the item
Q_PROPERTY(bool coordinateHasRelativeAltitude READ coordinateHasRelativeAltitude NOTIFY coordinateHasRelativeAltitudeChanged) ///< true: coordinate.latitude is relative to home altitude Q_PROPERTY(bool coordinateHasRelativeAltitude READ coordinateHasRelativeAltitude NOTIFY coordinateHasRelativeAltitudeChanged) ///< true: coordinate.latitude is relative to home altitude
Q_PROPERTY(QGeoCoordinate exitCoordinate READ exitCoordinate NOTIFY exitCoordinateChanged) ///< This is the exit point for a waypoint line coming out of the item. Q_PROPERTY(QGeoCoordinate exitCoordinate READ exitCoordinate NOTIFY exitCoordinateChanged) ///< This is the exit point for a waypoint line coming out of the item.
...@@ -80,9 +79,7 @@ public: ...@@ -80,9 +79,7 @@ public:
// Property accesors // Property accesors
bool homePosition (void) const { return _homePositionSpecialCase; } bool homePosition (void) const { return _homePositionSpecialCase; }
bool showHomePosition (void) const { return _showHomePosition; }
void setHomePositionSpecialCase (bool homePositionSpecialCase) { _homePositionSpecialCase = homePositionSpecialCase; } void setHomePositionSpecialCase (bool homePositionSpecialCase) { _homePositionSpecialCase = homePositionSpecialCase; }
void setShowHomePosition (bool showHomePosition);
double altDifference (void) const { return _altDifference; } double altDifference (void) const { return _altDifference; }
double altPercent (void) const { return _altPercent; } double altPercent (void) const { return _altPercent; }
...@@ -151,7 +148,6 @@ public: ...@@ -151,7 +148,6 @@ public:
static const char* jsonTypeComplexItemValue; ///< Item type is Complex Item static const char* jsonTypeComplexItemValue; ///< Item type is Complex Item
signals: signals:
void showHomePositionChanged (bool showHomePosition);
void altDifferenceChanged (double altDifference); void altDifferenceChanged (double altDifference);
void altPercentChanged (double altPercent); void altPercentChanged (double altPercent);
void azimuthChanged (double azimuth); void azimuthChanged (double azimuth);
...@@ -183,7 +179,6 @@ protected: ...@@ -183,7 +179,6 @@ protected:
bool _isCurrentItem; bool _isCurrentItem;
bool _dirty; bool _dirty;
bool _homePositionSpecialCase; ///< true: This item is being used as a ui home position indicator bool _homePositionSpecialCase; ///< true: This item is being used as a ui home position indicator
bool _showHomePosition;
double _altDifference; ///< Difference in altitude from previous waypoint double _altDifference; ///< Difference in altitude from previous waypoint
double _altPercent; ///< Percent of total altitude change in mission double _altPercent; ///< Percent of total altitude change in mission
double _azimuth; ///< Azimuth to previous waypoint double _azimuth; ///< Azimuth to previous waypoint
......
...@@ -34,6 +34,7 @@ Rectangle { ...@@ -34,6 +34,7 @@ Rectangle {
height: valuesColumn.height + (_margin * 2) height: valuesColumn.height + (_margin * 2)
property var _missionVehicle: missionController.vehicle property var _missionVehicle: missionController.vehicle
property bool _vehicleHasHomePosition: _missionVehicle.homePosition.isValid
property bool _offlineEditing: _missionVehicle.isOfflineEditingVehicle property bool _offlineEditing: _missionVehicle.isOfflineEditingVehicle
property bool _showOfflineVehicleCombos: _offlineEditing && _multipleFirmware && _noMissionItemsAdded property bool _showOfflineVehicleCombos: _offlineEditing && _multipleFirmware && _noMissionItemsAdded
property bool _showCruiseSpeed: !_missionVehicle.multiRotor property bool _showCruiseSpeed: !_missionVehicle.multiRotor
...@@ -58,13 +59,14 @@ Rectangle { ...@@ -58,13 +59,14 @@ Rectangle {
id: plannedHomePositionSection id: plannedHomePositionSection
text: qsTr("Planned Home Position") text: qsTr("Planned Home Position")
showSpacer: false showSpacer: false
visible: !_vehicleHasHomePosition
} }
Column { Column {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
spacing: _margin spacing: _margin
visible: plannedHomePositionSection.checked visible: plannedHomePositionSection.checked && !_vehicleHasHomePosition
GridLayout { GridLayout {
anchors.left: parent.left anchors.left: parent.left
...@@ -73,22 +75,6 @@ Rectangle { ...@@ -73,22 +75,6 @@ Rectangle {
rowSpacing: columnSpacing rowSpacing: columnSpacing
columns: 2 columns: 2
QGCLabel {
text: qsTr("Latitude")
}
FactTextField {
fact: missionItem.plannedHomePositionLatitude
Layout.fillWidth: true
}
QGCLabel {
text: qsTr("Longitude")
}
FactTextField {
fact: missionItem.plannedHomePositionLongitude
Layout.fillWidth: true
}
QGCLabel { QGCLabel {
text: qsTr("Altitude") text: qsTr("Altitude")
} }
...@@ -178,7 +164,7 @@ Rectangle { ...@@ -178,7 +164,7 @@ Rectangle {
SectionHeader { SectionHeader {
id: missionDefaultsSectionHeader id: missionDefaultsSectionHeader
text: qsTr("Mission Defaults") text: qsTr("Mission Defaults")
checked: false checked: true
} }
Column { Column {
......
...@@ -103,7 +103,7 @@ Item { ...@@ -103,7 +103,7 @@ Item {
MissionItemIndicator { MissionItemIndicator {
coordinate: _missionItem.coordinate coordinate: _missionItem.coordinate
visible: _missionItem.showHomePosition visible: coordinate.isValid
z: QGroundControl.zOrderMapItems z: QGroundControl.zOrderMapItems
missionItem: _missionItem missionItem: _missionItem
......
...@@ -45,8 +45,6 @@ QGCView { ...@@ -45,8 +45,6 @@ QGCView {
property var _visualItems: missionController.visualItems property var _visualItems: missionController.visualItems
property var _currentMissionItem property var _currentMissionItem
property int _currentMissionIndex: 0 property int _currentMissionIndex: 0
property bool _firstVehiclePosition: true
property var activeVehiclePosition: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
property bool _lightWidgetBorders: editorMap.isSatelliteMap property bool _lightWidgetBorders: editorMap.isSatelliteMap
property bool _addWaypointOnClick: false property bool _addWaypointOnClick: false
property bool _singleComplexItem: missionController.complexMissionItemNames.length === 1 property bool _singleComplexItem: missionController.complexMissionItemNames.length === 1
...@@ -64,25 +62,6 @@ QGCView { ...@@ -64,25 +62,6 @@ QGCView {
toolbar.currentMissionItem = Qt.binding(function () { return _currentMissionItem }) toolbar.currentMissionItem = Qt.binding(function () { return _currentMissionItem })
} }
onActiveVehiclePositionChanged: updateMapToVehiclePosition()
Connections {
target: QGroundControl.multiVehicleManager
onActiveVehicleChanged: {
// When the active vehicle changes we need to allow the first vehicle position to move the map again
_firstVehiclePosition = true
updateMapToVehiclePosition()
}
}
function updateMapToVehiclePosition() {
if (_activeVehicle && _activeVehicle.coordinateValid && _activeVehicle.coordinate.isValid && _firstVehiclePosition) {
_firstVehiclePosition = false
editorMap.center = _activeVehicle.coordinate
}
}
function addComplexItem(complexItemName) { function addComplexItem(complexItemName) {
var coordinate = editorMap.center var coordinate = editorMap.center
coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces) coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces)
......
...@@ -116,9 +116,6 @@ const char* QGCApplication::telemetryFileExtension = "tlog"; ...@@ -116,9 +116,6 @@ const char* QGCApplication::telemetryFileExtension = "tlog";
const char* QGCApplication::_deleteAllSettingsKey = "DeleteAllSettingsNextBoot"; const char* QGCApplication::_deleteAllSettingsKey = "DeleteAllSettingsNextBoot";
const char* QGCApplication::_settingsVersionKey = "SettingsVersion"; const char* QGCApplication::_settingsVersionKey = "SettingsVersion";
const char* QGCApplication::_lastKnownHomePositionLatKey = "LastKnownHomePositionLat";
const char* QGCApplication::_lastKnownHomePositionLonKey = "LastKnownHomePositionLon";
const char* QGCApplication::_lastKnownHomePositionAltKey = "LastKnownHomePositionAlt";
const char* QGCApplication::_darkStyleFile = ":/res/styles/style-dark.css"; const char* QGCApplication::_darkStyleFile = ":/res/styles/style-dark.css";
const char* QGCApplication::_lightStyleFile = ":/res/styles/style-light.css"; const char* QGCApplication::_lightStyleFile = ":/res/styles/style-light.css";
...@@ -173,7 +170,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) ...@@ -173,7 +170,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
#endif #endif
, _toolbox(NULL) , _toolbox(NULL)
, _bluetoothAvailable(false) , _bluetoothAvailable(false)
, _lastKnownHomePosition(37.803784, -122.462276, 0.0)
{ {
Q_ASSERT(_app == NULL); Q_ASSERT(_app == NULL);
_app = this; _app = this;
...@@ -308,10 +304,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) ...@@ -308,10 +304,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
// Set up our logging filters // Set up our logging filters
QGCLoggingCategoryRegister::instance()->setFilterRulesFromSettings(loggingOptions); QGCLoggingCategoryRegister::instance()->setFilterRulesFromSettings(loggingOptions);
_lastKnownHomePosition.setLatitude(settings.value(_lastKnownHomePositionLatKey, 37.803784).toDouble());
_lastKnownHomePosition.setLongitude(settings.value(_lastKnownHomePositionLonKey, -122.462276).toDouble());
_lastKnownHomePosition.setAltitude(settings.value(_lastKnownHomePositionAltKey, 0.0).toDouble());
// Initialize Bluetooth // Initialize Bluetooth
#ifdef QGC_ENABLE_BLUETOOTH #ifdef QGC_ENABLE_BLUETOOTH
QBluetoothLocalDevice localDevice; QBluetoothLocalDevice localDevice;
...@@ -673,14 +665,3 @@ void QGCApplication::qmlAttemptWindowClose(void) ...@@ -673,14 +665,3 @@ void QGCApplication::qmlAttemptWindowClose(void)
{ {
QMetaObject::invokeMethod(_rootQmlObject(), "attemptWindowClose"); QMetaObject::invokeMethod(_rootQmlObject(), "attemptWindowClose");
} }
void QGCApplication::setLastKnownHomePosition(QGeoCoordinate& lastKnownHomePosition)
{
QSettings settings;
settings.setValue(_lastKnownHomePositionLatKey, lastKnownHomePosition.latitude());
settings.setValue(_lastKnownHomePositionLonKey, lastKnownHomePosition.longitude());
settings.setValue(_lastKnownHomePositionAltKey, lastKnownHomePosition.altitude());
_lastKnownHomePosition = lastKnownHomePosition;
}
...@@ -98,9 +98,6 @@ public: ...@@ -98,9 +98,6 @@ public:
/// Do we have Bluetooth Support? /// Do we have Bluetooth Support?
bool isBluetoothAvailable() { return _bluetoothAvailable; } bool isBluetoothAvailable() { return _bluetoothAvailable; }
QGeoCoordinate lastKnownHomePosition(void) { return _lastKnownHomePosition; }
void setLastKnownHomePosition(QGeoCoordinate& lastKnownHomePosition);
public slots: public slots:
/// You can connect to this slot to show an information message box from a different thread. /// You can connect to this slot to show an information message box from a different thread.
void informationMessageBoxOnMainThread(const QString& title, const QString& msg); void informationMessageBoxOnMainThread(const QString& title, const QString& msg);
...@@ -183,13 +180,8 @@ private: ...@@ -183,13 +180,8 @@ private:
bool _bluetoothAvailable; bool _bluetoothAvailable;
QGeoCoordinate _lastKnownHomePosition; ///< Map position when all other sources fail
static const char* _settingsVersionKey; ///< Settings key which hold settings version static const char* _settingsVersionKey; ///< Settings key which hold settings version
static const char* _deleteAllSettingsKey; ///< If this settings key is set on boot, all settings will be deleted static const char* _deleteAllSettingsKey; ///< If this settings key is set on boot, all settings will be deleted
static const char* _lastKnownHomePositionLatKey;
static const char* _lastKnownHomePositionLonKey;
static const char* _lastKnownHomePositionAltKey;
/// Unit Test have access to creating and destroying singletons /// Unit Test have access to creating and destroying singletons
friend class UnitTest; friend class UnitTest;
......
...@@ -19,6 +19,11 @@ ...@@ -19,6 +19,11 @@
static const char* kQmlGlobalKeyName = "QGCQml"; static const char* kQmlGlobalKeyName = "QGCQml";
const char* QGroundControlQmlGlobal::_flightMapPositionSettingsGroup = "FlightMapPosition";
const char* QGroundControlQmlGlobal::_flightMapPositionLatitudeSettingsKey = "Latitude";
const char* QGroundControlQmlGlobal::_flightMapPositionLongitudeSettingsKey = "Longitude";
const char* QGroundControlQmlGlobal::_flightMapZoomSettingsKey = "FlightMapZoom";
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app) QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app)
: QGCTool(app) : QGCTool(app)
, _linkManager(NULL) , _linkManager(NULL)
...@@ -180,3 +185,44 @@ void QGroundControlQmlGlobal::setSkipSetupPage(bool skip) ...@@ -180,3 +185,44 @@ void QGroundControlQmlGlobal::setSkipSetupPage(bool skip)
emit skipSetupPageChanged(); emit skipSetupPageChanged();
} }
} }
QGeoCoordinate QGroundControlQmlGlobal::flightMapPosition(void)
{
QSettings settings;
QGeoCoordinate coord;
settings.beginGroup(_flightMapPositionSettingsGroup);
coord.setLatitude(settings.value(_flightMapPositionLatitudeSettingsKey, 37.803784).toDouble());
coord.setLongitude(settings.value(_flightMapPositionLongitudeSettingsKey, -122.462276).toDouble());
return coord;
}
double QGroundControlQmlGlobal::flightMapZoom(void)
{
QSettings settings;
return settings.value(_flightMapZoomSettingsKey, 18).toDouble();
}
void QGroundControlQmlGlobal::setFlightMapPosition(QGeoCoordinate& coordinate)
{
if (coordinate != flightMapPosition()) {
QSettings settings;
settings.beginGroup(_flightMapPositionSettingsGroup);
settings.setValue(_flightMapPositionLatitudeSettingsKey, coordinate.latitude());
settings.setValue(_flightMapPositionLongitudeSettingsKey, coordinate.longitude());
emit flightMapPositionChanged(coordinate);
}
}
void QGroundControlQmlGlobal::setFlightMapZoom(double zoom)
{
if (zoom != flightMapZoom()) {
QSettings settings;
settings.setValue(_flightMapZoomSettingsKey, zoom);
emit flightMapZoomChanged(zoom);
}
}
...@@ -59,9 +59,8 @@ public: ...@@ -59,9 +59,8 @@ public:
Q_PROPERTY(bool isVersionCheckEnabled READ isVersionCheckEnabled WRITE setIsVersionCheckEnabled NOTIFY isVersionCheckEnabledChanged) Q_PROPERTY(bool isVersionCheckEnabled READ isVersionCheckEnabled WRITE setIsVersionCheckEnabled NOTIFY isVersionCheckEnabledChanged)
Q_PROPERTY(int mavlinkSystemID READ mavlinkSystemID WRITE setMavlinkSystemID NOTIFY mavlinkSystemIDChanged) Q_PROPERTY(int mavlinkSystemID READ mavlinkSystemID WRITE setMavlinkSystemID NOTIFY mavlinkSystemIDChanged)
Q_PROPERTY(QGeoCoordinate lastKnownHomePosition READ lastKnownHomePosition CONSTANT) Q_PROPERTY(QGeoCoordinate flightMapPosition READ flightMapPosition WRITE setFlightMapPosition NOTIFY flightMapPositionChanged)
Q_PROPERTY(QGeoCoordinate flightMapPosition MEMBER _flightMapPosition NOTIFY flightMapPositionChanged) Q_PROPERTY(double flightMapZoom READ flightMapZoom WRITE setFlightMapZoom NOTIFY flightMapZoomChanged)
Q_PROPERTY(double flightMapZoom MEMBER _flightMapZoom NOTIFY flightMapZoomChanged)
Q_PROPERTY(QString parameterFileExtension READ parameterFileExtension CONSTANT) Q_PROPERTY(QString parameterFileExtension READ parameterFileExtension CONSTANT)
Q_PROPERTY(QString missionFileExtension READ missionFileExtension CONSTANT) Q_PROPERTY(QString missionFileExtension READ missionFileExtension CONSTANT)
...@@ -133,6 +132,8 @@ public: ...@@ -133,6 +132,8 @@ public:
MAVLinkLogManager* mavlinkLogManager () { return _mavlinkLogManager; } MAVLinkLogManager* mavlinkLogManager () { return _mavlinkLogManager; }
QGCCorePlugin* corePlugin () { return _corePlugin; } QGCCorePlugin* corePlugin () { return _corePlugin; }
SettingsManager* settingsManager () { return _settingsManager; } SettingsManager* settingsManager () { return _settingsManager; }
static QGeoCoordinate flightMapPosition ();
static double flightMapZoom ();
qreal zOrderTopMost () { return 1000; } qreal zOrderTopMost () { return 1000; }
qreal zOrderWidgets () { return 100; } qreal zOrderWidgets () { return 100; }
...@@ -141,14 +142,14 @@ public: ...@@ -141,14 +142,14 @@ public:
bool isVersionCheckEnabled () { return _toolbox->mavlinkProtocol()->versionCheckEnabled(); } bool isVersionCheckEnabled () { return _toolbox->mavlinkProtocol()->versionCheckEnabled(); }
int mavlinkSystemID () { return _toolbox->mavlinkProtocol()->getSystemId(); } int mavlinkSystemID () { return _toolbox->mavlinkProtocol()->getSystemId(); }
QGeoCoordinate lastKnownHomePosition() { return qgcApp()->lastKnownHomePosition(); }
int supportedFirmwareCount (); int supportedFirmwareCount ();
bool skipSetupPage () { return _skipSetupPage; } bool skipSetupPage () { return _skipSetupPage; }
void setSkipSetupPage (bool skip); void setSkipSetupPage (bool skip);
void setIsVersionCheckEnabled (bool enable); void setIsVersionCheckEnabled (bool enable);
void setMavlinkSystemID (int id); void setMavlinkSystemID (int id);
void setFlightMapPosition (QGeoCoordinate& coordinate);
void setFlightMapZoom (double zoom);
QString parameterFileExtension(void) const { return QGCApplication::parameterFileExtension; } QString parameterFileExtension(void) const { return QGCApplication::parameterFileExtension; }
QString missionFileExtension(void) const { return QGCApplication::missionFileExtension; } QString missionFileExtension(void) const { return QGCApplication::missionFileExtension; }
...@@ -180,9 +181,12 @@ private: ...@@ -180,9 +181,12 @@ private:
FirmwarePluginManager* _firmwarePluginManager; FirmwarePluginManager* _firmwarePluginManager;
SettingsManager* _settingsManager; SettingsManager* _settingsManager;
QGeoCoordinate _flightMapPosition;
double _flightMapZoom;
bool _skipSetupPage; bool _skipSetupPage;
static const char* _flightMapPositionSettingsGroup;
static const char* _flightMapPositionLatitudeSettingsKey;
static const char* _flightMapPositionLongitudeSettingsKey;
static const char* _flightMapZoomSettingsKey;
}; };
#endif #endif
...@@ -315,7 +315,7 @@ QGCView { ...@@ -315,7 +315,7 @@ QGCView {
Map { Map {
id: _map id: _map
anchors.fill: parent anchors.fill: parent
center: QGroundControl.lastKnownHomePosition center: QGroundControl.flightMapPosition
visible: false visible: false
gesture.flickDeceleration: 3000 gesture.flickDeceleration: 3000
......
...@@ -925,7 +925,6 @@ void Vehicle::_handleHomePosition(mavlink_message_t& message) ...@@ -925,7 +925,6 @@ void Vehicle::_handleHomePosition(mavlink_message_t& message)
if (emitHomePositionChanged) { if (emitHomePositionChanged) {
qCDebug(VehicleLog) << "New home position" << newHomePosition; qCDebug(VehicleLog) << "New home position" << newHomePosition;
qgcApp()->setLastKnownHomePosition(_homePosition);
emit homePositionChanged(_homePosition); emit homePositionChanged(_homePosition);
} }
if (emitHomePositionAvailableChanged) { if (emitHomePositionAvailableChanged) {
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include "QGCApplication.h" #include "QGCApplication.h"
#include "Vehicle.h" #include "Vehicle.h"
#include "UAS.h" #include "UAS.h"
#include "QGroundControlQmlGlobal.h"
// FlightGear _fgProcess start and connection is quite fragile. Uncomment the define below to get higher level of debug output // FlightGear _fgProcess start and connection is quite fragile. Uncomment the define below to get higher level of debug output
// for tracking down problems. // for tracking down problems.
...@@ -938,7 +939,7 @@ bool QGCFlightGearLink::connectSimulation() ...@@ -938,7 +939,7 @@ bool QGCFlightGearLink::connectSimulation()
} }
// We start out at our home position // We start out at our home position
QGeoCoordinate homePosition = qgcApp()->lastKnownHomePosition(); QGeoCoordinate homePosition = QGroundControlQmlGlobal::flightMapPosition();
_fgArgList << QString("--lat=%1").arg(homePosition.latitude()); _fgArgList << QString("--lat=%1").arg(homePosition.latitude());
_fgArgList << QString("--lon=%1").arg(homePosition.longitude()); _fgArgList << QString("--lon=%1").arg(homePosition.longitude());
// The altitude is not set because an altitude not equal to the ground altitude leads to a non-zero default throttle in flightgear // The altitude is not set because an altitude not equal to the ground altitude leads to a non-zero default throttle in flightgear
......
...@@ -19,7 +19,6 @@ import QGroundControl.Controls 1.0 ...@@ -19,7 +19,6 @@ import QGroundControl.Controls 1.0
import QGroundControl.FlightDisplay 1.0 import QGroundControl.FlightDisplay 1.0
import QGroundControl.ScreenTools 1.0 import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0 import QGroundControl.MultiVehicleManager 1.0
import QGroundControl.QGCPositionManager 1.0
/// Inner common QML for mainWindow /// Inner common QML for mainWindow
Item { Item {
...@@ -29,7 +28,6 @@ Item { ...@@ -29,7 +28,6 @@ Item {
QGCPalette { id: qgcPal; colorGroupEnabled: true } QGCPalette { id: qgcPal; colorGroupEnabled: true }
property var gcsPosition: QtPositioning.coordinate() // Starts as invalid coordinate
property var currentPopUp: null property var currentPopUp: null
property real currentCenterX: 0 property real currentCenterX: 0
property var activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
...@@ -39,7 +37,7 @@ Item { ...@@ -39,7 +37,7 @@ Item {
readonly property string _settingsViewSource: "AppSettings.qml" readonly property string _settingsViewSource: "AppSettings.qml"
readonly property string _setupViewSource: "SetupView.qml" readonly property string _setupViewSource: "SetupView.qml"
readonly property string _planViewSource: "MissionEditor.qml" readonly property string _planViewSource: "PlanView.qml"
readonly property string _analyzeViewSource: "AnalyzeView.qml" readonly property string _analyzeViewSource: "AnalyzeView.qml"
onHeightChanged: { onHeightChanged: {
...@@ -181,24 +179,6 @@ Item { ...@@ -181,24 +179,6 @@ Item {
} }
} }
//-- Detect tablet position
Connections {
target: QGroundControl.qgcPositionManger
onLastPositionUpdated: {
if(valid) {
if(lastPosition.latitude) {
if(Math.abs(lastPosition.latitude) > 0.001) {
if(lastPosition.longitude) {
if(Math.abs(lastPosition.longitude) > 0.001) {
gcsPosition = QtPositioning.coordinate(lastPosition.latitude,lastPosition.longitude)
}
}
}
}
}
}
}
property var messageQueue: [] property var messageQueue: []
function showMessage(message) { function showMessage(message) {
......
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