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 bool _itemVisualShowing: false
20 property bool _dragAreaShowing: false
22 signal clicked(int sequenceNumber)
24 function hideItemVisuals() {
25 if (_itemVisualShowing) {
26 itemVisualLoader.active = false
27 loiterVisualLoader.active = false
28 _itemVisualShowing = false
32 function showItemVisuals() {
33 if (!_itemVisualShowing) {
34 itemVisualLoader.active = true
35 loiterVisualLoader.active = true
36 _itemVisualShowing = true
40 function hideDragArea() {
41 if (_dragAreaShowing) {
42 dragAreaLoader.active = false
43 _dragAreaShowing = false
47 function showDragArea() {
48 if (!_dragAreaShowing) {
49 dragAreaLoader.active = true
50 _dragAreaShowing = true
54 function updateDragArea() {
55 if (_missionItem.isCurrentItem && map.planView && _missionItem.specifiesCoordinate) {
62 Component.onCompleted: {
70 function onIsCurrentItemChanged() { updateDragArea() }
71 function onSpecifiesCoordinateChanged() { updateDragArea() }
75 target: _missionItem.isSimpleItem ? _missionItem : null
77 function onLoiterRadiusChanged(loiterRadius) {
78 if (loiterVisualLoader.item) {
79 loiterVisualLoader.item.handleLoiterRadiusChange()
83 function onCoordinateChanged(coordinate) {
84 if (loiterVisualLoader.item) {
85 loiterVisualLoader.item.handleCoordinateChange()
96 sourceComponent: dragAreaComponent
111 sourceComponent: indicatorComponent
122 id: loiterVisualLoader
127 sourceComponent: loiterComponent
137 // Control which is used to drag items
139 id: dragAreaComponent
141 MissionItemIndicatorDrag {
142 mapControl: _root.map
143 itemIndicator: itemVisualLoader.item
144 itemCoordinate: _missionItem.coordinate
145 visible: _root.interactive
146 onItemCoordinateChanged: _missionItem.coordinate = itemCoordinate
151 id: indicatorComponent
153 MissionItemIndicator {
154 coordinate: _missionItem.coordinate
155 visible: _missionItem.specifiesCoordinate
156 z: QGroundControl.zOrderMapItems
157 missionItem: _missionItem
158 sequenceNumber: _missionItem.sequenceNumber
159 onClicked: if(_root.interactive) _root.clicked(_missionItem.sequenceNumber)
160 opacity: _root.opacity
168 id: loiterMapQuickItem
169 coordinate: _root._missionItem.coordinate
170 visible: _root.interactive && _missionItem.isSimpleItem && _missionItem.showLoiterRadius
172 property alias blockSignals: loiterMapCircleVisuals.blockSignals
173 property alias radius: _mapCircle.radius
174 property alias clockwiseRotation: _mapCircle.clockwiseRotation
176 function handleLoiterRadiusChange() {
178 clockwiseRotation = _missionItem.loiterRadius>= 0
180 radius.rawValue = Math.abs(_missionItem.loiterRadius)
183 function handleCoordinateChange() {
184 coordinate = _missionItem.coordinate
187 onCoordinateChanged: _mapCircle.center = coordinate
189 sourceItem: QGCMapCircleVisuals {
190 id: loiterMapCircleVisuals
191 mapControl: _root.map
192 mapCircle: _mapCircle
193 centerDragHandleVisible: false
194 borderColor: _missionItem.terrainCollision ? "red" : QGroundControl.globalPalette.mapMissionTrajectory
196 property bool blockSignals: false
198 function updateMissionItem() {
199 _missionItem.loiterRadius = _mapCircle.clockwiseRotation ? _mapCircle.radius.rawValue : -_mapCircle.radius.rawValue
204 center: loiterMapQuickItem.coordinate
205 interactive: _root.interactive && _missionItem.isCurrentItem && map.planView
207 onClockwiseRotationChanged: if(!blockSignals) loiterMapCircleVisuals.updateMissionItem()
211 target: _mapCircle.radius
212 function onRawValueChanged() {
213 if(!blockSignals) loiterMapCircleVisuals.updateMissionItem()
218 Component.onCompleted: {
219 handleLoiterRadiusChange()
220 handleCoordinateChange()