Skip to content
Snippets Groups Projects
MainToolBar.qml 15.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • dogmaphobic's avatar
    dogmaphobic committed
    /*=====================================================================
    
    QGroundControl Open Source Ground Control Station
    
    (c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
    This file is part of the QGROUNDCONTROL project
    
        QGROUNDCONTROL is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.
    
        QGROUNDCONTROL is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
    
    ======================================================================*/
    
    /**
     * @file
     *   @brief QGC Main Tool Bar
     *   @author Gus Grubba <mavlink@grubba.com>
     */
    
    
    dogmaphobic's avatar
    dogmaphobic committed
    import QtQuick 2.5
    
    dogmaphobic's avatar
    dogmaphobic committed
    import QtQuick.Controls 1.2
    import QtQuick.Controls.Styles 1.2
    
    
    import QGroundControl.Controls              1.0
    import QGroundControl.FactControls          1.0
    import QGroundControl.Palette               1.0
    import QGroundControl.MultiVehicleManager   1.0
    import QGroundControl.ScreenTools           1.0
    
    import QGroundControl.Controllers           1.0
    
    Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
        id:     toolBar
        color:  isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5)
    
    Don Gagne's avatar
    Don Gagne committed
        QGCPalette { id: qgcPal; colorGroupEnabled: true }
    
    dogmaphobic's avatar
    dogmaphobic committed
        property var  activeVehicle:        multiVehicleManager.activeVehicle
    
    dogmaphobic's avatar
    dogmaphobic committed
        property var  mainWindow:           null
    
    dogmaphobic's avatar
    dogmaphobic committed
        property bool isMessageImportant:   activeVehicle ? !activeVehicle.messageTypeNormal && !activeVehicle.messageTypeNone : false
        property bool isBackgroundDark:     true
    
    dogmaphobic's avatar
    dogmaphobic committed
        /*
            Dev System (Mac OS)
    
            qml: Main Window Width:   1008
            qml: Toolbar height:      51.2
            qml: Default font:        12.8
            qml: Font (.75):          9.600000000000001
            qml: Font (.85):          10.88
            qml: Font 1.5):           19.200000000000003
            qml: Default Font Width:  8.328125
            qml: Default Font Height: 12.8
            qml: --
            qml: Real Font Height:    16
            qml: fontHRatio:          1
            qml: --
            qml: cellHeight:          38
            qml: tbFontSmall:         10
            qml: tbFontNormal:        12
            qml: tbFontLarge:         18
            qml: tbSpacing:           9.54
    
            Nexus 9
    
            qml: Main Window Width:   2048
            qml: Toolbar height:      90.9312
            qml: Default font:        38
            qml: Font (.75):          28.5
            qml: Font (.85):          32.3
            qml: Font 1.5):           57
            qml: Default Font Width:  20.0625
            qml: Default Font Height: 38
            qml: --
            qml: Real Font Height:    38
            qml: fontHRatio:          2.375
            qml: --
            qml: cellHeight:          68
            qml: tbFontSmall:         23.75
            qml: tbFontNormal:        28.5
            qml: tbFontLarge:         42.75
            qml: tbSpacing:           16.87552
    
            Nexus 7
    
            qml: Main Window Width:   1920
            qml: Toolbar height:      85.248
            qml: Default font:        38
            qml: Font (.75):          28.5
            qml: Font (.85):          32.3
            qml: Font 1.5):           57
            qml: Default Font Width:  20.140625
            qml: Default Font Height: 38
            qml: --
            qml: Real Font Height:    38
            qml: fontHRatio:          2.375
            qml: --
            qml: cellHeight:          63
            qml: tbFontSmall:         23.75
            qml: tbFontNormal:        28.5
            qml: tbFontLarge:         42.75
            qml: tbSpacing:           15.820800000000002
    
            Nexus 4
    
            qml: Main Window Width:   1196
            qml: Toolbar height:      79.65360000000001
            qml: Default font:        38
            qml: Font (.75):          28.5
            qml: Font (.85):          32.3
            qml: Font 1.5):           57
            qml: Default Font Width:  20.140625
            qml: Default Font Height: 38
            qml: --
            qml: Real Font Height:    38
            qml: fontHRatio:          2.375
            qml: --
            qml: cellHeight:          59
            qml: tbFontSmall:         23.75
            qml: tbFontNormal:        28.5
            qml: tbFontLarge:         42.75
            qml: tbSpacing:           9.85504
    
        */
    
        readonly property int   cellHeight:     height * 0.75
    
    dogmaphobic's avatar
    dogmaphobic committed
        readonly property real  tbFontSmall:    10 * ScreenTools.fontHRatio
        readonly property real  tbFontNormal:   12 * ScreenTools.fontHRatio
        readonly property real  tbFontLarge:    18 * ScreenTools.fontHRatio
    
    dogmaphobic's avatar
    dogmaphobic committed
        readonly property real  tbSpacing:      ScreenTools.isMobile ? toolBar.width * 0.00824 : 9.54
    
    dogmaphobic's avatar
    dogmaphobic committed
        readonly property var   colorGreen:     "#05f068"
        readonly property var   colorOrange:    "#f0ab06"
        readonly property var   colorRed:       "#fc4638"
        readonly property var   colorGrey:      "#7f7f7f"
        readonly property var   colorBlue:      "#636efe"
        readonly property var   colorWhite:     "#ffffff"
    
        MainToolBarController { id: _controller }
    
        function showToolbarMessage(message) {
            toolBarMessage.text = message
            toolBarMessageArea.visible = true
    
    Don Gagne's avatar
    Don Gagne committed
        }
    
    
    dogmaphobic's avatar
    dogmaphobic committed
        function showMavStatus() {
    
             return (multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout === 0 && _controller.connectionCount > 0);
    
    dogmaphobic's avatar
    dogmaphobic committed
        Component.onCompleted: {
            //-- TODO: Get this from the actual state
            flyButton.checked = true
        }
    
    dogmaphobic's avatar
    dogmaphobic committed
        Connections {
            target:         controller
            onShowFlyView:  { flyButton.checked   = true }
            onShowPlanView: { planButton.checked  = true }
            onShowSetupView:{ setupButton.checked = true }
        }
    
    dogmaphobic's avatar
    dogmaphobic committed
        Row {
            id:             viewRow
            height:         cellHeight
            spacing:        tbSpacing
            anchors.left:   parent.left
            anchors.leftMargin:     tbSpacing
            anchors.verticalCenter: parent.verticalCenter
    
            ExclusiveGroup { id: mainActionGroup }
    
            QGCToolBarButton {
                id:                 setupButton
                width:              cellHeight * 1.3
                height:             cellHeight
                exclusiveGroup:     mainActionGroup
                source:             "qrc:/res/Gears"
                onClicked: {
    
                    _controller.onSetupView();
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            Rectangle {
                height: cellHeight
                width:  1
                color: Qt.rgba(1,1,1,0.45)
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 planButton
                width:              cellHeight * 1.3
                height:             cellHeight
                exclusiveGroup:     mainActionGroup
                source:             "qrc:/res/Plan"
                onClicked: {
    
                    _controller.onPlanView();
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            Rectangle {
                height: cellHeight
                width:  1
                color: Qt.rgba(1,1,1,0.45)
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 flyButton
                width:              cellHeight * 1.3
                height:             cellHeight
                exclusiveGroup:     mainActionGroup
                source:             "qrc:/res/PaperPlane"
                onClicked: {
                    _controller.onFlyView();
    
    Don Gagne's avatar
    Don Gagne committed
            }
    
    Don Gagne's avatar
    Don Gagne committed
            Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
                height: cellHeight
                width:  1
                color: Qt.rgba(1,1,1,0.45)
    
    Don Gagne's avatar
    Don Gagne committed
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
        }
    
    dogmaphobic's avatar
    dogmaphobic committed
        Item {
            visible:                showMavStatus() && !connectionStatus.visible
            height:                 cellHeight
            width:                  (toolBar.width - viewRow.width - connectRow.width)
            anchors.left:           viewRow.right
            anchors.leftMargin:     tbSpacing * 2
            anchors.verticalCenter: parent.verticalCenter
            Loader {
                source:             multiVehicleManager.activeVehicleAvailable ? "MainToolBarIndicators.qml" : ""
                anchors.left:       parent.left
                anchors.verticalCenter:   parent.verticalCenter
    
    Don Gagne's avatar
    Don Gagne committed
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
        }
    
    dogmaphobic's avatar
    dogmaphobic committed
        QGCLabel {
            id:             connectionStatus
            visible:        (_controller.connectionCount > 0 && multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout != 0)
            text:           "CONNECTION LOST"
            font.pixelSize: tbFontLarge
            font.weight:    Font.DemiBold
            color:          colorRed
            anchors.left:           viewRow.right
            anchors.leftMargin:     tbSpacing * 2
            anchors.verticalCenter: parent.verticalCenter
        }
    
    dogmaphobic's avatar
    dogmaphobic committed
    
        Row {
    
    Don Gagne's avatar
    Don Gagne committed
            id:                     connectRow
    
    dogmaphobic's avatar
    dogmaphobic committed
            height:                 cellHeight
            spacing:                tbSpacing
            anchors.rightMargin:    tbSpacing
    
    Don Gagne's avatar
    Don Gagne committed
            anchors.right:          parent.right
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.verticalCenter: parent.verticalCenter
    
    dogmaphobic's avatar
    dogmaphobic committed
            Menu {
                id: connectMenu
    
    dogmaphobic's avatar
    dogmaphobic committed
                Component.onCompleted: {
    
                    _controller.configListChanged.connect(connectMenu.updateConnectionList);
    
    dogmaphobic's avatar
    dogmaphobic committed
                    connectMenu.updateConnectionList();
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
    
    dogmaphobic's avatar
    dogmaphobic committed
                function addMenuEntry(name) {
                    var label = "Add Connection"
                    if(name !== "")
                        label = name;
                    var mItem = connectMenu.addItem(label);
    
                    var menuSlot = function() {_controller.onConnect(name)};
    
    dogmaphobic's avatar
    dogmaphobic committed
                    mItem.triggered.connect(menuSlot);
                }
                function updateConnectionList() {
                    connectMenu.clear();
    
                    for(var i = 0; i < _controller.configList.length; i++) {
                        connectMenu.addMenuEntry(_controller.configList[i]);
    
    dogmaphobic's avatar
    dogmaphobic committed
                    }
    
                    if(_controller.configList.length > 0) {
    
    dogmaphobic's avatar
    dogmaphobic committed
                        connectMenu.addSeparator();
                    }
                    // Add "Add Connection" to the list
                    connectMenu.addMenuEntry("");
    
    dogmaphobic's avatar
    dogmaphobic committed
            Rectangle {
                height: cellHeight
                width:  1
                color: Qt.rgba(1,1,1,0.45)
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:             connectButton
                width:          cellHeight * 1.3
                height:         cellHeight
                visible:        _controller.connectionCount === 0
                source:         "/qmlimages/Connect.svg"
                checked:        false
                onClicked: {
                    checked = false
                    connectMenu.popup()
                    /*
                    console.log("Main Window Width:   " + mainWindow.width)
                    console.log("Toolbar height:      " + toolBar.height)
                    console.log("Default font:        " + ScreenTools.defaultFontPixelSize)
                    console.log("Font (.75):          " + ScreenTools.defaultFontPixelSize * 0.75)
                    console.log("Font (.85):          " + ScreenTools.defaultFontPixelSize * 0.85)
                    console.log("Font 1.5):           " + ScreenTools.defaultFontPixelSize * 1.5)
                    console.log("Default Font Width:  " + ScreenTools.defaultFontPixelWidth)
                    console.log("Default Font Height: " + ScreenTools.defaultFontPixelHeight)
                    console.log("--")
                    console.log("Real Font Height:    " + ScreenTools.realFontHeight)
                    console.log("fontHRatio:          " + ScreenTools.fontHRatio)
                    console.log("--")
                    console.log("cellHeight:          " + cellHeight)
                    console.log("tbFontSmall:         " + tbFontSmall);
                    console.log("tbFontNormal:        " + tbFontNormal);
                    console.log("tbFontLarge:         " + tbFontLarge);
                    console.log("tbSpacing:           " + tbSpacing);
                    */
                }
            }
    
            QGCToolBarButton {
                id:             disconnectButton
                width:          cellHeight * 1.3
                height:         cellHeight
                visible:        _controller.connectionCount === 1
                source:         "/qmlimages/Disconnect.svg"
                checked:        false
    
    dogmaphobic's avatar
    dogmaphobic committed
                onClicked: {
    
    dogmaphobic's avatar
    dogmaphobic committed
                    checked = false
    
                    _controller.onDisconnect("");
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
            }
    
            Menu {
                id: disconnectMenu
                Component.onCompleted: {
    
                    _controller.connectedListChanged.connect(disconnectMenu.onConnectedListChanged)
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
    
    dogmaphobic's avatar
    dogmaphobic committed
                function addMenuEntry(name) {
                    var mItem = disconnectMenu.addItem(name);
    
                    var menuSlot = function() {_controller.onDisconnect(name)};
    
    dogmaphobic's avatar
    dogmaphobic committed
                    mItem.triggered.connect(menuSlot);
                }
    
    dogmaphobic's avatar
    dogmaphobic committed
                function onConnectedListChanged(conList) {
                    disconnectMenu.clear();
                    for(var i = 0; i < conList.length; i++) {
    
    dogmaphobic's avatar
    dogmaphobic committed
                        disconnectMenu.addMenuEntry(conList[i]);
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:             multidisconnectButton
                width:          cellHeight * 1.3
                height:         cellHeight
                visible:        _controller.connectionCount > 1
                source:         "/qmlimages/Disconnect.svg"
                checked:        false
                onClicked: {
                    checked = false
                    disconnectMenu.popup()
                }
    
    dogmaphobic's avatar
    dogmaphobic committed
            }
    
    
        // Progress bar
        Rectangle {
    
    Don Gagne's avatar
    Don Gagne committed
            id:             progressBar
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.bottom: parent.bottom
            height:         toolBar.height * 0.05
    
            width:          parent.width * _controller.progressBarValue
    
    dogmaphobic's avatar
    dogmaphobic committed
            color:          colorGreen
    
    Don Gagne's avatar
    Don Gagne committed
        // Toolbar message area
        Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
            id:             toolBarMessageArea
            x:              toolBar.parent.width * 0.225
            y:              toolBar.parent.height - (ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6)
            width:          toolBar.parent.width * 0.55
            height:         ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6
            color:          Qt.rgba(0,0,0,0.65)
            visible:        false
    
    dogmaphobic's avatar
    dogmaphobic committed
            ScrollView {
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:              toolBarMessageArea.width - toolBarMessageCloseButton.width
                anchors.top:        parent.top
                anchors.bottom:     parent.bottom
    
    dogmaphobic's avatar
    dogmaphobic committed
                frameVisible:       false
                horizontalScrollBarPolicy:  Qt.ScrollBarAlwaysOff
                verticalScrollBarPolicy:    Qt.ScrollBarAlwaysOff
                QGCLabel {
                    id:                 toolBarMessage
                    width:              toolBarMessageArea.width - toolBarMessageCloseButton.width
                    wrapMode:           Text.WordWrap
                    color:              qgcPal.warningText
                    lineHeightMode:     Text.ProportionalHeight
                    lineHeight:         1.15
                    anchors.margins:    tbSpacing
                }
    
    Don Gagne's avatar
    Don Gagne committed
            }
            QGCButton {
    
    dogmaphobic's avatar
    dogmaphobic committed
                id:                 toolBarMessageCloseButton
                primary:            true
    
    dogmaphobic's avatar
    dogmaphobic committed
                text:               "Close"
    
    dogmaphobic's avatar
    dogmaphobic committed
                anchors.right:      parent.right
                anchors.bottom:     parent.bottom
                anchors.margins:    tbSpacing
    
    Don Gagne's avatar
    Don Gagne committed
                onClicked: {
    
    dogmaphobic's avatar
    dogmaphobic committed
                    toolBarMessageArea.visible = false
    
                    _controller.onToolBarMessageClosed()
    
    Don Gagne's avatar
    Don Gagne committed
    
    
    Don Gagne's avatar
    Don Gagne committed
    } // Rectangle