diff --git a/src/AutoPilotPlugins/PX4/SafetyComponent.cc b/src/AutoPilotPlugins/PX4/SafetyComponent.cc index f12d37e4095b2cb3d4750a732e0bd8682da73a3c..8267b8bac65e9c2b360e7e931ffa741b5e900563 100644 --- a/src/AutoPilotPlugins/PX4/SafetyComponent.cc +++ b/src/AutoPilotPlugins/PX4/SafetyComponent.cc @@ -1,24 +1,24 @@ /*===================================================================== - + QGroundControl Open Source Ground Control Station - + (c) 2009 - 2014 QGROUNDCONTROL PROJECT - + 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 . - + ======================================================================*/ /// @file @@ -67,7 +67,7 @@ bool SafetyComponent::setupComplete(void) const QString SafetyComponent::setupStateDescription(void) const { const char* stateDescription; - + if (requiresSetup()) { stateDescription = "Requires setup"; } else { @@ -84,7 +84,7 @@ const char** SafetyComponent::setupCompleteChangedTriggerList(void) const QStringList SafetyComponent::paramFilterList(void) const { QStringList list; - + return list; } @@ -92,11 +92,11 @@ QWidget* SafetyComponent::setupWidget(void) const { QGCQmlWidgetHolder* holder = new QGCQmlWidgetHolder(); Q_CHECK_PTR(holder); - + holder->setAutoPilot(_autopilot); - + holder->setSource(QUrl::fromUserInput("qrc:/qml/SafetyComponent.qml")); - + return holder; } @@ -109,10 +109,10 @@ QString SafetyComponent::prerequisiteSetup(void) const { PX4AutoPilotPlugin* plugin = dynamic_cast(_autopilot); Q_ASSERT(plugin); - + if (!plugin->airframeComponent()->setupComplete()) { return plugin->airframeComponent()->name(); } - + return QString(); } diff --git a/src/AutoPilotPlugins/PX4/SafetyComponent.qml b/src/AutoPilotPlugins/PX4/SafetyComponent.qml index 4a4d3bbbe51a5f33df2d91ca3ce8fb18968033fd..8bb5b4e3bdd1fad67d8dd46e0ac236818c4860ee 100644 --- a/src/AutoPilotPlugins/PX4/SafetyComponent.qml +++ b/src/AutoPilotPlugins/PX4/SafetyComponent.qml @@ -10,37 +10,76 @@ Rectangle { QGCPalette { id: palette; colorGroup: QGCPalette.Active } width: 600 - height: 400 + height: 600 color: palette.window + property var leftColWidth: 350 Column { anchors.fill: parent - spacing: 20 - + spacing: 40 + //----------------------------------------------------------------- + //-- Return Home Triggers Column { - spacing: 10 - - Label { text: "Return to Land setup"; color: palette.windowText; font.pointSize: 20 } + spacing: 18 + Label { text: "Triggers For Return Home"; color: palette.windowText; font.pointSize: 20 } Row { - Label { text: "Climb to minimum altitude of "; color: palette.windowText; anchors.baseline: climbField.baseline } - FactTextField { id: climbField; fact: autopilot.parameters["RTL_RETURN_ALT"]; showUnits: true } + Label { + width: leftColWidth + text: "RC Transmitter Signal Loss - Return Home After" + color: palette.windowText + anchors.baseline: rcLossField.baseline + } + FactTextField { + id: rcLossField + fact: autopilot.parameters["COM_RC_LOSS_T"] + showUnits: true + } } Row { - Label { text: "When Home is reached, descend to altitude of "; color: palette.windowText; anchors.baseline: descendField.baseline } - FactTextField { id: descendField; fact: autopilot.parameters["RTL_DESCEND_ALT"]; showUnits: true } + FactCheckBox { + id: telemetryLossCheckbox + fact: autopilot.parameters["COM_DL_LOSS_EN"] + width: leftColWidth + checkedValue: 1 + uncheckedValue: 0 + text: "Telemetry Signal Timeout - Return Home After" + anchors.baseline: telemetryLossField.baseline + } + FactTextField { + id: telemetryLossField + fact: autopilot.parameters["COM_DL_LOSS_T"]; + showUnits: true + } + } + } + //----------------------------------------------------------------- + //-- Return Home Options + Column { + spacing: 18 + Label { text: "Return Home Options"; color: palette.windowText; font.pointSize: 20 } + Row { + Label { + width: leftColWidth + text: "Climb to minimum altitude of " + color: palette.windowText + anchors.baseline: climbField.baseline + } + FactTextField { + id: climbField + fact: autopilot.parameters["RTL_RETURN_ALT"] + showUnits: true + } } Row { CheckBox { id: homeLoiterCheckbox property Fact fact: autopilot.parameters["RTL_LAND_DELAY"] - + width: leftColWidth checked: fact.value > 0 text: "Loiter at Home altitude for " - onClicked: { fact.value = checked ? 60 : -1 } - style: CheckBoxStyle { label: Text { color: palette.windowText @@ -52,47 +91,43 @@ Rectangle { fact: autopilot.parameters["RTL_LAND_DELAY"]; showUnits: true anchors.baseline: homeLoiterCheckbox.baseline + enabled: homeLoiterCheckbox.checked == true } } - } - - Column { - spacing: 10 - - Label { text: "Return to Land Triggers"; color: palette.windowText; font.pointSize: 20 } + //------------------------------------------------------------- + //-- Visible only if loiter above is checked + // TODO The "enabled" property could be used instead but it + // would have to handle a different "disabled" palette. Row { - FactCheckBox { - id: telemetryLossCheckbox - fact: autopilot.parameters["COM_DL_LOSS_EN"] - checkedValue: 1 - uncheckedValue: 0 - text: "Telemetry signal timeout - Return to Land" - anchors.baseline: telemetryLossField.baseline + Label { + width: leftColWidth; + text: "When Home is reached, loiter at an altitude of "; + color: palette.windowText; + anchors.baseline: descendField.baseline + visible: homeLoiterCheckbox.checked == true } - Label { text: " after "; color: palette.windowText; anchors.baseline: telemetryLossField.baseline } FactTextField { - id: telemetryLossField - fact: autopilot.parameters["NAV_DLL_N"]; + id: descendField; + fact: autopilot.parameters["RTL_DESCEND_ALT"]; + visible: homeLoiterCheckbox.checked == true showUnits: true } } - Row { - Label { text: "RC Transmitter signal loss - Return to Land after "; color: palette.windowText; anchors.baseline: rcLossField.baseline } - FactTextField { id: rcLossField; fact: autopilot.parameters["COM_RC_LOSS_T"]; showUnits: true } - } } Text { width: parent.width + font.pointSize: 14 text: "Warning: You have an advanced safety configuration set using the NAV_RCL_OBC parameter. The above settings may not apply."; - visible: autopilot.parameters["NAV_RCL_OBC"].value == 1 + visible: autopilot.parameters["NAV_RCL_OBC"].value != 0 color: palette.windowText wrapMode: Text.Wrap } Text { width: parent.width + font.pointSize: 14 text: "Warning: You have an advanced safety configuration set using the NAV_DLL_OBC parameter. The above settings may not apply."; - visible: autopilot.parameters["NAV_DLL_OBC"].value == 1 + visible: autopilot.parameters["NAV_DLL_OBC"].value != 0 color: palette.windowText wrapMode: Text.Wrap }