7import QGroundControl.Controls
8import QGroundControl.FlightMap
10/// Base component for mission item map visuals providing common drag/indicator infrastructure.
11/// Subclasses must provide an indicatorComponent.
15 property var map ///< Map control to place item in
16 property var vehicle ///< Vehicle associated with this item
17 property bool interactive: true
18 property MissionItemIndicatorGroup indicatorGroup
20 /// Subclasses must set this to their indicator Component
21 property Component indicatorComponent
23 property var _missionItem: object
24 property bool _itemVisualShowing: false
25 property bool _dragAreaShowing: false
27 signal clicked(int sequenceNumber)
29 function hideItemVisuals() {
33 function showItemVisuals() {
37 function hideDragArea() {
38 if (_dragAreaShowing) {
39 dragAreaLoader.active = false
40 _dragAreaShowing = false
44 function showDragArea() {
45 if (!_dragAreaShowing) {
46 dragAreaLoader.active = true
47 _dragAreaShowing = true
51 function updateDragArea() {
52 if (_missionItem.isCurrentItem && map.planView && _missionItem.specifiesCoordinate && itemVisualLoader.item) {
59 function _hideItemVisuals() {
60 if (_itemVisualShowing) {
61 itemVisualLoader.active = false
62 _itemVisualShowing = false
66 function _showItemVisuals() {
67 if (!_itemVisualShowing) {
68 itemVisualLoader.active = true
69 _itemVisualShowing = true
73 Component.onCompleted: {
81 function onIsCurrentItemChanged() { updateDragArea() }
82 function onSpecifiesCoordinateChanged() { updateDragArea() }
91 sourceComponent: dragAreaComponent
106 sourceComponent: control.indicatorComponent
117 // Control which is used to drag items
119 id: dragAreaComponent
121 MissionItemIndicatorDrag {
122 mapControl: control.map
123 itemIndicator: itemVisualLoader.item
124 itemCoordinate: _missionItem.coordinate
125 visible: control.interactive
127 const indicator = itemVisualLoader.item
128 if (indicator && indicator.activate) {
131 control.clicked(control._missionItem.sequenceNumber)
134 onItemCoordinateChanged: _missionItem.coordinate = itemCoordinate