Skip to content
Snippets Groups Projects
MainToolBar.qml 13.8 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
    
    
    Don Gagne's avatar
    Don Gagne committed
    import QGroundControl                       1.0
    
    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
    
    dogmaphobic's avatar
    dogmaphobic committed
        color:  opaqueBackground ? "#404040" : (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
        property bool opaqueBackground:     false
    
    dogmaphobic's avatar
    dogmaphobic committed
        property string formatedMessage:    activeVehicle ? activeVehicle.formatedMessage : ""
    
    
    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 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 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 }
    
    dogmaphobic's avatar
    dogmaphobic committed
        onFormatedMessageChanged: {
            if(messageArea.visible) {
                messageText.append(formatedMessage)
                //-- Hack to scroll down
                messageFlick.flick(0,-500)
            }
        }
    
        function showMessageArea() {
            if(multiVehicleManager.activeVehicleAvailable) {
                messageText.text = activeVehicle.formatedMessages
                //-- Hack to scroll to last message
                for (var i = 0; i < activeVehicle.messageCount; i++)
                    messageFlick.flick(0,-5000)
                activeVehicle.resetMessages()
            } else {
                messageText.text = "No Messages"
            }
            messageArea.visible = true
            mainWindow.setMapInteractive(false)
        }
    
    
        function showToolbarMessage(message) {
            toolBarMessage.text = message
            toolBarMessageArea.visible = true
    
    Don Gagne's avatar
    Don Gagne committed
        }
    
    
    dogmaphobic's avatar
    dogmaphobic committed
        function showMavStatus() {
    
    Don Gagne's avatar
    Don Gagne committed
             return (multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout === 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
    
    dogmaphobic's avatar
    dogmaphobic committed
            height:         mainWindow.tbCellHeight
            spacing:        mainWindow.tbSpacing
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.left:   parent.left
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.leftMargin:     mainWindow.tbSpacing
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.verticalCenter: parent.verticalCenter
    
            ExclusiveGroup { id: mainActionGroup }
    
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 preferencesButton
                width:              mainWindow.tbButtonWidth
                height:             mainWindow.tbCellHeight
                source:             "/qmlimages/Hamburger.svg"
                onClicked: {
                    mainWindow.showLeftMenu();
                    preferencesButton.checked = false;
                }
            }
    
            Rectangle {
                height: mainWindow.tbCellHeight
                width:  1
                color: Qt.rgba(1,1,1,0.45)
            }
    
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 setupButton
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:              mainWindow.tbButtonWidth
                height:             mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                exclusiveGroup:     mainActionGroup
    
    dogmaphobic's avatar
    dogmaphobic committed
                source:             "/qmlimages/Gears.svg"
    
    dogmaphobic's avatar
    dogmaphobic committed
                onClicked: {
    
                    _controller.onSetupView();
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
                height: mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:  1
                color: Qt.rgba(1,1,1,0.45)
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 planButton
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:              mainWindow.tbButtonWidth
                height:             mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                exclusiveGroup:     mainActionGroup
    
    dogmaphobic's avatar
    dogmaphobic committed
                source:             "/qmlimages/Plan.svg"
    
    dogmaphobic's avatar
    dogmaphobic committed
                onClicked: {
    
                    _controller.onPlanView();
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
            }
    
    dogmaphobic's avatar
    dogmaphobic committed
            Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
                height: mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:  1
                color: Qt.rgba(1,1,1,0.45)
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    dogmaphobic's avatar
    dogmaphobic committed
            QGCToolBarButton {
                id:                 flyButton
    
    dogmaphobic's avatar
    dogmaphobic committed
                width:              mainWindow.tbButtonWidth
                height:             mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                exclusiveGroup:     mainActionGroup
    
    dogmaphobic's avatar
    dogmaphobic committed
                source:             "/qmlimages/PaperPlane.svg"
    
    dogmaphobic's avatar
    dogmaphobic committed
                onClicked: {
                    _controller.onFlyView();
    
    Don Gagne's avatar
    Don Gagne committed
            }
    
    Don Gagne's avatar
    Don Gagne committed
            Rectangle {
    
    dogmaphobic's avatar
    dogmaphobic committed
                height: mainWindow.tbCellHeight
    
    dogmaphobic's avatar
    dogmaphobic committed
                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 {
    
    dogmaphobic's avatar
    dogmaphobic committed
            id:                     vehicleIndicators
    
    dogmaphobic's avatar
    dogmaphobic committed
            visible:                showMavStatus() && !connectionStatus.visible
    
    dogmaphobic's avatar
    dogmaphobic committed
            height:                 mainWindow.tbCellHeight
    
    Don Gagne's avatar
    Don Gagne committed
            width:                  (toolBar.width - viewRow.width)
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.left:           viewRow.right
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.leftMargin:     mainWindow.tbSpacing * 2
    
    dogmaphobic's avatar
    dogmaphobic committed
            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
        //-------------------------------------------------------------------------
        //-- System Message Area
        Rectangle {
            id:             messageArea
            width:          mainWindow.width  * 0.5
            height:         mainWindow.height * 0.5
            anchors.top:    parent.bottom
            anchors.horizontalCenter: parent.horizontalCenter
            color:          Qt.rgba(0,0,0,0.75)
            visible:        false
            radius:         ScreenTools.defaultFontPixelHeight * 0.5
            Flickable {
                id:                 messageFlick
                anchors.margins:    ScreenTools.defaultFontPixelHeight
                anchors.fill:       parent
                contentHeight:      messageText.height
                contentWidth:       messageText.width
                boundsBehavior:     Flickable.StopAtBounds
                pixelAligned:       true
                clip:               true
                TextEdit {
                    id:         messageText
                    readOnly:   true
                    textFormat: TextEdit.RichText
                    color:      "white"
                }
            }
            //-- Dismiss System Message
            Image {
                anchors.margins:    ScreenTools.defaultFontPixelHeight
                anchors.top:        parent.top
                anchors.right:      parent.right
                width:              ScreenTools.defaultFontPixelHeight * 1.5
                height:             ScreenTools.defaultFontPixelHeight * 1.5
                source:             "/res/XDelete.svg"
                fillMode:           Image.PreserveAspectFit
                mipmap:             true
                smooth:             true
                MouseArea {
                    anchors.fill:   parent
                    onClicked: {
                        messageText.text    = ""
                        messageArea.visible = false
                        mainWindow.setMapInteractive(true)
                    }
                }
            }
        }
    
    
    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
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.leftMargin:     mainWindow.tbSpacing * 2
    
    dogmaphobic's avatar
    dogmaphobic committed
            anchors.verticalCenter: parent.verticalCenter
        }
    
        // 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
    
    dogmaphobic's avatar
    dogmaphobic committed
                    color:              "#e4e428"
    
    dogmaphobic's avatar
    dogmaphobic committed
                    lineHeightMode:     Text.ProportionalHeight
                    lineHeight:         1.15
    
    dogmaphobic's avatar
    dogmaphobic committed
                    anchors.margins:    mainWindow.tbSpacing
    
    dogmaphobic's avatar
    dogmaphobic committed
                }
    
    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
    
    dogmaphobic's avatar
    dogmaphobic committed
                anchors.margins:    mainWindow.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