AirframeComponent.qml 9.98 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
            AirframeComponentController {
                id:         controller
                factPanel:  airframePage.viewPanel
67

68 69 70 71 72
                Component.onCompleted: {
                    if (controller.showCustomConfigPanel) {
                        showDialog(customConfigDialogComponent, qsTr("Custom Airframe Config"), qgcView.showDialogDefaultWidth, StandardButton.Reset)
                    }
                }
73 74
            }

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
            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()
                    }
                }
91
            }
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

            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
107 108 109
                        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.")
110 111
                    }
                }
112
            }
113

114 115 116
            Item {
                id:             helpApplyRow
                anchors.left:   parent.left
117
                anchors.right:  parent.right
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
                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")
135

136 137
                    onClicked:      showDialog(applyRestartDialogComponent, qsTr("Apply and Restart"), qgcView.showDialogDefaultWidth, StandardButton.Apply | StandardButton.Cancel)
                }
138
            }
dogmaphobic's avatar
dogmaphobic committed
139

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

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

                ExclusiveGroup {
                    id: airframeTypeExclusive
153
                }
154

155 156
                Repeater {
                    model: controller.airframeTypes
157

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

164 165 166
                        readonly property real titleHeight: ScreenTools.defaultFontPixelHeight * 1.75
                        readonly property real innerMargin: ScreenTools.defaultFontPixelWidth

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

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

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

Don Gagne's avatar
Don Gagne committed
181 182
                        Rectangle {
                            anchors.topMargin:  ScreenTools.defaultFontPixelHeight / 2
183
                            anchors.top:        title.bottom
Don Gagne's avatar
Don Gagne committed
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
                            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
                            }
201

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

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

Don Gagne's avatar
Don Gagne committed
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
                            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
234
                                    airframeCheckBox.checked = true;
Don Gagne's avatar
Don Gagne committed
235 236
                                    console.log("combo change", index)
                                    controller.autostartId = modelData.airframes[index].autostartId
237
                                }
238
                            }
239 240 241 242
                        }
                    }
                } // Repeater - summary boxes
            } // Flow - summary boxes
243 244 245
        } // Column
    } // Component
} // SetupPage