7import QGroundControl.Controls
8import QGroundControl.FlightMap
10/// Simple Mission Item visuals
14 property var map ///< Map control to place item in
15 property var vehicle ///< Vehicle associated with this item
16 property bool interactive: true
18 property var _missionItem: object
19 property var _takeoffIndicatorItem
20 property var _launchIndicatorItem
22 signal clicked(int sequenceNumber)
24 function addCommonVisuals() {
25 if (_objMgrCommonVisuals.empty) {
26 _takeoffIndicatorItem = _objMgrCommonVisuals.createObject(takeoffIndicatorComponent, map, true /* addToMap */)
27 _launchIndicatorItem = _objMgrCommonVisuals.createObject(launchIndicatorComponent, map, true /* addToMap */)
31 function addEditingVisuals() {
32 if (_objMgrEditingVisuals.empty) {
33 _objMgrEditingVisuals.createObjects([ takeoffDragComponent, launchDragComponent ], map, false /* addToMap */)
35 if (!_missionItem.launchCoordinate.isValid) {
36 _objMgrMouseClick.createObject(mouseAreaClickComponent, map, false /* addToMap */)
40 QGCDynamicObjectManager { id: _objMgrCommonVisuals }
41 QGCDynamicObjectManager { id: _objMgrEditingVisuals }
42 QGCDynamicObjectManager { id: _objMgrMouseClick }
44 Component.onCompleted: {
46 if (_missionItem.isCurrentItem && map.planView) {
54 function onIsCurrentItemChanged(isCurrentItem) {
55 if (isCurrentItem && map.planView) {
58 _objMgrEditingVisuals.destroyObjects()
59 _objMgrMouseClick.destroyObjects()
65 id: takeoffDragComponent
67 MissionItemIndicatorDrag {
69 itemIndicator: _takeoffIndicatorItem
70 itemCoordinate: _missionItem.specifiesCoordinate ? _missionItem.coordinate : _missionItem.launchCoordinate
71 visible: _root.interactive
73 onItemCoordinateChanged: {
74 if (_missionItem.specifiesCoordinate) {
75 _missionItem.coordinate = itemCoordinate
77 _missionItem.launchCoordinate = itemCoordinate
84 id: launchDragComponent
86 MissionItemIndicatorDrag {
88 itemIndicator: _launchIndicatorItem
89 itemCoordinate: _missionItem.launchCoordinate
90 visible: !_missionItem.launchTakeoffAtSameLocation && _root.interactive
92 onItemCoordinateChanged: _missionItem.launchCoordinate = itemCoordinate
97 id: takeoffIndicatorComponent
99 MissionItemIndicator {
100 coordinate: _missionItem.specifiesCoordinate ? _missionItem.coordinate : _missionItem.launchCoordinate
101 z: QGroundControl.zOrderMapItems
102 missionItem: _missionItem
103 sequenceNumber: _missionItem.sequenceNumber
104 onClicked: _root.clicked(_missionItem.sequenceNumber)
105 opacity: _root.opacity
110 id: launchIndicatorComponent
113 coordinate: _missionItem.launchCoordinate
114 anchorPoint.x: sourceItem.anchorPointX
115 anchorPoint.y: sourceItem.anchorPointY
116 visible: !_missionItem.launchTakeoffAtSameLocation && _root.interactive
119 MissionItemIndexLabel {
120 checked: _missionItem.isCurrentItem
121 label: qsTr("Launch")
122 highlightSelected: true
123 onClicked: _root.clicked(_missionItem.sequenceNumber)
124 visible: _root.interactive
129 // Mouse area to capture launch location click
131 id: mouseAreaClickComponent
135 z: QGroundControl.zOrderMapItems + 1 // Over item indicators
136 visible: !_missionItem.launchCoordinate.isValid && _root.interactive
138 readonly property int _decimalPlaces: 8
140 onClicked: (mouse) => {
141 var coordinate = map.toCoordinate(Qt.point(mouse.x, mouse.y), false /* clipToViewPort */)
142 coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces)
143 coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
144 coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
145 _missionItem.launchCoordinate = coordinate
147 // We drop out of wizard mode after launch position is set if:
148 // - Takeoff location is same as launch position so nothing left to do
149 // - Not a fixed wing. Fixed wing require warning about tweaking climb out position
150 if (_missionItem.launchTakeoffAtSameLocation || !vehicle.fixedWing) {
151 _missionItem.wizardMode = false
153 _objMgrMouseClick.destroyObjects()