LinkIndicator.qml 3.43 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 26 27 28

//-------------------------------------------------------------------------
//-- Link Indicator
Item {
    anchors.top:    parent.top
    anchors.bottom: parent.bottom
    width:          priorityLinkSelector.width

    property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
29
    property bool _visible: false
30 31 32 33 34 35 36

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

56
                // Add new items
57 58 59 60
                var has_hl = false;
                var links = _activeVehicle.links
                for (var i = 0; i < links.length; i++) {
                    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 81
        Connections {
            target:                 _activeVehicle
82
            onLinksChanged:         priorityLinkSelector.updatelinkSelectionMenu()
83
        }
84 85 86 87 88 89

        Connections {
            target:                     _activeVehicle
            onLinksPropertiesChanged:   priorityLinkSelector.updatelinkSelectionMenu()
        }

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