AirframeComponent.qml 9.5 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
/*=====================================================================

 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.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
27
import QtQuick.Dialogs 1.2
28 29 30 31 32 33

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Controllers 1.0
Don Gagne's avatar
Don Gagne committed
34
import QGroundControl.ScreenTools 1.0
35

Don Gagne's avatar
Don Gagne committed
36
QGCView {
Don Gagne's avatar
Don Gagne committed
37
    id:         qgcView
38
    viewPanel:  panel
39

40
    QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled }
Don Gagne's avatar
Don Gagne committed
41

42 43 44
    AirframeComponentController {
        id:         controller
        factPanel:  panel
45

46 47 48
        Component.onCompleted: {
            if (controller.showCustomConfigPanel) {
                showDialog(customConfigDialogComponent, "Custom Airframe Config", 50, StandardButton.Reset)
49
            }
50 51
        }
    }
52

53 54
    Component {
        id: customConfigDialogComponent
55

56 57
        QGCViewMessage {
            id:             customConfigDialog
Don Gagne's avatar
Don Gagne committed
58

59 60 61
            message:        "Your vehicle is using a custom airframe configuration. " +
                                "This configuration can only be modified through the Parameter Editor.\n\n" +
                                "If you want to Reset your airframe configuration and select a standard configuration, click 'Reset' above."
62

63
            property Fact sys_autostart: controller.getParameterFact(-1, "SYS_AUTOSTART")
64

65 66 67
            function accept() {
                sys_autostart.value = 0
                customConfigDialog.hideDialog()
68
            }
69 70
        }
    }
71

72 73
    Component {
        id: applyRestartDialogComponent
74

75 76
        QGCViewDialog {
            id: applyRestartDialog
77

78 79 80
            function accept() {
                controller.changeAutostart()
                applyRestartDialog.hideDialog()
81 82
            }

83 84 85 86 87 88 89 90 91 92 93 94 95 96
            QGCLabel {
                anchors.fill:   parent
                wrapMode:       Text.WordWrap
                text:           "Clicking Apply will save the changes you have made to your aiframe configuration. " +
                                "Your vehicle will also be rebooted in order to complete the process. " +
                                "After your vehicle reboots, you can reconnect it to QGroundControl."
            }
        }
    }

    QGCViewPanel {
        id:             panel
        anchors.fill:   parent

97 98
        readonly property real spacerHeight: ScreenTools.defaultFontPixelHeight

99 100 101
        QGCLabel {
            id:             header
            width:          parent.width
102
            font.pixelSize: ScreenTools.largeFontPixelSize
103 104 105 106 107 108
            text:           "AIRFRAME CONFIG"
        }

        Item {
            id:             headingSpacer
            anchors.top:    header.bottom
109
            height:         parent.spacerHeight
110 111 112
            width:          20
        }

113 114
        Item {
            id:             helpApplyRow
115
            anchors.top:    headingSpacer.bottom
116 117
            width:          parent.width
            height:         Math.max(helpText.contentHeight, applyButton.height)
118

119 120 121 122 123 124
            QGCLabel {
                id:             helpText
                width:          parent.width - applyButton.width - 5
                text:           "Please select your airframe type. Click 'Apply and Restart' to reboot the autopilot. Please re-connect then manually."
                wrapMode:       Text.WordWrap
            }
125

126 127 128 129 130 131 132
            QGCButton {
                id:             applyButton
                anchors.right:  parent.right
                text:           "Apply and Restart"

                onClicked:      showDialog(applyRestartDialogComponent, "Apply and Restart", 50, StandardButton.Apply | StandardButton.Cancel)
            }
133 134 135 136
        }

        Item {
            id:             lastSpacer
137 138
            anchors.top:    helpApplyRow.bottom
            height:         parent.spacerHeight
139 140 141 142 143 144 145 146 147 148 149 150
            width:          10
        }

        ScrollView {
            id:                         scroll
            anchors.top:                lastSpacer.bottom
            anchors.bottom:             parent.bottom
            width:                      parent.width
            horizontalScrollBarPolicy:  Qt.ScrollBarAlwaysOff

            Flow {
                width:      scroll.width
151
                spacing:    ScreenTools.defaultFontPixelWidth
152 153 154

                ExclusiveGroup {
                    id: airframeTypeExclusive
155
                }
156

157 158
                Repeater {
                    model: controller.airframeTypes
159

160 161
                    // Outer summary item rectangle
                    Rectangle {
162
                        id:     airframeBackground
163 164
                        width:  ScreenTools.defaultFontPixelWidth * 30
                        height: width * .75
165 166
                        color:  (modelData.name != controller.currentAirframeType) ? qgcPal.windowShade : qgcPal.buttonHighlight

167 168 169
                        readonly property real titleHeight: ScreenTools.defaultFontPixelHeight * 1.75
                        readonly property real innerMargin: ScreenTools.defaultFontPixelWidth

170
                        MouseArea {
171 172
                                anchors.fill:   parent
                                onClicked:      airframeCheckBox.checked = true
173
                            }
174

175 176 177 178 179
                        Rectangle {
                            id:     title
                            width:  parent.width
                            height: parent.titleHeight
                            color:  qgcPal.windowShadeDark
180

181 182 183
                            QGCLabel {
                                anchors.fill:           parent
                                color:                  qgcPal.buttonText
184 185
                                verticalAlignment:      TextEdit.AlignVCenter
                                horizontalAlignment:    TextEdit.AlignHCenter
186
                                text:                   modelData.name
187
                            }
188
                        }
189

190
                        Image {
191
                            id:                 image
192 193
                            anchors.topMargin:  innerMargin
                            anchors.top:        title.bottom
194 195 196 197 198 199
                            x:                  innerMargin
                            width:              parent.width - (innerMargin * 2)
                            height:             parent.height - title.height - combo.height - (innerMargin * 3)
                            fillMode:           Image.PreserveAspectFit
                            smooth:             true
                            source:             modelData.imageResource
200 201


202
                        }
203

204 205 206
                        QGCCheckBox {
                            id:             airframeCheckBox
                            anchors.bottom: image.bottom
207
                            anchors.right:  image.right
208 209
                            checked:        modelData.name == controller.currentAirframeType
                            exclusiveGroup: airframeTypeExclusive
210

211 212 213
                            onCheckedChanged: {
                                if (checked && combo.currentIndex != -1) {
                                    controller.autostartId = modelData.airframes[combo.currentIndex].autostartId
214 215 216
                                    airframeBackground.color = qgcPal.buttonHighlight;
                                } else {
                                    airframeBackground.color = qgcPal.windowShade;
217
                                }
218 219
                            }
                        }
220

221
                        QGCComboBox {
222 223 224 225 226 227 228 229
                            id:                 combo
                            objectName:         modelData.airframeType + "ComboBox"
                            x:                  innerMargin
                            anchors.topMargin:  innerMargin
                            anchors.top:        image.bottom
                            width:              parent.width - (innerMargin * 2)
                            currentIndex:       (modelData.name == controller.currentAirframeType) ? controller.currentVehicleIndex : -1
                            model:              modelData.airframes
230

231
                            onActivated: {
232 233 234 235 236
                                if (index != -1) {
                                    currentIndex = index
                                    controller.autostartId = modelData.airframes[index].autostartId
                                    airframeCheckBox.checked = true;
                                }
237
                            }
238 239 240 241 242 243
                        }
                    }
                } // Repeater - summary boxes
            } // Flow - summary boxes
        } // Scroll View - summary boxes
    } // QGCViewPanel
244
} // QGCView