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


11 12
import QtQuick                              2.11
import QtQuick.Controls                     2.4
13 14 15 16 17 18

import QGroundControl                       1.0
import QGroundControl.Controls              1.0
import QGroundControl.MultiVehicleManager   1.0
import QGroundControl.ScreenTools           1.0
import QGroundControl.Palette               1.0
19
import QGroundControl.Vehicle               1.0
20 21 22 23 24 25

//-------------------------------------------------------------------------
//-- Link Indicator
Item {
    anchors.top:    parent.top
    anchors.bottom: parent.bottom
Don Gagne's avatar
Don Gagne committed
26 27
    width:          visible ? priorityLinkSelector.width : 0
    visible:        _visible
28

29
    property bool _visible: false
30 31 32

    QGCLabel {
        id:                     priorityLinkSelector
33
        text:                   activeVehicle ? activeVehicle.priorityLinkName : qsTr("N/A", "No data to display")
34 35 36 37 38 39 40 41 42
        font.pointSize:         ScreenTools.mediumFontPointSize
        color:                  qgcPal.buttonText
        anchors.verticalCenter: parent.verticalCenter
        Menu {
            id: linkSelectionMenu
        }
        Component {
            id: linkSelectionMenuItemComponent
            MenuItem {
43
                onTriggered: activeVehicle.priorityLinkName = text
44 45 46 47
            }
        }
        property var linkSelectionMenuItems: []
        function updatelinkSelectionMenu() {
48
            if (activeVehicle) {
49
                // Remove old menu items
Gus Grubba's avatar
Gus Grubba committed
50 51
                var i
                for (i = 0; i < linkSelectionMenuItems.length; i++) {
52 53 54
                    linkSelectionMenu.removeItem(linkSelectionMenuItems[i])
                }
                linkSelectionMenuItems.length = 0
55

56
                // Add new items
57
                var has_hl = false;
58
                var links = activeVehicle.links
Gus Grubba's avatar
Gus Grubba committed
59
                for (i = 0; i < links.length; i++) {
60
                    var menuItem = linkSelectionMenuItemComponent.createObject(null, { "text": links[i].getName(), "enabled": links[i].link_active(activeVehicle.id)})
61 62
                    linkSelectionMenuItems.push(menuItem)
                    linkSelectionMenu.insertItem(i, menuItem)
63 64 65 66

                    if (links[i].getHighLatency()) {
                        has_hl = true
                    }
67
                }
68 69

                _visible = links.length > 1 && has_hl
70 71
            }
        }
72

73
        Component.onCompleted: priorityLinkSelector.updatelinkSelectionMenu()
acfloria's avatar
acfloria committed
74

75 76 77 78
        Connections {
            target:                 QGroundControl.multiVehicleManager
            onActiveVehicleChanged: priorityLinkSelector.updatelinkSelectionMenu()
        }
acfloria's avatar
acfloria committed
79

80
        Connections {
81
            target:                 activeVehicle
82
            onLinksChanged:         priorityLinkSelector.updatelinkSelectionMenu()
83
        }
84 85

        Connections {
86
            target:                     activeVehicle
87 88 89
            onLinksPropertiesChanged:   priorityLinkSelector.updatelinkSelectionMenu()
        }

90
        MouseArea {
91
            visible:        activeVehicle
92 93 94 95 96
            anchors.fill:   parent
            onClicked:      linkSelectionMenu.popup()
        }
    }
}