AirframeComponent.qml 9.79 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


dogmaphobic's avatar
dogmaphobic committed
11
import QtQuick 2.5
12 13
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
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 107 108 109 110

            Component {
                id: applyRestartDialogComponent

                QGCViewDialog {
                    id: applyRestartDialog

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

                    QGCLabel {
                        anchors.fill:   parent
                        wrapMode:       Text.WordWrap
                        text:           qsTr("Clicking “Apply” will save the changes you have made to your airframe configuration. ") +
                                        qsTr("Your vehicle will also be restarted in order to complete the process.")
                    }
                }
111
            }
112

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

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

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

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

                ExclusiveGroup {
                    id: airframeTypeExclusive
152
                }
153

154 155
                Repeater {
                    model: controller.airframeTypes
156

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

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

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

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

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

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

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

                                onCheckedChanged: {
                                    if (checked && combo.currentIndex != -1) {
                                        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 233 234
                                    controller.autostartId = modelData.airframes[index].autostartId
                                    airframeCheckBox.checked = true;
                                }
235
                            }
236 237 238 239
                        }
                    }
                } // Repeater - summary boxes
            } // Flow - summary boxes
240 241 242
        } // Column
    } // Component
} // SetupPage