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
17 property MissionItemIndicatorGroup indicatorGroup
19 property var _missionItem: object
20 property var _takeoffIndicatorItem
21 property var _launchIndicatorItem
23 signal clicked(int sequenceNumber)
25 function addCommonVisuals() {
26 if (_objMgrCommonVisuals.empty) {
27 _takeoffIndicatorItem = _objMgrCommonVisuals.createObject(takeoffIndicatorComponent, map, true /* addToMap */)
28 _launchIndicatorItem = _objMgrCommonVisuals.createObject(launchIndicatorComponent, map, true /* addToMap */)
32 function addEditingVisuals() {
33 if (_objMgrEditingVisuals.empty) {
34 _objMgrEditingVisuals.createObjects([ takeoffDragComponent, launchDragComponent ], map, false /* addToMap */)
36 if (!_missionItem.launchCoordinate.isValid) {
37 _objMgrMouseClick.createObject(mouseAreaClickComponent, map, false /* addToMap */)
41 QGCDynamicObjectManager { id: _objMgrCommonVisuals }
42 QGCDynamicObjectManager { id: _objMgrEditingVisuals }
43 QGCDynamicObjectManager { id: _objMgrMouseClick }
45 Component.onCompleted: {
47 if (_missionItem.isCurrentItem && map.planView) {
55 function onIsCurrentItemChanged(isCurrentItem) {
56 if (isCurrentItem && map.planView) {
59 _objMgrEditingVisuals.destroyObjects()
60 _objMgrMouseClick.destroyObjects()
66 id: takeoffDragComponent
68 MissionItemIndicatorDrag {
70 itemIndicator: _takeoffIndicatorItem
71 itemCoordinate: _missionItem.specifiesCoordinate ? _missionItem.coordinate : _missionItem.launchCoordinate
72 visible: _root.interactive
74 onItemCoordinateChanged: {
75 if (_missionItem.specifiesCoordinate) {
76 _missionItem.coordinate = itemCoordinate
78 _missionItem.launchCoordinate = itemCoordinate
85 id: launchDragComponent
87 MissionItemIndicatorDrag {
89 itemIndicator: _launchIndicatorItem
90 itemCoordinate: _missionItem.launchCoordinate
91 visible: !_missionItem.launchTakeoffAtSameLocation && _root.interactive
93 onItemCoordinateChanged: _missionItem.launchCoordinate = itemCoordinate
98 id: takeoffIndicatorComponent
100 MissionItemIndicator {
101 coordinate: _missionItem.specifiesCoordinate ? _missionItem.coordinate : _missionItem.launchCoordinate
102 indicatorGroup: _root.indicatorGroup
103 interactive: _root.interactive
104 missionItem: _missionItem
105 sequenceNumber: _missionItem.sequenceNumber
106 onClicked: _root.clicked(_missionItem.sequenceNumber)
107 opacity: _root.opacity
112 id: launchIndicatorComponent
115 coordinate: _missionItem.launchCoordinate
116 anchorPoint.x: sourceItem.anchorPointX
117 anchorPoint.y: sourceItem.anchorPointY
118 visible: !_missionItem.launchTakeoffAtSameLocation && _root.interactive
121 MissionItemIndexLabel {
122 checked: _missionItem.isCurrentItem
124 highlightSelected: true
125 onClicked: _root.clicked(_missionItem.sequenceNumber)
126 visible: _root.interactive
131 // Mouse area to capture launch location click
133 id: mouseAreaClickComponent
137 z: QGroundControl.zOrderMapItems + 1 // Over item indicators
138 visible: !_missionItem.launchCoordinate.isValid && _root.interactive
140 readonly property int _decimalPlaces: 8
142 onClicked: (mouse) => {
143 var coordinate = map.toCoordinate(Qt.point(mouse.x, mouse.y), false /* clipToViewPort */)
144 coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces)
145 coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
146 coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
147 _missionItem.launchCoordinate = coordinate
149 // We drop out of wizard mode after launch position is set if:
150 // - Takeoff location is same as launch position so nothing left to do
151 // - Not a fixed wing. Fixed wing require warning about tweaking climb out position
152 if (_missionItem.launchTakeoffAtSameLocation || !vehicle.fixedWing) {
153 _missionItem.wizardMode = false
155 _objMgrMouseClick.destroyObjects()