Skip to content
FlightDisplayViewMap.qml 6.54 KiB
Newer Older
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/
dogmaphobic's avatar
dogmaphobic committed


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
    property alias  missionController: missionController
Don Gagne's avatar
Don Gagne committed
    property var    flightWidgets

    property bool   _followVehicle:                 true
Don Gagne's avatar
Don Gagne committed
    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()
    property int    _retaskSequence:                0
    Component.onCompleted: {
        QGroundControl.flightMapPosition = center
        QGroundControl.flightMapZoom = zoomLevel
    }
    onCenterChanged: QGroundControl.flightMapPosition = center
    onZoomLevelChanged: QGroundControl.flightMapZoom = zoomLevel
    onActiveVehicleCoordinateChanged: {
        if (_followVehicle && _activeVehicleCoordinateValid && activeVehicleCoordinate.isValid) {
            _initialMapPositionSet = true
            flightMap.center  = activeVehicleCoordinate
Don Gagne's avatar
Don Gagne committed
    QGCPalette { id: qgcPal; colorGroupEnabled: true }

    MissionController {
Don Gagne's avatar
Don Gagne committed
        id: missionController
        Component.onCompleted: start(false /* editMode */)
    }

    GeoFenceController {
Don Gagne's avatar
Don Gagne committed
        id: geoFenceController
        Component.onCompleted: start(false /* editMode */)
    }

    RallyPointController {
        id: rallyPointController
        Component.onCompleted: start(false /* editMode */)
    }

dogmaphobic's avatar
dogmaphobic committed
    // Add trajectory points to the map
    MapItemView {
        model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0
dogmaphobic's avatar
dogmaphobic committed
        delegate:
            MapPolyline {
Don Gagne's avatar
Don Gagne committed
            line.width: 3
            line.color: "red"
            z:          QGroundControl.zOrderMapItems - 1
            path: [
                object.coordinate1,
                object.coordinate2,
Don Gagne's avatar
Don Gagne committed
            ]
        }
dogmaphobic's avatar
dogmaphobic committed
    }

    // Add the vehicles to the map
    MapItemView {
        model: QGroundControl.multiVehicleManager.vehicles
dogmaphobic's avatar
dogmaphobic committed
        delegate:
            VehicleMapItem {
Don Gagne's avatar
Don Gagne committed
            vehicle:        object
            coordinate:     object.coordinate
            isSatellite:    flightMap.isSatelliteMap
            size:           _mainIsMap ? ScreenTools.defaultFontPixelHeight * 5 : ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
            z:              QGroundControl.zOrderMapItems - 1
Don Gagne's avatar
Don Gagne committed
        }
dogmaphobic's avatar
dogmaphobic committed
    }

    // Add the mission items to the map
    MissionItemView {
Don Gagne's avatar
Don Gagne committed
        model: _mainIsMap ? missionController.visualItems : 0
dogmaphobic's avatar
dogmaphobic committed
    }

    // Add lines between waypoints
    MissionLineView {
Don Gagne's avatar
Don Gagne committed
        model: _mainIsMap ? missionController.waypointLines : 0
    // GeoFence polygon
    MapPolygon {
        border.color:   "#80FF0000"
        border.width:   3
Don Gagne's avatar
Don Gagne committed
        path:           geoFenceController.polygonSupported ? geoFenceController.polygon.path : undefined
    }

    // GeoFence circle
    MapCircle {
        border.color:   "#80FF0000"
        border.width:   3
        center:         missionController.plannedHomePosition
        radius:         geoFenceController.circleSupported ? geoFenceController.circleRadius : 0
Don Gagne's avatar
Don Gagne committed
        z:              QGroundControl.zOrderMapItems
    }

    // GeoFence breach return point
    MapQuickItem {
        anchorPoint:    Qt.point(sourceItem.width / 2, sourceItem.height / 2)
Don Gagne's avatar
Don Gagne committed
        coordinate:     geoFenceController.breachReturnPoint
        visible:        geoFenceController.breachReturnSupported
        sourceItem:     MissionItemIndexLabel { label: "F" }
Don Gagne's avatar
Don Gagne committed
        z:              QGroundControl.zOrderMapItems
    // Rally points on map
    MapItemView {
        model: rallyPointController.points

        delegate: MapQuickItem {
            id:             itemIndicator
            anchorPoint:    Qt.point(sourceItem.width / 2, sourceItem.height / 2)
            coordinate:     object.coordinate
            z:              QGroundControl.zOrderMapItems

            sourceItem: MissionItemIndexLabel {
                id:         itemIndexLabel
                label:      qsTr("R", "rally point map item label")
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
    // GoTo here waypoint
    MapQuickItem {
        coordinate:     _gotoHereCoordinate
Don Gagne's avatar
Don Gagne committed
        visible:        _activeVehicle && _activeVehicle.guidedMode && _gotoHereCoordinate.isValid
Don Gagne's avatar
Don Gagne committed
        z:              QGroundControl.zOrderMapItems
        anchorPoint.x:  sourceItem.width  / 2
        anchorPoint.y:  sourceItem.height / 2

        sourceItem: MissionItemIndexLabel {
            checked: true
            label:   qsTr("G", "Goto here waypoint") // second string is translator's hint.
Don Gagne's avatar
Don Gagne committed
        }
    }    

    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
    }

    // Handle guided mode clicks
dogmaphobic's avatar
dogmaphobic committed
    MouseArea {
        anchors.fill: parent
Don Gagne's avatar
Don Gagne committed

        onClicked: {
Don Gagne's avatar
Don Gagne committed
            if (_activeVehicle) {
                if (flightWidgets.guidedModeBar.state != "Shown") {
Don Gagne's avatar
Don Gagne committed
                    flightWidgets.guidedModeBar.state = "Shown"
                } 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
                }