Skip to content
MainToolBar.qml 16.7 KiB
Newer Older
/****************************************************************************
 *
Gus Grubba's avatar
Gus Grubba committed
 * (c) 2009-2020 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.11
import QtQuick.Controls 2.4
import QtQuick.Layouts  1.11
Don Gagne's avatar
 
Don Gagne committed
import QtQuick.Dialogs  1.3
Don Gagne's avatar
Don Gagne committed
import QGroundControl                       1.0
import QGroundControl.Controls              1.0
import QGroundControl.Palette               1.0
import QGroundControl.MultiVehicleManager   1.0
import QGroundControl.ScreenTools           1.0
import QGroundControl.Controllers           1.0
DonLakeFlyer's avatar
 
DonLakeFlyer committed
Rectangle {
    id:     _root
    color:  qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark
Don Gagne's avatar
Don Gagne committed

DonLakeFlyer's avatar
 
DonLakeFlyer committed
    property int currentToolbar: flyViewToolbar
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed

DonLakeFlyer's avatar
 
DonLakeFlyer committed
    readonly property int flyViewToolbar:   0
    readonly property int planViewToolbar:  1
    readonly property int simpleToolbar:    2
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed

DonLakeFlyer's avatar
 
DonLakeFlyer committed
    property var    _activeVehicle:     QGroundControl.multiVehicleManager.activeVehicle
    property bool   _communicationLost: _activeVehicle ? _activeVehicle.connectionLost : false
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed

    Component.onCompleted: _viewButtonClicked(flyButton)

    function _viewButtonClicked(button) {
        if (mainWindow.preventViewSwitch()) {
            return false
        }
        viewButtonSelectRow.visible = false
        buttonSelectHideTimer.stop()
        currentButton.icon.source = button.icon.source
        currentButton.logo = button.logo
        return true
    }

    //-- Setup can be invoked from c++ side
    Connections {
        target: setupWindow
        onVisibleChanged: {
            if (setupWindow.visible) {
                _viewButtonClicked(setupButton)
            }
        }
dogmaphobic's avatar
dogmaphobic committed
    }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    QGCPalette { id: qgcPal }

Don Gagne's avatar
Don Gagne committed
    /// Bottom single pixel divider
    Rectangle {
        anchors.left:   parent.left
        anchors.right:  parent.right
        anchors.bottom: parent.bottom
        height:         1
        color:          "black"
        visible:        qgcPal.globalTheme === QGCPalette.Light
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    RowLayout {
        id:                     viewButtonRow
        anchors.bottomMargin:   1
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom
        spacing:                ScreenTools.defaultFontPixelWidth / 2

        QGCToolBarButton {
            id:                 currentButton
            Layout.fillHeight:  true
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            visible:            !viewButtonSelectRow.visible
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed

            onClicked: {
                viewButtonSelectRow.visible = !viewButtonSelectRow.visible
                if (viewButtonSelectRow.visible) {
                    buttonSelectHideTimer.start()
                } else {
                    buttonSelectHideTimer.stop()
                }
Don Gagne's avatar
Don Gagne committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        //---------------------------------------------
        // Toolbar Row
Don Gagne's avatar
 
Don Gagne committed
        RowLayout {
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            id:                 viewButtonSelectRow
            Layout.fillHeight:  true
            spacing:            0
            visible:            false

            Timer {
                id:             buttonSelectHideTimer
                interval:       5000
                repeat:         false
                onTriggered:    viewButtonSelectRow.visible = false
            }
DonLakeFlyer's avatar
 
DonLakeFlyer committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            QGCToolBarButton {
                id:                 settingsButton
                Layout.fillHeight:  true
                icon.source:        "/res/QGCLogoFull"
                logo:               true
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                visible:            !QGroundControl.corePlugin.options.combineSettingsAndSetup
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                onClicked: {
                    if (_viewButtonClicked(this)) {
Don Gagne's avatar
 
Don Gagne committed
                        mainWindow.showSettingsView()
                    }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            QGCToolBarButton {
                id:                 setupButton
                Layout.fillHeight:  true
                icon.source:        "/qmlimages/Gears.svg"
                onClicked: {
                    if (_viewButtonClicked(this)) {
Don Gagne's avatar
 
Don Gagne committed
                        mainWindow.showSetupView()
                    }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            QGCToolBarButton {
                id:                 planButton
                Layout.fillHeight:  true
                icon.source:        "/qmlimages/Plan.svg"
                onClicked: {
                    if (_viewButtonClicked(this)) {
Don Gagne's avatar
 
Don Gagne committed
                        mainWindow.showPlanView()
                    }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            }
Don Gagne's avatar
Don Gagne committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            QGCToolBarButton {
                id:                 flyButton
                Layout.fillHeight:  true
                icon.source:        "/qmlimages/PaperPlane.svg"
                onClicked: {
                    if (_viewButtonClicked(this)) {
Don Gagne's avatar
 
Don Gagne committed
                        mainWindow.showFlyView()
Pierre TILAK's avatar
Pierre TILAK committed
                        // Easter Egg mechanism
                        _clickCount++
                        eggTimer.restart()
                        if (_clickCount == 5) {
                            if(!QGroundControl.corePlugin.showAdvancedUI) {
                                advancedModeConfirmation.open()
                            } else {
                                QGroundControl.corePlugin.showAdvancedUI = false
                            }
                        } else if (_clickCount == 7) {
                            QGroundControl.corePlugin.showTouchAreas = !QGroundControl.corePlugin.showTouchAreas
                        }
                    }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                property int _clickCount: 0
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                Timer {
                    id:             eggTimer
                    interval:       1000
                    repeat:         false
                    onTriggered:    parent._clickCount = 0
                }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                MessageDialog {
                    id:                 advancedModeConfirmation
                    title:              qsTr("Advanced Mode")
                    text:               QGroundControl.corePlugin.showAdvancedUIMessage
                    standardButtons:    StandardButton.Yes | StandardButton.No
                    onYes: {
                        QGroundControl.corePlugin.showAdvancedUI = true
                        advancedModeConfirmation.close()
Don Gagne's avatar
 
Don Gagne committed
                    }
                }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            }
Don Gagne's avatar
 
Don Gagne committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            QGCToolBarButton {
                id:                 analyzeButton
                Layout.fillHeight:  true
                icon.source:        "/qmlimages/Analyze.svg"
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                visible:            QGroundControl.corePlugin.showAdvancedUI
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                onClicked: {
                    if (_viewButtonClicked(this)) {
Don Gagne's avatar
 
Don Gagne committed
                        mainWindow.showAnalyzeView()
                    }
                }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            }
        }
    }
Don Gagne's avatar
 
Don Gagne committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    Rectangle {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        id:                 separator1
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
        anchors.top:        parent.top
        anchors.bottom:     parent.bottom
        anchors.left:       viewButtonRow.right
        width:              1
        color:              qgcPal.text
    }
Don Gagne's avatar
 
Don Gagne committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    QGCFlickable {
        id:                     toolsFlickable
        anchors.leftMargin:     ScreenTools.defaultFontPixelHeight / 2
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        anchors.left:           separator1.right
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        anchors.bottomMargin:   1
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        anchors.right:          connectionStatus.visible ? connectionStatus.left : parent.right
        contentWidth:           indicatorLoader.x + indicatorLoader.width
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        flickableDirection:     Flickable.HorizontalFlick
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        clip:                   !valueArea.settingsUnlocked

        HorizontalFactValueGrid {
            id:                     valueArea
            anchors.top:            parent.top
            anchors.bottom:         parent.bottom
            userSettingsGroup:      toolbarUserSettingsGroup
            defaultSettingsGroup:   toolbarDefaultSettingsGroup
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            visible:                currentToolbar !== planViewToolbar
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed

            QGCMouseArea {
                anchors.fill:   parent
                visible:        !parent.settingsUnlocked
                onClicked:      parent.settingsUnlocked = true
            }
        }
Don Gagne's avatar
 
Don Gagne committed

DonLakeFlyer's avatar
 
DonLakeFlyer committed
        Rectangle {
            id:                     separator2
            anchors.margins:        ScreenTools.defaultFontPixelHeight / 2
            anchors.bottomMargin:   ScreenTools.defaultFontPixelHeight / 2 - 1
            anchors.top:            parent.top
            anchors.bottom:         parent.bottom
            anchors.left:           valueArea.right
            width:                  1
            color:                  qgcPal.text
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            visible:                currentToolbar == flyViewToolbar
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        }

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        Loader {
            id:                 indicatorLoader
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            anchors.leftMargin: currentToolbar !== planViewToolbar ? ScreenTools.defaultFontPixelHeight / 2 : 0
            anchors.left:       currentToolbar !== planViewToolbar ? separator2.right : parent.left
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            anchors.top:        parent.top
            anchors.bottom:     parent.bottom
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            source:             currentToolbar === flyViewToolbar ?
                                    "qrc:/toolbar/MainToolBarIndicators.qml" :
                                    (currentToolbar == planViewToolbar ? "qrc:/qml/PlanToolBarIndicators.qml" : "")
Don Gagne's avatar
 
Don Gagne committed
    }
Don Gagne's avatar
 
Don Gagne committed
    //-------------------------------------------------------------------------
    //-- Branding Logo
    Image {
        anchors.right:          parent.right
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom
        anchors.margins:        ScreenTools.defaultFontPixelHeight * 0.66
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        visible:                currentToolbar !== planViewToolbar && _activeVehicle && !_communicationLost && x > (toolsFlickable.x + toolsFlickable.contentWidth + ScreenTools.defaultFontPixelWidth)
Don Gagne's avatar
 
Don Gagne committed
        fillMode:               Image.PreserveAspectFit
        source:                 _outdoorPalette ? _brandImageOutdoor : _brandImageIndoor
        mipmap:                 true

        property bool   _outdoorPalette:        qgcPal.globalTheme === QGCPalette.Light
        property bool   _corePluginBranding:    QGroundControl.corePlugin.brandImageIndoor.length != 0
        property string _userBrandImageIndoor:  QGroundControl.settingsManager.brandImageSettings.userBrandImageIndoor.value
        property string _userBrandImageOutdoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageOutdoor.value
        property bool   _userBrandingIndoor:    _userBrandImageIndoor.length != 0
        property bool   _userBrandingOutdoor:   _userBrandImageOutdoor.length != 0
        property string _brandImageIndoor:      _userBrandingIndoor ?
                                                    _userBrandImageIndoor : (_userBrandingOutdoor ?
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                                                                                 _userBrandImageOutdoor : (_corePluginBranding ?
                                                                                                               QGroundControl.corePlugin.brandImageIndoor : (activeVehicle ?
                                                                                                                                                                 activeVehicle.brandImageIndoor : ""
                                                                                                                                                             )
                                                                                                           )
                                                                             )
Don Gagne's avatar
 
Don Gagne committed
        property string _brandImageOutdoor:     _userBrandingOutdoor ?
                                                    _userBrandImageOutdoor : (_userBrandingIndoor ?
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                                                                                  _userBrandImageIndoor : (_corePluginBranding ?
                                                                                                               QGroundControl.corePlugin.brandImageOutdoor : (activeVehicle ?
                                                                                                                                                                  activeVehicle.brandImageOutdoor : ""
                                                                                                                                                              )
                                                                                                           )
                                                                              )
dogmaphobic's avatar
dogmaphobic committed
    }
    // Small parameter download progress bar
    Rectangle {
dogmaphobic's avatar
dogmaphobic committed
        anchors.bottom: parent.bottom
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        height:         _root.height * 0.05
        width:          _activeVehicle ? _activeVehicle.parameterManager.loadProgress * parent.width : 0
        color:          qgcPal.colorGreen
        visible:        !largeProgressBar.visible
    }

    // Large parameter download progress bar
    Rectangle {
        id:             largeProgressBar
        anchors.bottom: parent.bottom
        anchors.left:   parent.left
        anchors.right:  parent.right
        height:         parent.height
        color:          qgcPal.window
        visible:        _showLargeProgress

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        property bool _initialDownloadComplete: _activeVehicle ? _activeVehicle.parameterManager.parametersReady : true
        property bool _userHide:                false
        property bool _showLargeProgress:       !_initialDownloadComplete && !_userHide && qgcPal.globalTheme === QGCPalette.Light

        Connections {
            target:                 QGroundControl.multiVehicleManager
            onActiveVehicleChanged: largeProgressBar._userHide = false
        }

        Rectangle {
            anchors.top:    parent.top
            anchors.bottom: parent.bottom
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            width:          _activeVehicle ? _activeVehicle.parameterManager.loadProgress * parent.width : 0
            color:          qgcPal.colorGreen
        }

        QGCLabel {
            anchors.centerIn:   parent
            text:               qsTr("Downloading Parameters")
            font.pointSize:     ScreenTools.largeFontPointSize
        }

        QGCLabel {
            anchors.margins:    _margin
            anchors.right:      parent.right
            anchors.bottom:     parent.bottom
            text:               qsTr("Click anywhere to hide")

            property real _margin: ScreenTools.defaultFontPixelWidth / 2
        }

        MouseArea {
            anchors.fill:   parent
            onClicked:      largeProgressBar._userHide = true
        }
Don Gagne's avatar
 
Don Gagne committed

    //-------------------------------------------------------------------------
    //-- Waiting for a vehicle
    QGCLabel {
        anchors.rightMargin:    ScreenTools.defaultFontPixelWidth
        anchors.right:          parent.right
        anchors.verticalCenter: parent.verticalCenter
        text:                   qsTr("Waiting For Vehicle Connection")
        font.pointSize:         ScreenTools.mediumFontPointSize
        font.family:            ScreenTools.demiboldFontFamily
        color:                  qgcPal.colorRed
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        visible:                currentToolbar !== planViewToolbar && !_activeVehicle
Don Gagne's avatar
 
Don Gagne committed
    }

    //-------------------------------------------------------------------------
    //-- Connection Status
    Row {
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
        id:                     connectionStatus
Don Gagne's avatar
 
Don Gagne committed
        anchors.rightMargin:    ScreenTools.defaultFontPixelWidth
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom
        anchors.right:          parent.right
        layoutDirection:        Qt.RightToLeft
        spacing:                ScreenTools.defaultFontPixelWidth
DonLakeFlyer's avatar
 
DonLakeFlyer committed
        visible:                currentToolbar !== planViewToolbar && _activeVehicle && _communicationLost
Don Gagne's avatar
 
Don Gagne committed

        QGCButton {
            id:                     disconnectButton
            anchors.verticalCenter: parent.verticalCenter
            text:                   qsTr("Disconnect")
            primary:                true
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            onClicked:              _activeVehicle.disconnectInactiveVehicle()
Don Gagne's avatar
 
Don Gagne committed
        }

        QGCLabel {
            id:                     connectionLost
            anchors.verticalCenter: parent.verticalCenter
            text:                   qsTr("COMMUNICATION LOST")
            font.pointSize:         ScreenTools.largeFontPointSize
            font.family:            ScreenTools.demiboldFontFamily
            color:                  qgcPal.colorRed
        }
    }