5import QGroundControl.Controls
7/// Use to drag a MissionItemIndicator
10 x: _itemIndicatorX - _touchMarginHorizontal
11 y: _itemIndicatorY - _touchMarginVertical
12 width: _itemIndicatorWidth + (_touchMarginHorizontal * 2)
13 height: _itemIndicatorHeight + (_touchMarginVertical * 2)
15 z: QGroundControl.zOrderMapItems + 1 // Above item icons
17 // Properties which must be specific by consumer
18 property var mapControl ///< Map control which contains this item
19 property var itemIndicator ///< The mission item indicator to drag around
20 property var itemCoordinate ///< Coordinate we are updating during drag
26 property bool _preventCoordinateBindingLoop: false
28 property real _itemIndicatorX: itemIndicator ? itemIndicator.x : 0
29 property real _itemIndicatorY: itemIndicator ? itemIndicator.y : 0
30 property real _itemIndicatorWidth: itemIndicator ? itemIndicator.width : 0
31 property real _itemIndicatorHeight: itemIndicator ? itemIndicator.height : 0
32 property bool _mobile: ScreenTools.isMobile
33 property real _touchWidth: Math.max(_itemIndicatorWidth, ScreenTools.minTouchPixels)
34 property real _touchHeight: Math.max(_itemIndicatorHeight, ScreenTools.minTouchPixels)
35 property real _touchMarginHorizontal: _mobile ? (_touchWidth - _itemIndicatorWidth) / 2 : 0
36 property real _touchMarginVertical: _mobile ? (_touchHeight - _itemIndicatorHeight) / 2 : 0
37 property bool _dragStartSignalled: false
39 onXChanged: liveDrag()
40 onYChanged: liveDrag()
43 if (!itemDragger._preventCoordinateBindingLoop && itemDrag.drag.active) {
44 var point = Qt.point(itemDragger.x + _touchMarginHorizontal + itemIndicator.anchorPoint.x, itemDragger.y + _touchMarginVertical + itemIndicator.anchorPoint.y)
45 var coordinate = mapControl.toCoordinate(point, false /* clipToViewPort */)
46 itemDragger._preventCoordinateBindingLoop = true
47 coordinate.altitude = itemCoordinate.altitude
48 itemCoordinate = coordinate
49 itemDragger._preventCoordinateBindingLoop = false
53 Drag.active: itemDrag.drag.active
61 drag.maximumX: itemDragger.parent.width - parent.width
62 drag.maximumY: itemDragger.parent.height - parent.height
64 enabled: itemDragger.visible
71 property bool dragActive: drag.active
72 onDragActiveChanged: {
75 if (!_dragStartSignalled) {
76 _dragStartSignalled = true
80 _dragStartSignalled = false