FlightDisplayViewMap.qml 5.43 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29


import QtQuick                      2.4
import QtQuick.Controls             1.3
import QtLocation                   5.3
import QtPositioning                5.2

import QGroundControl               1.0
import QGroundControl.FlightDisplay 1.0
import QGroundControl.FlightMap     1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Controls      1.0
import QGroundControl.Palette       1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controllers   1.0

FlightMap {
    id:             flightMap
    anchors.fill:   parent
    mapName:        _mapName

Don Gagne's avatar
Don Gagne committed
30 31 32
    property alias  missionController: _missionController
    property var    flightWidgets

33
    property bool   _followVehicle:                 true
Don Gagne's avatar
Don Gagne committed
34 35 36 37
    property var    _activeVehicle:                 QGroundControl.multiVehicleManager.activeVehicle
    property bool   _activeVehicleCoordinateValid:  _activeVehicle ? _activeVehicle.coordinateValid : false
    property var    activeVehicleCoordinate:        _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
    property var    _gotoHereCoordinate:            QtPositioning.coordinate()
38
    property int    _retaskSequence:                0
39

40 41 42 43
    Component.onCompleted: {
        QGroundControl.flightMapPosition = center
        QGroundControl.flightMapZoom = zoomLevel
    }
44
    onCenterChanged: QGroundControl.flightMapPosition = center
45
    onZoomLevelChanged: QGroundControl.flightMapZoom = zoomLevel
46

47
    onActiveVehicleCoordinateChanged: {
48
        if (_followVehicle && _activeVehicleCoordinateValid && activeVehicleCoordinate.isValid) {
49 50
            _initialMapPositionSet = true
            flightMap.center  = activeVehicleCoordinate
51 52 53
        }
    }

Don Gagne's avatar
Don Gagne committed
54 55
    QGCPalette { id: qgcPal; colorGroupEnabled: true }

56 57 58 59 60
    MissionController {
        id: _missionController
        Component.onCompleted: start(false /* editMode */)
    }

61 62 63 64 65
    GeoFenceController {
        id: _geoFenceController
        Component.onCompleted: start(false /* editMode */)
    }

66 67
    // Add trajectory points to the map
    MapItemView {
68
        model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0
69 70
        delegate:
            MapPolyline {
Don Gagne's avatar
Don Gagne committed
71 72 73 74
            line.width: 3
            line.color: "red"
            z:          QGroundControl.zOrderMapItems - 1
            path: [
75 76
                object.coordinate1,
                object.coordinate2,
Don Gagne's avatar
Don Gagne committed
77 78
            ]
        }
79 80 81 82
    }

    // Add the vehicles to the map
    MapItemView {
83
        model: QGroundControl.multiVehicleManager.vehicles
84 85
        delegate:
            VehicleMapItem {
Don Gagne's avatar
Don Gagne committed
86 87 88 89 90 91
            vehicle:        object
            coordinate:     object.coordinate
            isSatellite:    flightMap.isSatelliteMap
            size:           _mainIsMap ? ScreenTools.defaultFontPixelHeight * 5 : ScreenTools.defaultFontPixelHeight * 2
            z:              QGroundControl.zOrderMapItems
        }
92 93 94 95
    }

    // Add the mission items to the map
    MissionItemView {
96
        model: _mainIsMap ? _missionController.visualItems : 0
97 98 99 100 101 102 103
    }

    // Add lines between waypoints
    MissionLineView {
        model: _mainIsMap ? _missionController.waypointLines : 0
    }

104 105 106 107 108 109 110 111 112 113 114 115 116 117
    // GeoFence polygon
    MapPolygon {
        border.color:   "#80FF0000"
        border.width:   3
        path:           _geoFenceController.polygon.path
    }

    // GeoFence breach return point
    MapQuickItem {
        anchorPoint:    Qt.point(sourceItem.width / 2, sourceItem.height / 2)
        coordinate:     _geoFenceController.breachReturnPoint
        sourceItem:     MissionItemIndexLabel { label: "F" }
    }

Don Gagne's avatar
Don Gagne committed
118 119 120
    // GoTo here waypoint
    MapQuickItem {
        coordinate:     _gotoHereCoordinate
Don Gagne's avatar
Don Gagne committed
121
        visible:        _activeVehicle && _activeVehicle.guidedMode && _gotoHereCoordinate.isValid
Don Gagne's avatar
Don Gagne committed
122 123 124 125 126 127
        z:              QGroundControl.zOrderMapItems
        anchorPoint.x:  sourceItem.width  / 2
        anchorPoint.y:  sourceItem.height / 2

        sourceItem: MissionItemIndexLabel {
            isCurrentItem:  true
128
            label:          qsTr("G", "Goto here waypoint") // second string is translator's hint.
Don Gagne's avatar
Don Gagne committed
129
        }
130 131 132 133 134 135 136 137 138 139
    }    

    MapScale {
        anchors.bottomMargin:   ScreenTools.defaultFontPixelHeight * (0.66)
        anchors.rightMargin:    ScreenTools.defaultFontPixelHeight * (0.33)
        anchors.bottom:         parent.bottom
        anchors.right:          parent.right
        z:                      QGroundControl.zOrderWidgets
        mapControl:             flightMap
        visible:                !ScreenTools.isTinyScreen
Don Gagne's avatar
Don Gagne committed
140 141 142
    }

    // Handle guided mode clicks
143 144
    MouseArea {
        anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
145 146

        onClicked: {
Don Gagne's avatar
Don Gagne committed
147
            if (_activeVehicle) {
148
                if (flightWidgets.guidedModeBar.state != "Shown") {
Don Gagne's avatar
Don Gagne committed
149
                    flightWidgets.guidedModeBar.state = "Shown"
150 151 152 153 154
                } else {
                    if (flightWidgets.gotoEnabled) {
                        _gotoHereCoordinate = flightMap.toCoordinate(Qt.point(mouse.x, mouse.y))
                        flightWidgets.guidedModeBar.confirmAction(flightWidgets.guidedModeBar.confirmGoTo)
                    }
Don Gagne's avatar
Don Gagne committed
155
                }
Don Gagne's avatar
Don Gagne committed
156 157
            }
        }
158 159
    }
}