QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
APMSafetyComponent.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4
5import QGroundControl
6import QGroundControl.FactControls
7import QGroundControl.Controls
8
9SetupPage {
10 id: safetyPage
11 pageComponent: safetyPageComponent
12
13 Component {
14 id: safetyPageComponent
15
16 Flow {
17 id: flowLayout
18 width: availableWidth
19 spacing: _margins
20
21 FactPanelController { id: controller; }
22
23 QGCPalette { id: qgcPal; colorGroupEnabled: true }
24
25 property Fact _batt1Monitor: controller.getParameterFact(-1, "BATT_MONITOR")
26 property Fact _batt2Monitor: controller.getParameterFact(-1, "BATT2_MONITOR", false /* reportMissing */)
27 property bool _batt2MonitorAvailable: controller.parameterExists(-1, "BATT2_MONITOR")
28 property bool _batt1MonitorEnabled: _batt1Monitor.rawValue !== 0
29 property bool _batt2MonitorEnabled: _batt2MonitorAvailable ? _batt2Monitor.rawValue !== 0 : false
30 property bool _batt1ParamsAvailable: controller.parameterExists(-1, "BATT_CAPACITY")
31 property bool _batt2ParamsAvailable: controller.parameterExists(-1, "BATT2_CAPACITY")
32
33 property Fact _failsafeBatt1LowAct: controller.getParameterFact(-1, "BATT_FS_LOW_ACT", false /* reportMissing */)
34 property Fact _failsafeBatt2LowAct: controller.getParameterFact(-1, "BATT2_FS_LOW_ACT", false /* reportMissing */)
35 property Fact _failsafeBatt1CritAct: controller.getParameterFact(-1, "BATT_FS_CRT_ACT", false /* reportMissing */)
36 property Fact _failsafeBatt2CritAct: controller.getParameterFact(-1, "BATT2_FS_CRT_ACT", false /* reportMissing */)
37 property Fact _failsafeBatt1LowMah: controller.getParameterFact(-1, "BATT_LOW_MAH", false /* reportMissing */)
38 property Fact _failsafeBatt2LowMah: controller.getParameterFact(-1, "BATT2_LOW_MAH", false /* reportMissing */)
39 property Fact _failsafeBatt1CritMah: controller.getParameterFact(-1, "BATT_CRT_MAH", false /* reportMissing */)
40 property Fact _failsafeBatt2CritMah: controller.getParameterFact(-1, "BATT2_CRT_MAH", false /* reportMissing */)
41 property Fact _failsafeBatt1LowVoltage: controller.getParameterFact(-1, "BATT_LOW_VOLT", false /* reportMissing */)
42 property Fact _failsafeBatt2LowVoltage: controller.getParameterFact(-1, "BATT2_LOW_VOLT", false /* reportMissing */)
43 property Fact _failsafeBatt1CritVoltage: controller.getParameterFact(-1, "BATT_CRT_VOLT", false /* reportMissing */)
44 property Fact _failsafeBatt2CritVoltage: controller.getParameterFact(-1, "BATT2_CRT_VOLT", false /* reportMissing */)
45
46 // Older firmwares use ARMING_CHECK. Newer firmwares use ARMING_SKIPCHK.
47 property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK", false /* reportMissing */)
48 property Fact _armingSkipCheck: controller.getParameterFact(-1, "ARMING_SKIPCHK", false /* reportMissing */)
49
50 property real _margins: ScreenTools.defaultFontPixelHeight
51 property real _innerMargin: _margins / 2
52 property bool _showIcon: !ScreenTools.isTinyScreen
53 property bool _roverFirmware: controller.parameterExists(-1, "MODE1") // This catches all usage of ArduRover firmware vehicle types: Rover, Boat...
54
55
56 property string _restartRequired: qsTr("Requires vehicle reboot")
57
58 Component {
59 id: batteryFailsafeComponent
60
61 Column {
62 spacing: _margins
63
64 GridLayout {
65 id: gridLayout
66 columnSpacing: _margins
67 rowSpacing: _margins
68 columns: 2
69 QGCLabel { text: qsTr("Low action:") }
70 FactComboBox {
71 fact: failsafeBattLowAct
72 indexModel: false
73 Layout.fillWidth: true
74 }
75
76 QGCLabel { text: qsTr("Critical action:") }
77 FactComboBox {
78 fact: failsafeBattCritAct
79 indexModel: false
80 Layout.fillWidth: true
81 }
82
83 QGCLabel { text: qsTr("Low voltage threshold:") }
84 FactTextField {
85 fact: failsafeBattLowVoltage
86 showUnits: true
87 Layout.fillWidth: true
88 }
89
90
91 QGCLabel { text: qsTr("Critical voltage threshold:") }
92 FactTextField {
93 fact: failsafeBattCritVoltage
94 showUnits: true
95 Layout.fillWidth: true
96 }
97
98 QGCLabel { text: qsTr("Low mAh threshold:") }
99 FactTextField {
100 fact: failsafeBattLowMah
101 showUnits: true
102 Layout.fillWidth: true
103 }
104
105 QGCLabel { text: qsTr("Critical mAh threshold:") }
106 FactTextField {
107 fact: failsafeBattCritMah
108 showUnits: true
109 Layout.fillWidth: true
110 }
111 } // GridLayout
112 } // Column
113 }
114
115 Component {
116 id: restartRequiredComponent
117
118 ColumnLayout {
119 spacing: ScreenTools.defaultFontPixelWidth
120
121 QGCLabel {
122 text: _restartRequired
123 }
124
125 QGCButton {
126 text: qsTr("Reboot vehicle")
127 onClicked: controller.vehicle.rebootVehicle()
128 }
129 }
130 }
131
132 Column {
133 spacing: _margins / 2
134 visible: _batt1MonitorEnabled
135
136 QGCLabel {
137 text: qsTr("Battery1 Failsafe Triggers")
138 font.bold: true
139 }
140
141 Rectangle {
142 width: battery1FailsafeLoader.x + battery1FailsafeLoader.width + _margins
143 height: battery1FailsafeLoader.y + battery1FailsafeLoader.height + _margins
144 color: qgcPal.windowShade
145
146 Loader {
147 id: battery1FailsafeLoader
148 anchors.margins: _margins
149 anchors.top: parent.top
150 anchors.left: parent.left
151 sourceComponent: _batt1ParamsAvailable ? batteryFailsafeComponent : restartRequiredComponent
152
153 property Fact battMonitor: _batt1Monitor
154 property bool battParamsAvailable: _batt1ParamsAvailable
155 property Fact failsafeBattLowAct: _failsafeBatt1LowAct
156 property Fact failsafeBattCritAct: _failsafeBatt1CritAct
157 property Fact failsafeBattLowMah: _failsafeBatt1LowMah
158 property Fact failsafeBattCritMah: _failsafeBatt1CritMah
159 property Fact failsafeBattLowVoltage: _failsafeBatt1LowVoltage
160 property Fact failsafeBattCritVoltage: _failsafeBatt1CritVoltage
161 }
162 } // Rectangle
163 } // Column - Battery Failsafe Settings
164
165
166 Column {
167 spacing: _margins / 2
168 visible: _batt2MonitorEnabled
169
170 QGCLabel {
171 text: qsTr("Battery2 Failsafe Triggers")
172 font.bold: true
173 }
174
175 Rectangle {
176 width: battery2FailsafeLoader.x + battery2FailsafeLoader.width + _margins
177 height: battery2FailsafeLoader.y + battery2FailsafeLoader.height + _margins
178 color: qgcPal.windowShade
179
180 Loader {
181 id: battery2FailsafeLoader
182 anchors.margins: _margins
183 anchors.top: parent.top
184 anchors.left: parent.left
185 sourceComponent: _batt2ParamsAvailable ? batteryFailsafeComponent : restartRequiredComponent
186
187 property Fact battMonitor: _batt2Monitor
188 property bool battParamsAvailable: _batt2ParamsAvailable
189 property Fact failsafeBattLowAct: _failsafeBatt2LowAct
190 property Fact failsafeBattCritAct: _failsafeBatt2CritAct
191 property Fact failsafeBattLowMah: _failsafeBatt2LowMah
192 property Fact failsafeBattCritMah: _failsafeBatt2CritMah
193 property Fact failsafeBattLowVoltage: _failsafeBatt2LowVoltage
194 property Fact failsafeBattCritVoltage: _failsafeBatt2CritVoltage
195 }
196 } // Rectangle
197 } // Column - Battery Failsafe Settings
198
199 Component {
200 id: planeGeneralFS
201
202 Column {
203 spacing: _margins / 2
204
205 property Fact _failsafeThrEnable: controller.getParameterFact(-1, "THR_FAILSAFE")
206 property Fact _failsafeThrValue: controller.getParameterFact(-1, "THR_FS_VALUE")
207 property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABL")
208
209 QGCLabel {
210 text: qsTr("Failsafe Triggers")
211 font.bold: true
212 }
213
214 Rectangle {
215 width: fsColumn.x + fsColumn.width + _margins
216 height: fsColumn.y + fsColumn.height + _margins
217 color: qgcPal.windowShade
218
219 ColumnLayout {
220 id: fsColumn
221 anchors.margins: _margins
222 anchors.left: parent.left
223 anchors.top: parent.top
224
225 RowLayout {
226 QGCCheckBox {
227 id: throttleEnableCheckBox
228 text: qsTr("Throttle PWM threshold:")
229 checked: _failsafeThrEnable.value === 1
230
231 onClicked: _failsafeThrEnable.value = (checked ? 1 : 0)
232 }
233
234 FactTextField {
235 fact: _failsafeThrValue
236 showUnits: true
237 enabled: throttleEnableCheckBox.checked
238 }
239 }
240
241 QGCCheckBox {
242 text: qsTr("GCS failsafe")
243 checked: _failsafeGCSEnable.value != 0
244 onClicked: _failsafeGCSEnable.value = checked ? 1 : 0
245 }
246 }
247 } // Rectangle - Failsafe trigger settings
248 } // Column - Failsafe trigger settings
249 }
250
251 Loader {
252 sourceComponent: controller.vehicle.fixedWing ? planeGeneralFS : undefined
253 }
254
255 Component {
256 id: roverGeneralFS
257
258 Column {
259 spacing: _margins / 2
260
261 property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE")
262 property Fact _failsafeThrEnable: controller.getParameterFact(-1, "FS_THR_ENABLE")
263 property Fact _failsafeThrValue: controller.getParameterFact(-1, "FS_THR_VALUE")
264 property Fact _failsafeAction: controller.getParameterFact(-1, "FS_ACTION")
265 property Fact _failsafeCrashCheck: controller.getParameterFact(-1, "FS_CRASH_CHECK")
266
267 QGCLabel {
268 id: failsafeLabel
269 text: qsTr("Failsafe Triggers")
270 font.bold: true
271 }
272
273 Rectangle {
274 id: failsafeSettings
275 width: fsGrid.x + fsGrid.width + _margins
276 height: fsGrid.y + fsGrid.height + _margins
277 color: qgcPal.windowShade
278
279 GridLayout {
280 id: fsGrid
281 anchors.margins: _margins
282 anchors.left: parent.left
283 anchors.top: parent.top
284 columns: 2
285
286 QGCLabel { text: qsTr("Ground Station failsafe:") }
287 FactComboBox {
288 Layout.fillWidth: true
289 fact: _failsafeGCSEnable
290 indexModel: false
291 }
292
293 QGCLabel { text: qsTr("Throttle failsafe:") }
294 FactComboBox {
295 Layout.fillWidth: true
296 fact: _failsafeThrEnable
297 indexModel: false
298 }
299
300 QGCLabel { text: qsTr("PWM threshold:") }
301 FactTextField {
302 Layout.fillWidth: true
303 fact: _failsafeThrValue
304 }
305
306 QGCLabel { text: qsTr("Failsafe Crash Check:") }
307 FactComboBox {
308 Layout.fillWidth: true
309 fact: _failsafeCrashCheck
310 indexModel: false
311 }
312 }
313 } // Rectangle - Failsafe Settings
314 } // Column - Failsafe Settings
315 }
316
317 Loader {
318 sourceComponent: _roverFirmware ? roverGeneralFS : undefined
319 }
320
321 Component {
322 id: copterGeneralFS
323
324 Column {
325 spacing: _margins / 2
326
327 property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE")
328 property Fact _failsafeBattLowAct: controller.getParameterFact(-1, "r.BATT_FS_LOW_ACT", false /* reportMissing */)
329 property Fact _failsafeBattMah: controller.getParameterFact(-1, "r.BATT_LOW_MAH", false /* reportMissing */)
330 property Fact _failsafeBattVoltage: controller.getParameterFact(-1, "r.BATT_LOW_VOLT", false /* reportMissing */)
331 property Fact _failsafeThrEnable: controller.getParameterFact(-1, "FS_THR_ENABLE")
332 property Fact _failsafeThrValue: controller.getParameterFact(-1, "FS_THR_VALUE")
333
334 QGCLabel {
335 text: qsTr("General Failsafe Triggers")
336 font.bold: true
337 }
338
339 Rectangle {
340 width: generalFailsafeColumn.x + generalFailsafeColumn.width + _margins
341 height: generalFailsafeColumn.y + generalFailsafeColumn.height + _margins
342 color: qgcPal.windowShade
343
344 Column {
345 id: generalFailsafeColumn
346 anchors.margins: _margins
347 anchors.top: parent.top
348 anchors.left: parent.left
349 spacing: _margins
350
351 GridLayout {
352 columnSpacing: _margins
353 rowSpacing: _margins
354 columns: 2
355
356 QGCLabel { text: qsTr("Ground Station failsafe:") }
357 FactComboBox {
358 fact: _failsafeGCSEnable
359 indexModel: false
360 Layout.fillWidth: true
361 }
362
363 QGCLabel { text: qsTr("Throttle failsafe:") }
364 QGCComboBox {
365 model: [qsTr("Disabled"), qsTr("Always RTL"),
366 qsTr("Continue with Mission in Auto Mode"), qsTr("Always Land")]
367 currentIndex: _failsafeThrEnable.value
368 Layout.fillWidth: true
369
370 onActivated: (index) => { _failsafeThrEnable.value = index }
371 }
372
373 QGCLabel { text: qsTr("PWM threshold:") }
374 FactTextField {
375 fact: _failsafeThrValue
376 showUnits: true
377 Layout.fillWidth: true
378 }
379 } // GridLayout
380 } // Column
381 } // Rectangle - Failsafe Settings
382 } // Column - General Failsafe Settings
383 }
384
385 Loader {
386 sourceComponent: controller.vehicle.multiRotor ? copterGeneralFS : undefined
387 }
388
389 Component {
390 id: copterGeoFence
391
392 Column {
393 spacing: _margins / 2
394
395 property Fact _fenceAction: controller.getParameterFact(-1, "FENCE_ACTION")
396 property Fact _fenceAltMax: controller.getParameterFact(-1, "FENCE_ALT_MAX")
397 property Fact _fenceEnable: controller.getParameterFact(-1, "FENCE_ENABLE")
398 property Fact _fenceMargin: controller.getParameterFact(-1, "FENCE_MARGIN")
399 property Fact _fenceRadius: controller.getParameterFact(-1, "FENCE_RADIUS")
400 property Fact _fenceType: controller.getParameterFact(-1, "FENCE_TYPE")
401
402 readonly property int _maxAltitudeFenceBitMask: 1
403 readonly property int _circleFenceBitMask: 2
404 readonly property int _polygonFenceBitMask: 4
405
406 QGCLabel {
407 text: qsTr("GeoFence")
408 font.bold: true
409 }
410
411 Rectangle {
412 width: mainLayout.width + (_margins * 2)
413 height: mainLayout.height + (_margins * 2)
414 color: qgcPal.windowShade
415
416 ColumnLayout {
417 id: mainLayout
418 x: _margins
419 y: _margins
420 spacing: ScreenTools.defaultFontPixellHeight / 2
421
422 FactCheckBox {
423 id: enabledCheckBox
424 text: qsTr("Enabled")
425 fact: _fenceEnable
426 }
427
428 GridLayout {
429 columns: 2
430 enabled: enabledCheckBox.checked
431
432 QGCCheckBox {
433 text: qsTr("Maximum Altitude")
434 checked: _fenceType.rawValue & _maxAltitudeFenceBitMask
435
436 onClicked: {
437 if (checked) {
438 _fenceType.rawValue |= _maxAltitudeFenceBitMask
439 } else {
440 _fenceType.value &= ~_maxAltitudeFenceBitMask
441 }
442 }
443 }
444
445 FactTextField {
446 fact: _fenceAltMax
447 }
448
449 QGCCheckBox {
450 text: qsTr("Circle centered on Home")
451 checked: _fenceType.rawValue & _circleFenceBitMask
452
453 onClicked: {
454 if (checked) {
455 _fenceType.rawValue |= _circleFenceBitMask
456 } else {
457 _fenceType.value &= ~_circleFenceBitMask
458 }
459 }
460 }
461
462 FactTextField {
463 fact: _fenceRadius
464 showUnits: true
465 }
466
467 QGCCheckBox {
468 text: qsTr("Inclusion/Exclusion Circles+Polygons")
469 checked: _fenceType.rawValue & _polygonFenceBitMask
470
471 onClicked: {
472 if (checked) {
473 _fenceType.rawValue |= _polygonFenceBitMask
474 } else {
475 _fenceType.value &= ~_polygonFenceBitMask
476 }
477 }
478 }
479
480 Item {
481 height: 1
482 width: 1
483 }
484 } // GridLayout
485
486 Item {
487 height: 1
488 width: 1
489 }
490
491 GridLayout {
492 columns: 2
493 enabled: enabledCheckBox.checked
494
495 QGCLabel {
496 text: qsTr("Breach action")
497 }
498
499 FactComboBox {
500 sizeToContents: true
501 fact: _fenceAction
502 }
503
504 QGCLabel {
505 text: qsTr("Fence margin")
506 }
507
508 FactTextField {
509 fact: _fenceMargin
510 }
511 }
512 }
513 } // Rectangle - GeoFence Settings
514 } // Column - GeoFence Settings
515 }
516
517 Loader {
518 sourceComponent: controller.vehicle.multiRotor ? copterGeoFence : undefined
519 }
520
521 Component {
522 id: copterRTL
523
524 Column {
525 spacing: _margins / 2
526
527 property Fact _landSpeedFact: controller.getParameterFact(-1, "LAND_SPEED")
528 property Fact _rtlAltFact: controller.getParameterFact(-1, "RTL_ALT")
529 property Fact _rtlLoitTimeFact: controller.getParameterFact(-1, "RTL_LOIT_TIME")
530 property Fact _rtlAltFinalFact: controller.getParameterFact(-1, "RTL_ALT_FINAL")
531
532 QGCLabel {
533 id: rtlLabel
534 text: qsTr("Return to Launch")
535 font.bold: true
536 }
537
538 Rectangle {
539 id: rtlSettings
540 width: landSpeedField.x + landSpeedField.width + _margins
541 height: landSpeedField.y + landSpeedField.height + _margins
542 color: qgcPal.windowShade
543
544 QGCColoredImage {
545 id: icon
546 visible: _showIcon
547 anchors.margins: _margins
548 anchors.left: parent.left
549 anchors.top: parent.top
550 height: ScreenTools.defaultFontPixelWidth * 20
551 width: ScreenTools.defaultFontPixelWidth * 20
552 color: qgcPal.text
553 sourceSize.width: width
554 mipmap: true
555 fillMode: Image.PreserveAspectFit
556 source: "/qmlimages/ReturnToHomeAltitude.svg"
557 }
558
559 QGCRadioButton {
560 id: returnAtCurrentRadio
561 anchors.margins: _innerMargin
562 anchors.left: _showIcon ? icon.right : parent.left
563 anchors.top: parent.top
564 text: qsTr("Return at current altitude")
565 checked: _rtlAltFact.value == 0
566
567 onClicked: _rtlAltFact.value = 0
568 }
569
570 QGCRadioButton {
571 id: returnAltRadio
572 anchors.topMargin: _innerMargin
573 anchors.top: returnAtCurrentRadio.bottom
574 anchors.left: returnAtCurrentRadio.left
575 text: qsTr("Return at specified altitude:")
576 checked: _rtlAltFact.value != 0
577
578 onClicked: _rtlAltFact.value = 1500
579 }
580
581 FactTextField {
582 id: rltAltField
583 anchors.leftMargin: _margins
584 anchors.left: returnAltRadio.right
585 anchors.baseline: returnAltRadio.baseline
586 fact: _rtlAltFact
587 showUnits: true
588 enabled: returnAltRadio.checked
589 }
590
591 QGCCheckBox {
592 id: homeLoiterCheckbox
593 anchors.left: returnAtCurrentRadio.left
594 anchors.baseline: landDelayField.baseline
595 checked: _rtlLoitTimeFact.value > 0
596 text: qsTr("Loiter above Home for:")
597
598 onClicked: _rtlLoitTimeFact.value = (checked ? 60 : 0)
599 }
600
601 FactTextField {
602 id: landDelayField
603 anchors.topMargin: _innerMargin
604 anchors.left: rltAltField.left
605 anchors.top: rltAltField.bottom
606 fact: _rtlLoitTimeFact
607 showUnits: true
608 enabled: homeLoiterCheckbox.checked === true
609 }
610
611 QGCLabel {
612 anchors.left: returnAtCurrentRadio.left
613 anchors.baseline: rltAltFinalField.baseline
614 text: qsTr("Final land stage altitude:")
615 }
616
617 FactTextField {
618 id: rltAltFinalField
619 anchors.topMargin: _innerMargin
620 anchors.left: rltAltField.left
621 anchors.top: landDelayField.bottom
622 fact: _rtlAltFinalFact
623 showUnits: true
624 }
625
626 QGCLabel {
627 anchors.left: returnAtCurrentRadio.left
628 anchors.baseline: landSpeedField.baseline
629 text: qsTr("Final land stage descent speed:")
630 }
631
632 FactTextField {
633 id: landSpeedField
634 anchors.topMargin: _innerMargin
635 anchors.left: rltAltField.left
636 anchors.top: rltAltFinalField.bottom
637 fact: _landSpeedFact
638 showUnits: true
639 }
640 } // Rectangle - RTL Settings
641 } // Column - RTL Settings
642 }
643
644 Loader {
645 sourceComponent: controller.vehicle.multiRotor ? copterRTL : undefined
646 }
647
648 Component {
649 id: planeRTL
650
651 Column {
652 spacing: _margins / 2
653
654 property Fact _rtlAltFact: controller.getParameterFact(-1, "r.RTL_ALTITUDE")
655
656 QGCLabel {
657 text: qsTr("Return to Launch")
658 font.bold: true
659 }
660
661 Rectangle {
662 width: rltAltField.x + rltAltField.width + _margins
663 height: rltAltField.y + rltAltField.height + _margins
664 color: qgcPal.windowShade
665
666 QGCRadioButton {
667 id: returnAtCurrentRadio
668 anchors.margins: _margins
669 anchors.left: parent.left
670 anchors.top: parent.top
671 text: qsTr("Return at current altitude")
672 checked: _rtlAltFact.value < 0
673
674 onClicked: _rtlAltFact.value = -1
675 }
676
677 QGCRadioButton {
678 id: returnAltRadio
679 anchors.topMargin: _margins / 2
680 anchors.left: returnAtCurrentRadio.left
681 anchors.top: returnAtCurrentRadio.bottom
682 text: qsTr("Return at specified altitude:")
683 checked: _rtlAltFact.value >= 0
684
685 onClicked: _rtlAltFact.value = 10000
686 }
687
688 FactTextField {
689 id: rltAltField
690 anchors.leftMargin: _margins
691 anchors.left: returnAltRadio.right
692 anchors.baseline: returnAltRadio.baseline
693 fact: _rtlAltFact
694 showUnits: true
695 enabled: returnAltRadio.checked
696 }
697 } // Rectangle - RTL Settings
698 } // Column - RTL Settings
699 }
700
701 Loader {
702 sourceComponent: controller.vehicle.fixedWing ? planeRTL : undefined
703 }
704
705 Column {
706 spacing: _margins / 2
707
708 QGCLabel {
709 text: _armingCheck ? qsTr("Arming Checks") : qsTr("Skip Arming Checks")
710 font.bold: true
711 }
712
713 Rectangle {
714 width: flowLayout.width
715 height: armingCheckInnerColumn.height + (_margins * 2)
716 color: qgcPal.windowShade
717
718 Column {
719 id: armingCheckInnerColumn
720 anchors.margins: _margins
721 anchors.top: parent.top
722 anchors.left: parent.left
723 anchors.right: parent.right
724 spacing: _margins
725
726 FactBitmask {
727 id: armingCheckBitmask
728 anchors.left: parent.left
729 anchors.right: parent.right
730 firstEntryIsAll: _armingCheck ? true : false
731 fact: _armingCheck ? _armingCheck : _armingSkipCheck
732 }
733
734 QGCLabel {
735 id: armingCheckWarning
736 anchors.left: parent.left
737 anchors.right: parent.right
738 wrapMode: Text.WordWrap
739 color: qgcPal.warningText
740 text: qsTr("Warning: Turning off arming checks can lead to loss of Vehicle control.")
741 visible: _armingCheck ? _armingCheck.value != 1 : _armingSkipCheck.value != 0
742 }
743 }
744 } // Rectangle - Arming checks
745 } // Column - Arming Checks
746 } // Flow
747 } // Component - safetyPageComponent
748} // SetupView