|
|
|
/*=====================================================================
|
|
|
|
|
|
|
|
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/>.
|
|
|
|
|
|
|
|
======================================================================*/
|
|
|
|
|
|
|
|
import QtQuick 2.5
|
|
|
|
import QtQuick.Controls 1.2
|
|
|
|
import QtQuick.Controls.Styles 1.2
|
|
|
|
import QtQuick.Layouts 1.2
|
|
|
|
import QtGraphicalEffects 1.0
|
|
|
|
|
|
|
|
import QGroundControl.FactSystem 1.0
|
|
|
|
import QGroundControl.FactControls 1.0
|
|
|
|
import QGroundControl.Palette 1.0
|
|
|
|
import QGroundControl.Controls 1.0
|
|
|
|
import QGroundControl.ScreenTools 1.0
|
|
|
|
|
|
|
|
|
|
|
|
QGCView {
|
|
|
|
id: _safetyView
|
|
|
|
viewPanel: panel
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
FactPanelController { id: controller; factPanel: panel }
|
|
|
|
|
|
|
|
QGCPalette { id: palette; colorGroupEnabled: enabled }
|
|
|
|
|
|
|
|
property real _margins: ScreenTools.defaultFontPixelHeight
|
|
|
|
property real _middleRowWidth: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 14
|
|
|
|
|
|
|
|
property Fact _fenceAction: controller.getParameterFact(-1, "GF_ACTION")
|
|
|
|
property Fact _fenceRadius: controller.getParameterFact(-1, "GF_MAX_HOR_DIST")
|
|
|
|
property Fact _fenceAlt: controller.getParameterFact(-1, "GF_MAX_VER_DIST")
|
|
|
|
property Fact _rtlLandDelay: controller.getParameterFact(-1, "RTL_LAND_DELAY")
|
|
|
|
property Fact _lowBattAction: controller.getParameterFact(-1, "COM_LOW_BAT_ACT")
|
|
|
|
property Fact _rcLossAction: controller.getParameterFact(-1, "NAV_RCL_ACT")
|
|
|
|
property Fact _dlLossAction: controller.getParameterFact(-1, "NAV_DLL_ACT")
|
|
|
|
property Fact _disarmLandDelay: controller.getParameterFact(-1, "COM_DISARM_LAND")
|
|
|
|
property Fact _landSpeedMC: controller.getParameterFact(-1, "MPC_LAND_SPEED", false)
|
|
|
|
|
|
|
|
QGCViewPanel {
|
|
|
|
id: panel
|
|
|
|
anchors.fill: parent
|
|
|
|
QGCFlickable {
|
|
|
|
clip: true
|
|
|
|
anchors.fill: parent
|
|
|
|
contentHeight: mainCol.height
|
|
|
|
flickableDirection: Flickable.VerticalFlick
|
|
|
|
Column {
|
|
|
|
id: mainCol
|
|
|
|
spacing: _margins
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
/*
|
|
|
|
**** Low Battery ****
|
|
|
|
*/
|
|
|
|
Item { width: 1; height: _margins * 0.5; }
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Low Battery Failsafe Trigger")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlSettings.width
|
|
|
|
height: lowBattRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: lowBattRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Image {
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 6
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: qgcPal.globalTheme === QGCPalette.Light ? "/qmlimages/LowBatteryLight.svg" : "/qmlimages/LowBattery.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: lowBattCombo.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Failsafe Action:")
|
|
|
|
}
|
|
|
|
FactComboBox {
|
|
|
|
id: lowBattCombo
|
|
|
|
width: _editFieldWidth
|
|
|
|
fact: _lowBattAction
|
|
|
|
indexModel: false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: batLowLevelField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Battery Warn Level:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: batLowLevelField
|
|
|
|
fact: controller.getParameterFact(-1, "BAT_LOW_THR")
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: batCritLevelField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Battery Failsafe Level:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: batCritLevelField
|
|
|
|
fact: controller.getParameterFact(-1, "BAT_CRIT_THR")
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
**** RC Loss ****
|
|
|
|
*/
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("RC Loss Failsafe Trigger")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlSettings.width
|
|
|
|
height: rcLossRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: rcLossRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Image {
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 6
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: qgcPal.globalTheme === QGCPalette.Light ? "/qmlimages/RCLossLight.svg" : "/qmlimages/RCLoss.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: rcLossCombo.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Failsafe Action:")
|
|
|
|
}
|
|
|
|
FactComboBox {
|
|
|
|
id: rcLossCombo
|
|
|
|
width: _editFieldWidth
|
|
|
|
fact: _rcLossAction
|
|
|
|
indexModel: false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: rcLossField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("RC Loss Timeout:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: rcLossField
|
|
|
|
fact: controller.getParameterFact(-1, "COM_RC_LOSS_T")
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
**** Data Link Loss ****
|
|
|
|
*/
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Data Link Loss Failsafe Trigger")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlSettings.width
|
|
|
|
height: dlLossRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: dlLossRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Image {
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 6
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: qgcPal.globalTheme === QGCPalette.Light ? "/qmlimages/DatalinkLossLight.svg" : "/qmlimages/DatalinkLoss.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: dlLossCombo.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Failsafe Action:")
|
|
|
|
}
|
|
|
|
FactComboBox {
|
|
|
|
id: dlLossCombo
|
|
|
|
width: _editFieldWidth
|
|
|
|
fact: _dlLossAction
|
|
|
|
indexModel: false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: dlLossField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Data Link Loss Timeout:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: dlLossField
|
|
|
|
fact: controller.getParameterFact(-1, "COM_DL_LOSS_T")
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
**** Geofence ****
|
|
|
|
*/
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Geofence Failsafe Trigger")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlSettings.width
|
|
|
|
height: geofenceRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: geofenceRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Image {
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 8
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: qgcPal.globalTheme === QGCPalette.Light ? "/qmlimages/GeoFenceLight.svg" : "/qmlimages/GeoFence.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
id: fenceActionLabel
|
|
|
|
anchors.baseline: fenceActionCombo.baseline
|
|
|
|
text: qsTr("Action on breach:")
|
|
|
|
width: _middleRowWidth
|
|
|
|
}
|
|
|
|
FactComboBox {
|
|
|
|
id: fenceActionCombo
|
|
|
|
width: _editFieldWidth
|
|
|
|
fact: _fenceAction
|
|
|
|
indexModel: false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCCheckBox {
|
|
|
|
id: fenceRadiusCheckBox
|
|
|
|
anchors.baseline: fenceRadiusField.baseline
|
|
|
|
text: qsTr("Max radius:")
|
|
|
|
checked: _fenceRadius.value >= 0
|
|
|
|
onClicked: _fenceRadius.value = checked ? 100 : -1
|
|
|
|
width: _middleRowWidth
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: fenceRadiusField
|
|
|
|
showUnits: true
|
|
|
|
fact: _fenceRadius
|
|
|
|
enabled: fenceRadiusCheckBox.checked
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCCheckBox {
|
|
|
|
id: fenceAltMaxCheckBox
|
|
|
|
anchors.baseline: fenceAltMaxField.baseline
|
|
|
|
text: qsTr("Max altitude:")
|
|
|
|
checked: _fenceAlt.value >= 0
|
|
|
|
onClicked: _fenceAlt.value = checked ? 100 : -1
|
|
|
|
width: _middleRowWidth
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: fenceAltMaxField
|
|
|
|
showUnits: true
|
|
|
|
fact: _fenceAlt
|
|
|
|
enabled: fenceAltMaxCheckBox.checked
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
**** Return Home Settings ****
|
|
|
|
*/
|
|
|
|
QGCLabel {
|
|
|
|
id: rtlLabel
|
|
|
|
text: qsTr("Return Home Settings")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
id: rtlSettings
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlRow.width + _margins * 2
|
|
|
|
height: rtlRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: rtlRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
QGCColoredImage {
|
|
|
|
id: icon
|
|
|
|
color: palette.text
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 10
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: controller.vehicle.fixedWing ? "/qmlimages/ReturnToHomeAltitude.svg" : "/qmlimages/ReturnToHomeAltitudeCopter.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item { width: _margins * 0.5; height: 1; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
id: climbLabel
|
|
|
|
anchors.baseline: climbField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Climb to altitude of:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: climbField
|
|
|
|
fact: controller.getParameterFact(-1, "RTL_RETURN_ALT")
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Item { width: 1; height: _margins * 0.5; }
|
|
|
|
QGCLabel {
|
|
|
|
id: returnHomeLabel
|
|
|
|
text: "Return home, then:"
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
Item { height: 1; width: _margins; }
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
ExclusiveGroup { id: homeLoiterGroup }
|
|
|
|
QGCRadioButton {
|
|
|
|
id: homeLandRadio
|
|
|
|
checked: _rtlLandDelay.value === 0
|
|
|
|
exclusiveGroup: homeLoiterGroup
|
|
|
|
text: "Land immediately"
|
|
|
|
onClicked: _rtlLandDelay.value = 0
|
|
|
|
}
|
|
|
|
QGCRadioButton {
|
|
|
|
id: homeLoiterNoLandRadio
|
|
|
|
checked: _rtlLandDelay.value < 0
|
|
|
|
exclusiveGroup: homeLoiterGroup
|
|
|
|
text: "Loiter and do not land"
|
|
|
|
onClicked: _rtlLandDelay.value = -1
|
|
|
|
}
|
|
|
|
QGCRadioButton {
|
|
|
|
id: homeLoiterLandRadio
|
|
|
|
checked: _rtlLandDelay.value > 0
|
|
|
|
exclusiveGroup: homeLoiterGroup
|
|
|
|
text: qsTr("Loiter and land after specified time")
|
|
|
|
onClicked: _rtlLandDelay.value = 60
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Item { width: 1; height: _margins * 0.5; }
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Loiter Time")
|
|
|
|
width: _middleRowWidth
|
|
|
|
anchors.baseline: landDelayField.baseline
|
|
|
|
color: palette.text
|
|
|
|
enabled: homeLoiterLandRadio.checked === true
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: landDelayField
|
|
|
|
fact: controller.getParameterFact(-1, "RTL_LAND_DELAY")
|
|
|
|
showUnits: true
|
|
|
|
enabled: homeLoiterLandRadio.checked === true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Loiter Altitude")
|
|
|
|
width: _middleRowWidth
|
|
|
|
anchors.baseline: descendField.baseline
|
|
|
|
color: palette.text
|
|
|
|
enabled: homeLoiterLandRadio.checked === true || homeLoiterNoLandRadio.checked === true
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: descendField
|
|
|
|
fact: controller.getParameterFact(-1, "RTL_DESCEND_ALT")
|
|
|
|
enabled: homeLoiterLandRadio.checked === true || homeLoiterNoLandRadio.checked === true
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
**** Land Mode Settings ****
|
|
|
|
*/
|
|
|
|
QGCLabel {
|
|
|
|
text: qsTr("Land Mode Settings")
|
|
|
|
font.family: ScreenTools.demiboldFontFamily
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
color: palette.windowShade
|
|
|
|
width: rtlSettings.width
|
|
|
|
height: landModeRow.height + _margins * 2
|
|
|
|
Row {
|
|
|
|
id: landModeRow
|
|
|
|
spacing: _margins
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Item {
|
|
|
|
width: _margins * 0.5
|
|
|
|
height: 1
|
|
|
|
}
|
|
|
|
QGCColoredImage {
|
|
|
|
color: palette.text
|
|
|
|
height: ScreenTools.defaultFontPixelWidth * 13
|
|
|
|
width: ScreenTools.defaultFontPixelWidth * 20
|
|
|
|
sourceSize.width: width
|
|
|
|
mipmap: true
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
|
|
source: controller.vehicle.fixedWing ? "/qmlimages/LandMode.svg" : "/qmlimages/LandModeCopter.svg"
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
Item {
|
|
|
|
width: _margins * 0.5
|
|
|
|
height: 1
|
|
|
|
}
|
|
|
|
Column {
|
|
|
|
spacing: _margins * 0.5
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Row {
|
|
|
|
visible: !controller.vehicle.fixedWing && (_landSpeedMC !== -1)
|
|
|
|
QGCLabel {
|
|
|
|
anchors.baseline: landVelField.baseline
|
|
|
|
width: _middleRowWidth
|
|
|
|
text: qsTr("Landing Velocity:")
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: landVelField
|
|
|
|
fact: _landSpeedMC
|
|
|
|
showUnits: true
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Row {
|
|
|
|
QGCCheckBox {
|
|
|
|
id: disarmDelayCheckBox
|
|
|
|
anchors.baseline: disarmField.baseline
|
|
|
|
text: qsTr("Disarm After:")
|
|
|
|
checked: _disarmLandDelay.value > 0
|
|
|
|
onClicked: _disarmLandDelay.value = checked ? 2 : 0
|
|
|
|
width: _middleRowWidth
|
|
|
|
}
|
|
|
|
FactTextField {
|
|
|
|
id: disarmField
|
|
|
|
showUnits: true
|
|
|
|
fact: _disarmLandDelay
|
|
|
|
enabled: disarmDelayCheckBox.checked
|
|
|
|
width: _editFieldWidth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Item { width: 1; height: _margins * 0.5; }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|