SafetyComponent.qml 13.6 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
/*=====================================================================

 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/>.

 ======================================================================*/

Don Gagne's avatar
Don Gagne committed
24 25 26
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
27

Don Gagne's avatar
Don Gagne committed
28
import QGroundControl.FactSystem 1.0
29
import QGroundControl.FactControls 1.0
30
import QGroundControl.Palette 1.0
Don Gagne's avatar
Don Gagne committed
31
import QGroundControl.Controls 1.0
32
import QGroundControl.ScreenTools 1.0
Don Gagne's avatar
Don Gagne committed
33

Don Gagne's avatar
Don Gagne committed
34 35 36
QGCView {
    id:         rootQGCView
    viewPanel:  view
Don Gagne's avatar
Don Gagne committed
37

38
    QGCPalette { id: palette; colorGroupEnabled: enabled }
Don Gagne's avatar
Don Gagne committed
39
    FactPanelController { id: controller; factPanel: rootQGCView }
Don Gagne's avatar
Don Gagne committed
40 41 42 43 44 45 46 47 48 49

    property int flightLineWidth: 2             // width of lines for flight graphic
    property int loiterAltitudeColumnWidth: 180 // width of loiter altitude column
    property int shadedMargin: 20               // margin inset for shaded areas
    property int controlVerticalSpacing: 10     // vertical spacing between controls
    property int homeWidth: 50                  // width of home graphic
    property int planeWidth: 40                 // width of plane graphic
    property int arrowToHomeSpacing: 20         // space between down arrow and home graphic
    property int arrowWidth: 18                 // width for arrow graphic
    property int firstColumnWidth: 220          // Width of first column in return home triggers area
Don Gagne's avatar
Don Gagne committed
50

Don Gagne's avatar
Don Gagne committed
51 52 53
    QGCView {
        id: view

54
        anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
55

Don Gagne's avatar
Don Gagne committed
56 57
        Column {
            anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
58

Don Gagne's avatar
Don Gagne committed
59 60 61 62
            QGCLabel {
                text:           "SAFETY CONFIG"
                font.pixelSize: ScreenTools.largeFontPixelSize
            }
Don Gagne's avatar
Don Gagne committed
63

Don Gagne's avatar
Don Gagne committed
64
            Item { height: 20; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
65

Don Gagne's avatar
Don Gagne committed
66 67
            //-----------------------------------------------------------------
            //-- Return Home Triggers
Don Gagne's avatar
Don Gagne committed
68

Don Gagne's avatar
Don Gagne committed
69
            QGCLabel { text: "Triggers For Return Home"; font.pixelSize: ScreenTools.mediumFontPixelSize; }
Don Gagne's avatar
Don Gagne committed
70

Don Gagne's avatar
Don Gagne committed
71
            Item { height: 10; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
72

Don Gagne's avatar
Don Gagne committed
73 74 75 76
            Rectangle {
                width: parent.width
                height: triggerColumn.height
                color: palette.windowShade
Don Gagne's avatar
Don Gagne committed
77

Don Gagne's avatar
Don Gagne committed
78 79 80 81 82
                Column {
                    id: triggerColumn
                    spacing: controlVerticalSpacing
                    anchors.margins: shadedMargin
                    anchors.left: parent.left
Don Gagne's avatar
Don Gagne committed
83

Don Gagne's avatar
Don Gagne committed
84 85
                    // Top margin
                    Item { height: 1; width: 10 }
Don Gagne's avatar
Don Gagne committed
86

Don Gagne's avatar
Don Gagne committed
87 88 89 90 91 92 93 94 95
                    Row {
                        spacing: 10
                        QGCLabel { text: "RC Transmitter Signal Loss"; width: firstColumnWidth; anchors.baseline: rcLossField.baseline }
                        QGCLabel { text: "Return Home after"; anchors.baseline: rcLossField.baseline }
                        FactTextField {
                            id:         rcLossField
                            fact:       controller.getParameterFact(-1, "COM_RC_LOSS_T")
                            showUnits:  true
                        }
Don Gagne's avatar
Don Gagne committed
96
                    }
Don Gagne's avatar
Don Gagne committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115

                    Row {
                        spacing: 10
                        FactCheckBox {
                            id:                 telemetryTimeoutCheckbox
                            anchors.baseline:   telemetryLossField.baseline
                            width:              firstColumnWidth
                            fact:               controller.getParameterFact(-1, "COM_DL_LOSS_EN")
                            checkedValue:       1
                            uncheckedValue:     0
                            text:               "Telemetry Signal Timeout"
                        }
                        QGCLabel { text: "Return Home after"; anchors.baseline: telemetryLossField.baseline }
                        FactTextField {
                            id:         telemetryLossField
                            fact:       controller.getParameterFact(-1, "COM_DL_LOSS_T")
                            showUnits:  true
                            enabled:    telemetryTimeoutCheckbox.checked
                        }
Don Gagne's avatar
Don Gagne committed
116 117
                    }

Don Gagne's avatar
Don Gagne committed
118 119 120
                    // Bottom margin
                    Item { height: 1; width: 10 }
                }
121
            }
Don Gagne's avatar
Don Gagne committed
122

Don Gagne's avatar
Don Gagne committed
123
            Item { height: 20; width: 10 }    // spacer
Don Gagne's avatar
Don Gagne committed
124

Don Gagne's avatar
Don Gagne committed
125 126
            //-----------------------------------------------------------------
            //-- Return Home Settings
Don Gagne's avatar
Don Gagne committed
127

Don Gagne's avatar
Don Gagne committed
128
            QGCLabel { text: "Return Home Settings"; font.pixelSize: ScreenTools.mediumFontPixelSize; }
Don Gagne's avatar
Don Gagne committed
129

Don Gagne's avatar
Don Gagne committed
130
            Item { height: 10; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
131

Don Gagne's avatar
Don Gagne committed
132 133 134 135
            Rectangle {
                width:  parent.width
                height: settingsColumn.height
                color:  palette.windowShade
Don Gagne's avatar
Don Gagne committed
136

Don Gagne's avatar
Don Gagne committed
137 138 139 140 141
                Column {
                    id:                 settingsColumn
                    width:              parent.width
                    anchors.margins:    shadedMargin
                    anchors.left:       parent.left
Don Gagne's avatar
Don Gagne committed
142

Don Gagne's avatar
Don Gagne committed
143
                    Item { height: shadedMargin; width: 10 } // top margin
Don Gagne's avatar
Don Gagne committed
144

Don Gagne's avatar
Don Gagne committed
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
                    // This item is the holder for the climb alt and loiter seconds fields
                    Item {
                        width:  parent.width
                        height: climbAltitudeColumn.height

                        Column {
                            id:         climbAltitudeColumn
                            spacing:    controlVerticalSpacing

                            QGCLabel { text: "Climb to altitude of" }
                            FactTextField {
                                id:         climbField
                                fact:       controller.getParameterFact(-1, "RTL_RETURN_ALT")
                                showUnits:  true
                            }
Don Gagne's avatar
Don Gagne committed
160 161 162
                        }


Don Gagne's avatar
Don Gagne committed
163 164 165
                        Column {
                            x:          flightGraphic.width - 200
                            spacing:    controlVerticalSpacing
Don Gagne's avatar
Don Gagne committed
166

Don Gagne's avatar
Don Gagne committed
167 168 169 170
                            QGCCheckBox {
                                id:         homeLoiterCheckbox
                                checked:    fact.value > 0
                                text:       "Loiter at Home altitude for"
Don Gagne's avatar
Don Gagne committed
171

Don Gagne's avatar
Don Gagne committed
172
                                property Fact fact: controller.getParameterFact(-1, "RTL_LAND_DELAY")
173

Don Gagne's avatar
Don Gagne committed
174 175 176
                                onClicked: {
                                    fact.value = checked ? 60 : -1
                                }
Don Gagne's avatar
Don Gagne committed
177
                            }
Don Gagne's avatar
Don Gagne committed
178

Don Gagne's avatar
Don Gagne committed
179 180 181 182 183
                            FactTextField {
                                fact:       controller.getParameterFact(-1, "RTL_LAND_DELAY")
                                showUnits:  true
                                enabled:    homeLoiterCheckbox.checked == true
                            }
184 185
                        }
                    }
Don Gagne's avatar
Don Gagne committed
186

Don Gagne's avatar
Don Gagne committed
187
                    Item { height: 20; width: 10 }    // spacer
Don Gagne's avatar
Don Gagne committed
188

Don Gagne's avatar
Don Gagne committed
189 190 191 192
                    // This row holds the flight graphic and the home loiter alt column
                    Row {
                        width:      parent.width
                        spacing:    20
Don Gagne's avatar
Don Gagne committed
193

Don Gagne's avatar
Don Gagne committed
194 195 196 197 198
                        // Flight graphic
                        Item {
                            id:     flightGraphic
                            width:  parent.width - loiterAltitudeColumnWidth
                            height: 200 // controls the height of the flight graphic
Don Gagne's avatar
Don Gagne committed
199

Don Gagne's avatar
Don Gagne committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
                            Rectangle {
                                x:      planeWidth / 2
                                height: planeImage.y - 5
                                width:  flightLineWidth
                                color:  palette.button
                            }
                            Rectangle {
                                x:      planeWidth / 2
                                height: flightLineWidth
                                width:  parent.width - x
                                color:  palette.button
                            }
                            Rectangle {
                                x:      parent.width - flightLineWidth
                                height: parent.height - homeWidth - arrowToHomeSpacing
                                width:  flightLineWidth
                                color:  palette.button
                            }
Don Gagne's avatar
Don Gagne committed
218

Don Gagne's avatar
Don Gagne committed
219 220 221 222 223 224 225 226 227 228
                            QGCColoredImage {
                                id:         planeImage
                                y:          parent.height - planeWidth - 40
                                source:     "/qmlimages/SafetyComponentPlane.png"
                                fillMode:   Image.PreserveAspectFit
                                width:      planeWidth
                                height:     planeWidth
                                smooth:     true
                                color:      palette.button
                            }
Don Gagne's avatar
Don Gagne committed
229

Don Gagne's avatar
Don Gagne committed
230 231 232 233 234 235 236 237 238 239
                            QGCColoredImage {
                                x:          planeWidth + 70
                                y:          parent.height - height - 20
                                width:      80
                                height:     parent.height / 2
                                source:     "/qmlimages/SafetyComponentTree.svg"
                                fillMode:   Image.Stretch
                                smooth:     true
                                color:      palette.windowShadeDark
                            }
Don Gagne's avatar
Don Gagne committed
240

Don Gagne's avatar
Don Gagne committed
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
                            QGCColoredImage {
                                x:          planeWidth + 15
                                y:          parent.height - height
                                width:      100
                                height:     parent.height * .75
                                source:     "/qmlimages/SafetyComponentTree.svg"
                                fillMode:   Image.PreserveAspectFit
                                smooth:     true
                                color:      palette.button
                            }

                            QGCColoredImage {
                                x:          parent.width - (arrowWidth/2) - 1
                                y:          parent.height - homeWidth - arrowToHomeSpacing - 2
                                source:     "/qmlimages/SafetyComponentArrowDown.png"
                                fillMode:   Image.PreserveAspectFit
                                width:      arrowWidth
                                height:     arrowWidth
                                smooth:     true
                                color:      palette.button
                            }
Don Gagne's avatar
Don Gagne committed
262

Don Gagne's avatar
Don Gagne committed
263 264 265 266 267 268 269 270 271 272 273
                            QGCColoredImage {
                                id:         homeImage
                                x:          parent.width - (homeWidth / 2)
                                y:          parent.height - homeWidth
                                source:     "/qmlimages/SafetyComponentHome.png"
                                fillMode:   Image.PreserveAspectFit
                                width:      homeWidth
                                height:     homeWidth
                                smooth:     true
                                color:  palette.button
                            }
Don Gagne's avatar
Don Gagne committed
274 275
                        }

Don Gagne's avatar
Don Gagne committed
276 277
                        Column {
                            spacing: controlVerticalSpacing
Don Gagne's avatar
Don Gagne committed
278

Don Gagne's avatar
Don Gagne committed
279 280 281 282 283 284 285 286 287 288 289
                            QGCLabel {
                                text:       "Home loiter altitude";
                                color:      palette.text;
                                enabled:    homeLoiterCheckbox.checked === true
                            }
                            FactTextField {
                                id:         descendField;
                                fact:       controller.getParameterFact(-1, "RTL_DESCEND_ALT")
                                enabled:    homeLoiterCheckbox.checked === true
                                showUnits:  true
                            }
Don Gagne's avatar
Don Gagne committed
290 291 292
                        }
                    }

Don Gagne's avatar
Don Gagne committed
293 294
                    Item { height: shadedMargin; width: 10 } // bottom margin
                }
295 296
            }

Don Gagne's avatar
Don Gagne committed
297 298 299 300 301 302
            QGCLabel {
                width:          parent.width
                font.pixelSize: ScreenTools.mediumFontPixelSize
                text:           "Warning: You have an advanced safety configuration set using the NAV_RCL_OBC parameter. The above settings may not apply.";
                visible:        fact.value !== 0
                wrapMode:       Text.Wrap
Don Gagne's avatar
Don Gagne committed
303

Don Gagne's avatar
Don Gagne committed
304 305
                property Fact fact: controller.getParameterFact(-1, "NAV_RCL_OBC")
            }
Don Gagne's avatar
Don Gagne committed
306

Don Gagne's avatar
Don Gagne committed
307 308 309 310 311 312
            QGCLabel {
                width:          parent.width
                font.pixelSize: ScreenTools.mediumFontPixelSize
                text:           "Warning: You have an advanced safety configuration set using the NAV_DLL_OBC parameter. The above settings may not apply.";
                visible:        fact.value !== 0
                wrapMode:       Text.Wrap
Don Gagne's avatar
Don Gagne committed
313

Don Gagne's avatar
Don Gagne committed
314 315
                property Fact fact: controller.getParameterFact(-1, "NAV_DLL_OBC")
            }
316
        }
Don Gagne's avatar
Don Gagne committed
317
    } // QGCVIew
Don Gagne's avatar
Don Gagne committed
318
}