AirframeComponent.qml 9.97 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 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.
 *
 ****************************************************************************/
9 10


11 12
import QtQuick 2.3
import QtQuick.Controls 1.2
13
import QtQuick.Controls.Styles 1.4
14
import QtQuick.Dialogs 1.2
15 16 17 18 19 20

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
21
import QGroundControl.ScreenTools 1.0
22

23 24 25
SetupPage {
    id:             airframePage
    pageComponent:  pageComponent
26

27
    Component {
28
        id: pageComponent
29

30 31 32
        Column {
            id:     mainColumn
            width:  availableWidth
33

34 35 36
            property real _minW:        ScreenTools.defaultFontPixelWidth * 30
            property real _boxWidth:    _minW
            property real _boxSpace:    ScreenTools.defaultFontPixelWidth
37

38 39 40 41
            readonly property real spacerHeight: ScreenTools.defaultFontPixelHeight

            onWidthChanged: {
                computeDimensions()
42 43
            }

44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
            Component.onCompleted: computeDimensions()

            function computeDimensions() {
                var sw  = 0
                var rw  = 0
                var idx = Math.floor(mainColumn.width / (_minW + ScreenTools.defaultFontPixelWidth))
                if(idx < 1) {
                    _boxWidth = mainColumn.width
                    _boxSpace = 0
                } else {
                    _boxSpace = 0
                    if(idx > 1) {
                        _boxSpace = ScreenTools.defaultFontPixelWidth
                        sw = _boxSpace * (idx - 1)
                    }
                    rw = mainColumn.width - sw
                    _boxWidth = rw / idx
                }
            }
63

64 65 66 67
            AirframeComponentController {
                id:         controller
                Component.onCompleted: {
                    if (controller.showCustomConfigPanel) {
68
                        mainWindow.showComponentDialog(customConfigDialogComponent, qsTr("Custom Airframe Config"), mainWindow.showDialogDefaultWidth, StandardButton.Reset)
69 70
                    }
                }
71 72
            }

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
            Component {
                id: customConfigDialogComponent

                QGCViewMessage {
                    id:       customConfigDialog
                    message:  qsTr("Your vehicle is using a custom airframe configuration. ") +
                              qsTr("This configuration can only be modified through the Parameter Editor.\n\n") +
                              qsTr("If you want to reset your airframe configuration and select a standard configuration, click 'Reset' above.")

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

                    function accept() {
                        sys_autostart.value = 0
                        customConfigDialog.hideDialog()
                    }
                }
89
            }
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

            Component {
                id: applyRestartDialogComponent

                QGCViewDialog {
                    id: applyRestartDialog

                    function accept() {
                        controller.changeAutostart()
                        applyRestartDialog.hideDialog()
                    }

                    QGCLabel {
                        anchors.fill:   parent
                        wrapMode:       Text.WordWrap
Don Gagne's avatar
Don Gagne committed
105 106 107
                        text:           qsTr("Clicking “Apply” will save the changes you have made to your airframe configuration.<br><br>\
All vehicle parameters other than Radio Calibration will be reset.<br><br>\
Your vehicle will also be restarted in order to complete the process.")
108 109
                    }
                }
110
            }
111

112 113 114
            Item {
                id:             helpApplyRow
                anchors.left:   parent.left
115
                anchors.right:  parent.right
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
                height:         Math.max(helpText.contentHeight, applyButton.height)

                QGCLabel {
                    id:             helpText
                    width:          parent.width - applyButton.width - 5
                    text:           (controller.currentVehicleName != "" ?
                                         qsTr("You've connected a %1.").arg(controller.currentVehicleName) :
                                         qsTr("Airframe is not set.")) +
                                    qsTr("To change this configuration, select the desired airframe below then click “Apply and Restart”.")
                    font.family:    ScreenTools.demiboldFontFamily
                    wrapMode:       Text.WordWrap
                }

                QGCButton {
                    id:             applyButton
                    anchors.right:  parent.right
                    text:           qsTr("Apply and Restart")
133

134
                    onClicked:      mainWindow.showComponentDialog(applyRestartDialogComponent, qsTr("Apply and Restart"), mainWindow.showDialogDefaultWidth, StandardButton.Apply | StandardButton.Cancel)
135
                }
136
            }
dogmaphobic's avatar
dogmaphobic committed
137

138 139 140 141
            Item {
                id:             lastSpacer
                height:         parent.spacerHeight
                width:          10
dogmaphobic's avatar
dogmaphobic committed
142
            }
143 144

            Flow {
dogmaphobic's avatar
dogmaphobic committed
145
                id:         flowView
146
                width:      parent.width
dogmaphobic's avatar
dogmaphobic committed
147
                spacing:    _boxSpace
148 149 150

                ExclusiveGroup {
                    id: airframeTypeExclusive
151
                }
152

153 154
                Repeater {
                    model: controller.airframeTypes
155

156 157
                    // Outer summary item rectangle
                    Rectangle {
dogmaphobic's avatar
dogmaphobic committed
158
                        width:  _boxWidth
dogmaphobic's avatar
dogmaphobic committed
159
                        height: ScreenTools.defaultFontPixelHeight * 14
Don Gagne's avatar
Don Gagne committed
160
                        color:  qgcPal.window
161

162 163 164
                        readonly property real titleHeight: ScreenTools.defaultFontPixelHeight * 1.75
                        readonly property real innerMargin: ScreenTools.defaultFontPixelWidth

165
                        MouseArea {
Don Gagne's avatar
Don Gagne committed
166 167 168 169 170
                            anchors.fill: parent

                            onClicked: {
                                applyButton.primary = true
                                airframeCheckBox.checked = true
171
                            }
Don Gagne's avatar
Don Gagne committed
172
                        }
173

Don Gagne's avatar
Don Gagne committed
174
                        QGCLabel {
175
                            id:     title
Don Gagne's avatar
Don Gagne committed
176
                            text:   modelData.name
177
                        }
178

Don Gagne's avatar
Don Gagne committed
179 180
                        Rectangle {
                            anchors.topMargin:  ScreenTools.defaultFontPixelHeight / 2
181
                            anchors.top:        title.bottom
Don Gagne's avatar
Don Gagne committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
                            anchors.bottom:     parent.bottom
                            anchors.left:       parent.left
                            anchors.right:      parent.right
                            color:              airframeCheckBox.checked ? qgcPal.buttonHighlight : qgcPal.windowShade

                            Image {
                                id:                 image
                                anchors.margins:    innerMargin
                                anchors.top:        parent.top
                                anchors.bottom:     combo.top
                                anchors.left:       parent.left
                                anchors.right:      parent.right
                                fillMode:           Image.PreserveAspectFit
                                smooth:             true
                                mipmap:             true
                                source:             modelData.imageResource
                            }
199

Don Gagne's avatar
Don Gagne committed
200 201 202
                            QGCCheckBox {
                                // Although this item is invisible we still use it to manage state
                                id:             airframeCheckBox
203
                                checked:        modelData.name === controller.currentAirframeType
Don Gagne's avatar
Don Gagne committed
204 205 206 207
                                exclusiveGroup: airframeTypeExclusive
                                visible:        false

                                onCheckedChanged: {
208
                                    if (checked && combo.currentIndex !== -1) {
Don Gagne's avatar
Don Gagne committed
209
                                        console.log("check box change", combo.currentIndex)
Don Gagne's avatar
Don Gagne committed
210 211
                                        controller.autostartId = modelData.airframes[combo.currentIndex].autostartId
                                    }
212
                                }
213
                            }
214

Don Gagne's avatar
Don Gagne committed
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
                            QGCComboBox {
                                id:                 combo
                                objectName:         modelData.airframeType + "ComboBox"
                                anchors.margins:    innerMargin
                                anchors.bottom:     parent.bottom
                                anchors.left:       parent.left
                                anchors.right:      parent.right
                                model:              modelData.airframes

                                Component.onCompleted: {
                                    if (airframeCheckBox.checked) {
                                        currentIndex = controller.currentVehicleIndex
                                    }
                                }

                                onActivated: {
                                    applyButton.primary = true
232
                                    airframeCheckBox.checked = true;
Don Gagne's avatar
Don Gagne committed
233 234
                                    console.log("combo change", index)
                                    controller.autostartId = modelData.airframes[index].autostartId
235
                                }
236
                            }
237 238 239 240
                        }
                    }
                } // Repeater - summary boxes
            } // Flow - summary boxes
241 242 243
        } // Column
    } // Component
} // SetupPage