MissionItemIndicatorDrag.qml 2.33 KB
Newer Older
1 2 3 4 5 6 7 8 9
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/

10
import QtQuick      2.7
Don Gagne's avatar
Don Gagne committed
11
import QtLocation   5.6
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Controls      1.0

/// Use the drag a MissionItemIndicator
Rectangle {
    id:             itemDragger
    x:              itemIndicator.x - _expandMargin
    y:              itemIndicator.y - _expandMargin
    width:          itemIndicator.width + (_expandMargin * 2)
    height:         itemIndicator.height + (_expandMargin * 2)
    color:          "transparent"
    z:              QGroundControl.zOrderMapItems + 1    // Above item icons

    // These are handy for debugging so left in for now
    //border.width:   1
    //border.color:   "white"

    // Properties which must be specific by consumer
    property var itemIndicator  ///< The mission item indicator to drag around
    property var itemCoordinate ///< Coordinate we are updating during drag

    property bool   _preventCoordinateBindingLoop:  false
    property real   _expandMargin:                  ScreenTools.isMobile ? ScreenTools.defaultFontPixelWidth : 0

    onXChanged: liveDrag()
    onYChanged: liveDrag()

    function liveDrag() {
        if (!itemDragger._preventCoordinateBindingLoop && Drag.active) {
            var point = Qt.point(itemDragger.x + _expandMargin + itemIndicator.anchorPoint.x, itemDragger.y + _expandMargin + itemIndicator.anchorPoint.y)
            var coordinate = map.toCoordinate(point)
            itemDragger._preventCoordinateBindingLoop = true
            coordinate.altitude = itemCoordinate.altitude
            itemCoordinate = coordinate
            itemDragger._preventCoordinateBindingLoop = false
        }
    }

    Drag.active: itemDrag.drag.active

    MouseArea {
        id:             itemDrag
        anchors.fill:   parent
        drag.target:    parent
        drag.minimumX:  0
        drag.minimumY:  0
        drag.maximumX:  itemDragger.parent.width - parent.width
        drag.maximumY:  itemDragger.parent.height - parent.height
    }
}