SafetyComponent.qml 13.4 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
            //-----------------------------------------------------------------
            //-- Return Home Triggers
Don Gagne's avatar
Don Gagne committed
61

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

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

Don Gagne's avatar
Don Gagne committed
66 67 68 69
            Rectangle {
                width: parent.width
                height: triggerColumn.height
                color: palette.windowShade
Don Gagne's avatar
Don Gagne committed
70

Don Gagne's avatar
Don Gagne committed
71 72 73 74 75
                Column {
                    id: triggerColumn
                    spacing: controlVerticalSpacing
                    anchors.margins: shadedMargin
                    anchors.left: parent.left
Don Gagne's avatar
Don Gagne committed
76

Don Gagne's avatar
Don Gagne committed
77 78
                    // Top margin
                    Item { height: 1; width: 10 }
Don Gagne's avatar
Don Gagne committed
79

Don Gagne's avatar
Don Gagne committed
80 81 82 83 84 85 86 87 88
                    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
89
                    }
Don Gagne's avatar
Don Gagne committed
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

                    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
109 110
                    }

Don Gagne's avatar
Don Gagne committed
111 112 113
                    // Bottom margin
                    Item { height: 1; width: 10 }
                }
114
            }
Don Gagne's avatar
Don Gagne committed
115

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

Don Gagne's avatar
Don Gagne committed
118 119
            //-----------------------------------------------------------------
            //-- Return Home Settings
Don Gagne's avatar
Don Gagne committed
120

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

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

Don Gagne's avatar
Don Gagne committed
125 126 127 128
            Rectangle {
                width:  parent.width
                height: settingsColumn.height
                color:  palette.windowShade
Don Gagne's avatar
Don Gagne committed
129

Don Gagne's avatar
Don Gagne committed
130 131 132 133 134
                Column {
                    id:                 settingsColumn
                    width:              parent.width
                    anchors.margins:    shadedMargin
                    anchors.left:       parent.left
Don Gagne's avatar
Don Gagne committed
135

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

Don Gagne's avatar
Don Gagne committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
                    // 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
153 154 155
                        }


Don Gagne's avatar
Don Gagne committed
156 157 158
                        Column {
                            x:          flightGraphic.width - 200
                            spacing:    controlVerticalSpacing
Don Gagne's avatar
Don Gagne committed
159

Don Gagne's avatar
Don Gagne committed
160 161 162 163
                            QGCCheckBox {
                                id:         homeLoiterCheckbox
                                checked:    fact.value > 0
                                text:       "Loiter at Home altitude for"
Don Gagne's avatar
Don Gagne committed
164

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

Don Gagne's avatar
Don Gagne committed
167 168 169
                                onClicked: {
                                    fact.value = checked ? 60 : -1
                                }
Don Gagne's avatar
Don Gagne committed
170
                            }
Don Gagne's avatar
Don Gagne committed
171

Don Gagne's avatar
Don Gagne committed
172 173 174 175 176
                            FactTextField {
                                fact:       controller.getParameterFact(-1, "RTL_LAND_DELAY")
                                showUnits:  true
                                enabled:    homeLoiterCheckbox.checked == true
                            }
177 178
                        }
                    }
Don Gagne's avatar
Don Gagne committed
179

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

Don Gagne's avatar
Don Gagne committed
182 183 184 185
                    // 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
186

Don Gagne's avatar
Don Gagne committed
187 188 189 190 191
                        // 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
192

Don Gagne's avatar
Don Gagne committed
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
                            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
211

Don Gagne's avatar
Don Gagne committed
212 213 214 215 216 217 218 219 220 221
                            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
222

Don Gagne's avatar
Don Gagne committed
223 224 225 226 227 228 229 230 231 232
                            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
233

Don Gagne's avatar
Don Gagne committed
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
                            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
255

Don Gagne's avatar
Don Gagne committed
256 257 258 259 260 261 262 263 264 265 266
                            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
267 268
                        }

Don Gagne's avatar
Don Gagne committed
269 270
                        Column {
                            spacing: controlVerticalSpacing
Don Gagne's avatar
Don Gagne committed
271

Don Gagne's avatar
Don Gagne committed
272 273 274 275 276 277 278 279 280 281 282
                            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
283 284 285
                        }
                    }

Don Gagne's avatar
Don Gagne committed
286 287
                    Item { height: shadedMargin; width: 10 } // bottom margin
                }
288 289
            }

Don Gagne's avatar
Don Gagne committed
290 291 292 293 294 295
            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
296

Don Gagne's avatar
Don Gagne committed
297 298
                property Fact fact: controller.getParameterFact(-1, "NAV_RCL_OBC")
            }
Don Gagne's avatar
Don Gagne committed
299

Don Gagne's avatar
Don Gagne committed
300 301 302 303 304 305
            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
306

Don Gagne's avatar
Don Gagne committed
307 308
                property Fact fact: controller.getParameterFact(-1, "NAV_DLL_OBC")
            }
309
        }
Don Gagne's avatar
Don Gagne committed
310
    } // QGCVIew
Don Gagne's avatar
Don Gagne committed
311
}