MainWindow.qml 5.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*=====================================================================

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/>.

======================================================================*/

dogmaphobic's avatar
dogmaphobic committed
24
import QtQuick          2.5
25 26 27
import QtQuick.Controls 1.2
import QtPositioning    5.2

Gus Grubba's avatar
Gus Grubba committed
28
import QGroundControl               1.0
dogmaphobic's avatar
dogmaphobic committed
29
import QGroundControl.Palette       1.0
30
import QGroundControl.Controls      1.0
Don Gagne's avatar
Don Gagne committed
31
import QGroundControl.FlightDisplay 1.0
32 33 34
import QGroundControl.ScreenTools   1.0

/// Qml for MainWindow
35
Item {
dogmaphobic's avatar
dogmaphobic committed
36
    id: mainWindow
Don Gagne's avatar
Don Gagne committed
37

38 39 40
    readonly property string _planViewSource:   "MissionEditor.qml"
    readonly property string _setupViewSource:  "SetupView.qml"

dogmaphobic's avatar
dogmaphobic committed
41 42
    QGCPalette { id: __qgcPal; colorGroupEnabled: true }

43
    property real tbHeight:         ScreenTools.isMobile ? (ScreenTools.isTinyScreen ? (mainWindow.width * 0.0666) : (mainWindow.width * 0.05)) : ScreenTools.defaultFontPixelSize * 4
dogmaphobic's avatar
dogmaphobic committed
44 45 46 47 48
    property int  tbCellHeight:     tbHeight * 0.75
    property real tbSpacing:        ScreenTools.isMobile ? width * 0.00824 : 9.54
    property real tbButtonWidth:    tbCellHeight * 1.3
    property real avaiableHeight:   height - tbHeight
    property real menuButtonWidth:  (tbButtonWidth * 2) + (tbSpacing * 4) + 1
dogmaphobic's avatar
dogmaphobic committed
49

50 51 52
    property var defaultPosition:   QtPositioning.coordinate(37.803784, -122.462276)
    property var tabletPosition:    defaultPosition

53
    Connections {
54

55 56 57
        target: controller

        onShowFlyView: {
58 59 60
            flightView.visible          = true
            setupViewLoader.visible     = false
            planViewLoader.visible      = false
61 62 63
        }

        onShowPlanView: {
64 65
            if (planViewLoader.source   != _planViewSource) {
                planViewLoader.source   = _planViewSource
66
            }
67 68 69
            flightView.visible          = false
            setupViewLoader.visible     = false
            planViewLoader.visible      = true
70 71 72
        }

        onShowSetupView: {
73 74
            if (setupViewLoader.source  != _setupViewSource) {
                setupViewLoader.source  = _setupViewSource
75
            }
76 77 78
            flightView.visible          = false
            setupViewLoader.visible     = true
            planViewLoader.visible      = false
79 80
        }

dogmaphobic's avatar
dogmaphobic committed
81
        onShowToolbarMessage: toolBar.showToolbarMessage(message)
82 83 84 85 86 87

        // The following are use for unit testing only

        onShowSetupFirmware:            setupViewLoader.item.showFirmwarePanel()
        onShowSetupParameters:          setupViewLoader.item.showParametersPanel()
        onShowSetupSummary:             setupViewLoader.item.showSummaryPanel()
Don Gagne's avatar
Don Gagne committed
88
        onShowSetupVehicleComponent:    setupViewLoader.item.showVehicleComponentPanel(vehicleComponent)
89 90
    }

dogmaphobic's avatar
dogmaphobic committed
91
    //-- Detect tablet position
92 93 94
    PositionSource {
        id:             positionSource
        updateInterval: 1000
95
        active:         false
96
        onPositionChanged: {
97 98 99 100 101 102 103 104 105 106 107 108
            if(positionSource.valid) {
                if(positionSource.position.coordinate.latitude) {
                    if(Math.abs(positionSource.position.coordinate.latitude)  > 0.001) {
                        if(positionSource.position.coordinate.longitude) {
                            if(Math.abs(positionSource.position.coordinate.longitude)  > 0.001) {
                                tabletPosition = positionSource.position.coordinate
                            }
                        }
                    }
                }
            }
            positionSource.stop()
dogmaphobic's avatar
dogmaphobic committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
        }
    }

    function showLeftMenu() {
        if(!leftPanel.visible && !leftPanel.item.animateShowDialog.running) {
            leftPanel.visible = true
            leftPanel.item.animateShowDialog.start()
        } else if(leftPanel.visible && !leftPanel.item.animateShowDialog.running) {
            //-- If open, toggle it closed
            hideLeftMenu()
        }
    }

    function hideLeftMenu() {
        if(leftPanel.visible && !leftPanel.item.animateHideDialog.running) {
            leftPanel.item.animateHideDialog.start()
125 126 127
        }
    }

dogmaphobic's avatar
dogmaphobic committed
128 129 130 131 132 133 134 135 136 137
    //-- Left Settings Menu
    Loader {
        id:                 leftPanel
        anchors.fill:       mainWindow
        visible:            false
        z:                  QGroundControl.zOrderTopMost + 100
    }

    //-- Main UI

dogmaphobic's avatar
dogmaphobic committed
138 139
    MainToolBar {
        id:                 toolBar
dogmaphobic's avatar
dogmaphobic committed
140
        height:             tbHeight
dogmaphobic's avatar
dogmaphobic committed
141 142 143
        anchors.left:       parent.left
        anchors.right:      parent.right
        anchors.top:        parent.top
dogmaphobic's avatar
dogmaphobic committed
144
        mainWindow:         mainWindow
dogmaphobic's avatar
dogmaphobic committed
145
        opaqueBackground:   leftPanel.visible
dogmaphobic's avatar
dogmaphobic committed
146
        isBackgroundDark:   flightView.isBackgroundDark
Gus Grubba's avatar
Gus Grubba committed
147
        z:                  QGroundControl.zOrderTopMost
dogmaphobic's avatar
dogmaphobic committed
148 149 150
        Component.onCompleted: {
            leftPanel.source = "MainWindowLeftPanel.qml"
        }
151 152 153
    }

    FlightDisplayView {
dogmaphobic's avatar
dogmaphobic committed
154 155 156 157
        id:                 flightView
        anchors.fill:       parent
        avaiableHeight:     mainWindow.avaiableHeight
        visible:            true
158 159 160
        Component.onCompleted: {
            positionSource.start()
        }
161 162 163
    }

    Loader {
164
        id:                 planViewLoader
dogmaphobic's avatar
dogmaphobic committed
165
        anchors.fill:       parent
166
        visible:            false
167 168 169 170
    }

    Loader {
        id:                 setupViewLoader
dogmaphobic's avatar
dogmaphobic committed
171
        anchors.fill:       parent
172 173
        visible:            false
    }
dogmaphobic's avatar
dogmaphobic committed
174

175
}