MainWindowLeftPanel.qml 11.6 KB
Newer Older
dogmaphobic's avatar
dogmaphobic committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
/*=====================================================================

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

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

import QtQuick          2.5
import QtQuick.Controls 1.2
import QtPositioning    5.2

import QGroundControl               1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FlightDisplay 1.0
import QGroundControl.ScreenTools   1.0


//-- Left Menu
Item {
37
    id:             settingsMenu
dogmaphobic's avatar
dogmaphobic committed
38 39 40 41 42 43 44
    anchors.fill:   parent

    property alias animateShowDialog: __animateShowDialog
    property alias animateHideDialog: __animateHideDialog

    readonly property int  __animationDuration: 100
    readonly property real __closeButtonSize:   ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
45
    readonly property real _margins:            ScreenTools.defaultFontPixelHeight / 2
dogmaphobic's avatar
dogmaphobic committed
46

47 48
    QGCPalette { id: qgcPal }

dogmaphobic's avatar
dogmaphobic committed
49 50 51 52 53 54 55 56 57
    onVisibleChanged: {
        //-- Unselect any selected button
        panelActionGroup.current = null
        //-- Destroy panel contents if not visible
        if(!visible) {
            __rightPanel.source = ""
        }
    }

58 59 60 61 62
    function closeSettings() {
        __rightPanel.source = ""
        mainWindow.hideLeftMenu()
    }

dogmaphobic's avatar
dogmaphobic committed
63 64 65 66 67 68 69
    ParallelAnimation {
        id: __animateShowDialog
        NumberAnimation {
            target:     __transparentSection
            properties: "opacity"
            from:       0.0
            to:         0.8
70
            duration:   settingsMenu.__animationDuration
dogmaphobic's avatar
dogmaphobic committed
71 72 73 74 75 76
        }
        NumberAnimation {
            target:     __transparentSection
            properties: "width"
            from:       1
            to:         mainWindow.width
77
            duration:   settingsMenu.__animationDuration
dogmaphobic's avatar
dogmaphobic committed
78 79 80 81 82 83 84 85 86 87
        }
    }

    ParallelAnimation {
        id: __animateHideDialog
        NumberAnimation {
            target:     __transparentSection
            properties: "opacity"
            from:       0.8
            to:         0.0
88
            duration:   settingsMenu.__animationDuration
dogmaphobic's avatar
dogmaphobic committed
89 90 91 92 93 94
        }
        NumberAnimation {
            target:     __transparentSection
            properties: "width"
            from:       mainWindow.width
            to:         1
95
            duration:   settingsMenu.__animationDuration
dogmaphobic's avatar
dogmaphobic committed
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
        }
        onRunningChanged: {
            if (!running) {
                parent.visible = false
            }
        }
    }

    // This covers the screen with a transparent section
    Rectangle {
        id:             __transparentSection
        height:         parent.height - toolBar.height
        anchors.bottom: parent.bottom
        anchors.left:   parent.left
        opacity:        0.0
111
        color:          qgcPal.window
dogmaphobic's avatar
dogmaphobic committed
112 113 114 115 116
        visible:        __rightPanel.source == ""
        // Dismiss if clicked outside menu area
        MouseArea {
            anchors.fill: parent
            onClicked: {
117 118
                if (!__animateShowDialog.running)
                    mainWindow.hideLeftMenu()
dogmaphobic's avatar
dogmaphobic committed
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
            }
        }
    }

    //-- Top Separator
    Rectangle {
        id:             __topSeparator
        width:          parent.width
        height:         1
        y:              toolBar.height
        anchors.left:   parent.left
        color:          QGroundControl.isDarkStyle ? "#909090" : "#7f7f7f"
    }

    // This is the menu dialog panel which is anchored to the left edge
    Rectangle {
        id:             __leftMenu
136
        width:          ScreenTools.defaultFontPixelWidth * 16
dogmaphobic's avatar
dogmaphobic committed
137 138 139
        anchors.left:   parent.left
        anchors.top:    __topSeparator.bottom
        anchors.bottom: parent.bottom
140
        color:          qgcPal.windowShadeDark
dogmaphobic's avatar
dogmaphobic committed
141

Don Gagne's avatar
Don Gagne committed
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
        QGCFlickable {
            anchors.fill:       parent
            contentHeight:      buttonColumn.height + _margins
            flickableDirection: Flickable.VerticalFlick
            clip:               true

            ExclusiveGroup { id: panelActionGroup }

            Column {
                id:                     buttonColumn
                anchors.leftMargin:     _margins
                anchors.rightMargin:    _margins
                anchors.left:           parent.left
                anchors.right:          parent.right
                anchors.topMargin:      _margins
                anchors.top:            parent.top
158
                spacing:                ScreenTools.defaultFontPixelHeight * 0.5
Don Gagne's avatar
Don Gagne committed
159 160

                QGCLabel {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
161
                    text:           qsTr("Preferences")
Don Gagne's avatar
Don Gagne committed
162 163
                    anchors.horizontalCenter: parent.horizontalCenter
                }
dogmaphobic's avatar
dogmaphobic committed
164

Don Gagne's avatar
Don Gagne committed
165
                QGCButton {
166
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
167 168
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
169
                    text:           qsTr("General")
Don Gagne's avatar
Don Gagne committed
170 171 172 173 174 175
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "GeneralSettings.qml") {
                            __rightPanel.source = "GeneralSettings.qml"
                        }
                        checked = true
dogmaphobic's avatar
dogmaphobic committed
176 177
                    }
                }
Don Gagne's avatar
Don Gagne committed
178 179

                QGCButton {
180
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
181 182
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
183
                    text:           qsTr("Comm Links")
Don Gagne's avatar
Don Gagne committed
184 185 186 187 188 189
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "LinkSettings.qml") {
                            __rightPanel.source = "LinkSettings.qml"
                        }
                        checked = true
190 191
                    }
                }
Don Gagne's avatar
Don Gagne committed
192 193

                QGCButton {
194
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
195 196
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
197
                    text:           qsTr("Offline Maps")
Don Gagne's avatar
Don Gagne committed
198 199 200 201 202 203
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "OfflineMap.qml") {
                            __rightPanel.source = "OfflineMap.qml"
                        }
                        checked = true
dogmaphobic's avatar
dogmaphobic committed
204 205
                    }
                }
Don Gagne's avatar
Don Gagne committed
206 207

                QGCButton {
208
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
209 210
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
211
                    text:           qsTr("MavLink")
Don Gagne's avatar
Don Gagne committed
212 213 214 215 216 217
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "MavlinkSettings.qml") {
                            __rightPanel.source = "MavlinkSettings.qml"
                        }
                        checked = true
dogmaphobic's avatar
dogmaphobic committed
218 219
                    }
                }
Don Gagne's avatar
Don Gagne committed
220

221
                QGCButton {
222
                    height:         ScreenTools.defaultFontPixelHeight * 2
223 224
                    anchors.left:   parent.left
                    anchors.right:  parent.right
225
                    text:           qsTr("Console")
226 227 228 229 230 231 232 233 234
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "QGroundControl/Controls/AppMessages.qml") {
                            __rightPanel.source = "QGroundControl/Controls/AppMessages.qml"
                        }
                        checked = true
                    }
                }

Don Gagne's avatar
Don Gagne committed
235
                QGCButton {
236
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
237 238
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
239
                    text:           qsTr("Mock Link")
Don Gagne's avatar
Don Gagne committed
240 241 242 243 244 245 246
                    visible:        ScreenTools.isDebug
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "MockLink.qml") {
                            __rightPanel.source = "MockLink.qml"
                        }
                        checked = true
247 248
                    }
                }
Don Gagne's avatar
Don Gagne committed
249 250

                QGCButton {
251
                    height:         ScreenTools.defaultFontPixelHeight * 2
Don Gagne's avatar
Don Gagne committed
252 253
                    anchors.left:   parent.left
                    anchors.right:  parent.right
Tomaz Canabrava's avatar
Tomaz Canabrava committed
254
                    text:           qsTr("Debug")
Don Gagne's avatar
Don Gagne committed
255 256 257 258 259 260 261
                    visible:        ScreenTools.isDebug
                    exclusiveGroup: panelActionGroup
                    onClicked: {
                        if(__rightPanel.source != "DebugWindow.qml") {
                            __rightPanel.source = "DebugWindow.qml"
                        }
                        checked = true
dogmaphobic's avatar
dogmaphobic committed
262 263 264 265 266 267 268 269 270 271 272 273 274
                    }
                }
            }
        }
    }

    //-- Clicking in tool bar area dismiss it all
    MouseArea {
        anchors.top:    parent.top
        anchors.left:   parent.left
        anchors.right:  parent.right
        height:         toolBar.height
        onClicked: {
275 276
            if (!__animateShowDialog.running)
                mainWindow.hideLeftMenu()
dogmaphobic's avatar
dogmaphobic committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
        }
    }

    //-- Vertical Separator
    Rectangle {
        id:             __verticalSeparator
        width:          1
        height:         parent.height - toolBar.height
        anchors.left:   __leftMenu.right
        anchors.bottom: parent.bottom
        color:          QGroundControl.isDarkStyle ? "#909090" : "#7f7f7f"
    }

    //-- Main Setting Display Area
    Rectangle {
292
        id:             settingDisplayArea
dogmaphobic's avatar
dogmaphobic committed
293 294 295 296 297
        anchors.left:   __verticalSeparator.right
        width:          mainWindow.width - __leftMenu.width - __verticalSeparator.width
        height:         parent.height - toolBar.height - __topSeparator.height
        anchors.bottom: parent.bottom
        visible:        __rightPanel.source != ""
298
        color:          qgcPal.window
dogmaphobic's avatar
dogmaphobic committed
299 300 301 302 303 304 305 306 307 308 309 310
        //-- Panel Contents
        Loader {
            id:             __rightPanel
            anchors.fill:   parent
        }
        //-- Dismiss it all
        Item {
            id:              closeButton
            width:           __closeButtonSize
            height:          __closeButtonSize
            anchors.right:   parent.right
            anchors.top:     parent.top
311
            anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5
dogmaphobic's avatar
dogmaphobic committed
312 313 314 315
            QGCColoredImage {
                source:       "/res/XDelete.svg"
                mipmap:       true
                fillMode:     Image.PreserveAspectFit
316
                color:        qgcPal.text
dogmaphobic's avatar
dogmaphobic committed
317 318 319 320 321 322 323
                width:        parent.width  * 0.75
                height:       parent.height * 0.75
                anchors.centerIn: parent
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
324 325 326 327
                    if (!__animateShowDialog.running) {
                        __rightPanel.source = ""
                        mainWindow.hideLeftMenu()
                    }
dogmaphobic's avatar
dogmaphobic committed
328 329 330 331 332 333
                }
            }

        }
    }
}