SetupView.qml 7.12 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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
/*=====================================================================

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 Setup View
///     @author Don Gagne <don@thegagnes.com>

import QtQuick 2.3
import QtQuick.Controls 1.2

import QGroundControl.AutoPilotPlugin 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0

Rectangle {
    id:     topLevel
    color:  palette.window

    QGCPalette { id: palette; colorGroupEnabled: true }

    ExclusiveGroup { id: setupButtonGroup }

    QGCLabel { id: _textMeasure; text: "X"; visible: false }

    readonly property real defaultTextHeight:   _textMeasure.contentHeight
    readonly property real defaultTextWidth:    _textMeasure.contentWidth
    readonly property real buttonWidth:         defaultTextWidth * 15

    property string messagePanelText:           "missing message panel text"
    readonly property string armedVehicleText:  "This operation cannot be performed while vehicle is armed."

    function showSummaryPanel()
    {
        if (controller.autopilot) {
            panelLoader.source = "VehicleSummary.qml";
        } else {
            panelLoader.sourceComponent = disconnectedVehicleSummaryComponent
        }
    }

    function showFirmwarePanel()
    {
        if (controller.showFirmware) {
            if (controller.autopilot && controller.autopilot.armed) {
                messagePanelText = armedVehicleText
                panelLoader.sourceComponent = messagePanelComponent
            } else {
                panelLoader.source = "FirmwareUpgrade.qml";
            }
        }
    }

    function showParametersPanel()
    {
        panelLoader.source = "SetupParameterEditor.qml";
    }

Don Gagne's avatar
Don Gagne committed
79
    function showVehicleComponentPanel(vehicleComponent)
80 81 82 83 84
    {
        if (controller.autopilot.armed) {
            messagePanelText = armedVehicleText
            panelLoader.sourceComponent = messagePanelComponent
        } else {
Don Gagne's avatar
Don Gagne committed
85 86 87 88 89 90
            if (vehicleComponent.prerequisiteSetup != "") {
                messagePanelText = vehicleComponent.prerequisiteSetup + " setup must be completed prior to " + vehicleComponent.name + " setup."
                panelLoader.sourceComponent = messagePanelComponent
            } else {
                panelLoader.source = vehicleComponent.setupSource
            }
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
        }
    }

    Connections {
        target: controller

        onAutopilotChanged: {
            summaryButton.checked = true
            showSummaryPanel()
        }
    }

    Component.onCompleted: showSummaryPanel()

    Component {
        id: disconnectedVehicleSummaryComponent

        Rectangle {
            color: palette.windowShade

            QGCLabel {
                anchors.margins:        defaultTextWidth * 2
                anchors.fill:           parent
                verticalAlignment:      Text.AlignVCenter
                horizontalAlignment:    Text.AlignHCenter
                wrapMode:               Text.WordWrap
117
                font.pixelSize:         ScreenTools.mediumFontPixelSize
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
                text:                   "Welcome to QGroundControl. " +
                                            "QGroundControl supports any <font color=\"orange\"><a href=\"http://www.qgroundcontrol.org/mavlink/start\">mavlink</a></font> enabled vehicle. " +
                                            "If you are using the <font color=\"orange\"><a href=\"https://pixhawk.org/choice\">PX4 Flight Stack</a></font>, you also get full support for setting up and calibrating your vehicle. "+
                                            "Otherwise you will only get support for flying a vehicle which has been setup and calibrated using other means. " +
                                            "Use the Connect button above to connect to your vehicle."

                onLinkActivated: Qt.openUrlExternally(link)
            }
        }
    }

    Component {
        id: messagePanelComponent

        Item {
            QGCLabel {
Don Gagne's avatar
Don Gagne committed
134 135 136 137 138
                anchors.margins:        defaultTextWidth * 2
                anchors.fill:           parent
                verticalAlignment:      Text.AlignVCenter
                horizontalAlignment:    Text.AlignHCenter
                wrapMode:               Text.WordWrap
139
                font.pixelSize:         ScreenTools.mediumFontPixelSize
Don Gagne's avatar
Don Gagne committed
140
                text:                   messagePanelText
141 142 143 144 145 146 147 148 149 150 151
            }
        }
    }

    Column {
        id:     buttonColumn
        width:  buttonWidth

        SubMenuButton {
            id:             summaryButton
            width:          buttonWidth
152
            imageResource: "/qmlimages/VehicleSummaryIcon.png"
153 154 155 156 157 158 159 160 161 162
            setupIndicator: false
            exclusiveGroup: setupButtonGroup
            text:           "SUMMARY"

            onClicked: showSummaryPanel()
        }

        SubMenuButton {
            id:             firmwareButton
            width:          buttonWidth
163
            imageResource:  "/qmlimages/FirmwareUpgradeIcon.png"
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
            setupIndicator: false
            exclusiveGroup: setupButtonGroup
            visible:        controller.showFirmware
            text:           "FIRMWARE"

            onClicked: showFirmwarePanel()
        }

        Repeater {
            model: controller.autopilot ? controller.autopilot.vehicleComponents : 0

            SubMenuButton {
                width:          buttonWidth
                imageResource:  modelData.iconResource
                setupComplete:  modelData.setupComplete
                exclusiveGroup: setupButtonGroup
                text:           modelData.name.toUpperCase()

Don Gagne's avatar
Don Gagne committed
182
                onClicked: showVehicleComponentPanel(modelData)
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
            }
        }

        SubMenuButton {
            width:          buttonWidth
            setupIndicator: false
            exclusiveGroup: setupButtonGroup
            visible:        controller.autopilot
            text:           "PARAMETERS"

            onClicked: showParametersPanel()
        }
    } // Column

    Loader {
        id:                     panelLoader
        anchors.leftMargin:     defaultTextWidth
        anchors.rightMargin:    defaultTextWidth
        anchors.left:           buttonColumn.right
        anchors.right:          parent.right
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom

        property var autopilot: controller.autopilot
    }
}