LinkIndicator.qml 3.35 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/****************************************************************************
 *
 *   (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 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 50 51 52 53
                // Remove old menu items
                for (var i = 0; i < linkSelectionMenuItems.length; i++) {
                    linkSelectionMenu.removeItem(linkSelectionMenuItems[i])
                }
                linkSelectionMenuItems.length = 0
54

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

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

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

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

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

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

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

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