Unverified Commit b9e81086 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7127 from DonLakeFlyer/AltMode

Plan: Altitude modes rework
parents b1c90168 5b2bae59
...@@ -18,23 +18,46 @@ Rectangle { ...@@ -18,23 +18,46 @@ Rectangle {
color: qgcPal.windowShadeDark color: qgcPal.windowShadeDark
radius: _radius radius: _radius
property bool _specifiesAltitude: missionItem.specifiesAltitude
property real _margin: ScreenTools.defaultFontPixelHeight / 2
property bool _supportsTerrainFrame: missionItem
readonly property int _altModeRelative: 0 readonly property int _altModeRelative: 0
readonly property int _altModeAbsolute: 1 readonly property int _altModeAbsolute: 1
readonly property int _altModeAboveTerrain: 2 readonly property int _altModeAboveTerrain: 2
readonly property int _altModeTerrainFrame: 3 readonly property int _altModeTerrainFrame: 3
ExclusiveGroup { property bool _specifiesAltitude: missionItem.specifiesAltitude
id: altRadios property real _margin: ScreenTools.defaultFontPixelHeight / 2
onCurrentChanged: { property bool _supportsTerrainFrame: missionItem
altModeLabel.text = Qt.binding(function() { return current.helpText })
missionItem.altitudeMode = current.altModeValue property string _altModeRelativeHelpText: qsTr("Altitude relative to home altitude")
property string _altModeAbsoluteHelpText: qsTr("Altitude above mean sea level")
property string _altModeAboveTerrainHelpText: qsTr("Altitude above terrain\nActual AMSL altitude: %1 %2").arg(missionItem.amslAltAboveTerrain.valueString).arg(missionItem.amslAltAboveTerrain.units)
property string _altModeTerrainFrameHelpText: qsTr("Using terrain reference frame")
function updateAltitudeModeText() {
if (missionItem.altitudeMode === _altModeRelative) {
altModeLabel.text = qsTr("Altitude")
altModeHelp.text = _altModeRelativeHelpText
} else if (missionItem.altitudeMode === _altModeAbsolute) {
altModeLabel.text = qsTr("Above Mean Sea Level")
altModeHelp.text = _altModeAbsoluteHelpText
} else if (missionItem.altitudeMode === _altModeAboveTerrain) {
altModeLabel.text = qsTr("Above Terrain")
altModeHelp.text = Qt.binding(function() { return _altModeAboveTerrainHelpText })
} else if (missionItem.altitudeMode === _altModeTerrainFrame) {
altModeLabel.text = qsTr("Terrain Frame")
altModeHelp.text = _altModeTerrainFrameHelpText
} else {
altModeLabel.text = qsTr("Internal Error")
altModeHelp.text = ""
} }
} }
Component.onCompleted: updateAltitudeModeText()
Connections {
target: missionItem
onAltitudeModeChanged: updateAltitudeModeText()
}
Column { Column {
id: valuesColumn id: valuesColumn
anchors.margins: _margin anchors.margins: _margin
...@@ -97,56 +120,70 @@ Rectangle { ...@@ -97,56 +120,70 @@ Rectangle {
anchors.right: parent.right anchors.right: parent.right
spacing: _margin spacing: _margin
QGCLabel { Item {
font.pointSize: ScreenTools.smallFontPointSize width: altHamburger.x + altHamburger.width
text: qsTr("Altitude") height: altModeLabel.height
}
QGCLabel { id: altModeLabel }
RowLayout {
QGCRadioButton { QGCColoredImage {
text: qsTr("Rel") id: altHamburger
exclusiveGroup: altRadios anchors.leftMargin: ScreenTools.defaultFontPixelWidth / 4
checked: missionItem.altitudeMode === altModeValue anchors.left: altModeLabel.right
anchors.top: altModeLabel.top
readonly property int altModeValue: _altModeRelative width: height
readonly property string helpText: qsTr("Relative to home altitude") height: altModeLabel.height
} sourceSize.height: height
QGCRadioButton { source: "qrc:/qmlimages/Hamburger.svg"
text: qsTr("AMSL") color: qgcPal.text
exclusiveGroup: altRadios
checked: missionItem.altitudeMode === altModeValue
visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || missionItem.altitudeMode === altModeValue
readonly property int altModeValue: _altModeAbsolute
readonly property string helpText: qsTr("Above Mean Sea Level")
} }
QGCRadioButton {
text: qsTr("AGL")
exclusiveGroup: altRadios
checked: missionItem.altitudeMode === altModeValue
readonly property int altModeValue: _altModeAboveTerrain QGCMouseArea {
property string helpText: qsTr("Calculated from terrain data\nAMSL Alt ") + missionItem.amslAltAboveTerrain.valueString + " " + missionItem.amslAltAboveTerrain.units anchors.fill: parent
onClicked: altHamburgerMenu.popup()
} }
QGCRadioButton {
text: qsTr("TerrF") Menu {
exclusiveGroup: altRadios id: altHamburgerMenu
checked: missionItem.altitudeMode === altModeValue
visible: missionItem.altitudeMode === altModeValue MenuItem {
text: qsTr("Altitude Relative To Home")
readonly property int altModeValue: _altModeTerrainFrame checkable: true
readonly property string helpText: qsTr("Using terrain reference frame") checked: missionItem.altitudeMode === _altModeRelative
onTriggered: missionItem.altitudeMode = _altModeRelative
}
MenuItem {
text: qsTr("Altitude Above Mean Sea Level")
checkable: true
checked: missionItem.altitudeMode === _altModeAbsolute
visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude
onTriggered: missionItem.altitudeMode = _altModeAbsolute
}
MenuItem {
text: qsTr("Altitude Above Terrain")
checkable: true
checked: missionItem.altitudeMode === _altModeAboveTerrain
onTriggered: missionItem.altitudeMode = _altModeAboveTerrain
}
MenuItem {
text: qsTr("Terrain Frame")
checkable: true
checked: missionItem.altitudeMode === _altModeTerrainFrame
visible: missionItem.altitudeMode === _altModeTerrainFrame
onTriggered: missionItem.altitudeMode = _altModeTerrainFrame
}
} }
} }
FactValueSlider { FactTextField {
fact: missionItem.altitude fact: missionItem.altitude
digitCount: 3
incrementSlots: 1
} }
QGCLabel { QGCLabel {
id: altModeLabel id: altModeHelp
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment