DragCoordinate.qml 3.19 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

import QtQuick          2.3
import QtQuick.Controls 1.2
import QtLocation       5.3
import QtPositioning    5.3

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FlightMap     1.0

/// Draggable Coordinate Item visuals
Item {
    id: _root

Valentin Platzgummer's avatar
Valentin Platzgummer committed
25 26 27 28
    property var    map        ///< Map control to place item in
    property var    coordinate
    property int    sequenceNumber
    property bool   checked
29
    property string label: "Reference"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
30

31 32
    property var    _itemVisual: undefined
    property var    _dragArea: undefined
Valentin Platzgummer's avatar
Valentin Platzgummer committed
33

34 35 36 37
    signal clicked()
    signal released()
    signal entered()
    signal exited()
38 39 40 41 42

    signal dragStart()
    signal dragStop()
    signal dragClicked()
    signal dragReleased()
Valentin Platzgummer's avatar
Valentin Platzgummer committed
43 44

    function hideItemVisuals() {
45 46
        if (_itemVisual) {
            map.removeMapItem(_itemVisual)
Valentin Platzgummer's avatar
Valentin Platzgummer committed
47
            _itemVisual.destroy()
48
            _itemVisual = undefined
Valentin Platzgummer's avatar
Valentin Platzgummer committed
49 50 51 52
        }
    }

    function showItemVisuals() {
53
        if (!_itemVisual) {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
54 55 56 57 58 59
            _itemVisual = indicatorComponent.createObject(map)
            map.addMapItem(_itemVisual)
        }
    }

    function hideDragArea() {
60
        if (_dragArea) {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
61
            _dragArea.destroy()
62
            _dragArea = undefined
Valentin Platzgummer's avatar
Valentin Platzgummer committed
63 64 65 66
        }
    }

    function showDragArea() {
67
        if (!_dragArea) {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
68 69 70 71 72 73
            _dragArea = dragAreaComponent.createObject(map)
        }
    }

    Component.onCompleted: {
        showItemVisuals()
Valentin Platzgummer's avatar
Valentin Platzgummer committed
74
        if (checked && map.planView) {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
75 76 77 78 79 80 81 82 83
            showDragArea()
        }
    }

    Component.onDestruction: {
        hideDragArea()
        hideItemVisuals()
    }

Valentin Platzgummer's avatar
Valentin Platzgummer committed
84 85
    onCheckedChanged: {
        if (checked) {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
            showDragArea()
        } else {
            hideDragArea()
        }
    }

    // Control which is used to drag items
    Component {
        id: dragAreaComponent

        CoordinateIndicatorDrag {
            mapControl:     _root.map
            itemIndicator:  _itemVisual
            Component.onCompleted: itemCoordinate = _root.coordinate

101 102 103
            onItemCoordinateChanged: {
                _root.coordinate = itemCoordinate
            }
104 105 106 107 108

            onDragStart:    _root.dragStart()
            onDragStop:     _root.dragStop()
            onClicked:  _root.dragClicked()
            onReleased: _root.dragReleased()
Valentin Platzgummer's avatar
Valentin Platzgummer committed
109 110 111 112 113 114 115
        }
    }

    Component {
        id: indicatorComponent

        CoordinateIndicator {
116
            label:          _root.label
Valentin Platzgummer's avatar
Valentin Platzgummer committed
117
            checked:        _root.checked
Valentin Platzgummer's avatar
Valentin Platzgummer committed
118 119 120 121
            z:              QGroundControl.zOrderMapItems
            sequenceNumber: _root.sequenceNumber
            coordinate:     _root.coordinate

122 123 124 125
            onClicked:  _root.clicked()
            onReleased: _root.released()
            onEntered:  _root.entered()
            onExited:   _root.exited()
Valentin Platzgummer's avatar
Valentin Platzgummer committed
126 127 128
        }
    }
}