-
DonLakeFlyer authored
Telemetry Values bar at center bottom
DonLakeFlyer authoredTelemetry Values bar at center bottom
SimpleItemEditor.qml 15.23 KiB
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.11
import QGroundControl 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Vehicle 1.0
import QGroundControl.Controls 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
// Editor for Simple mission items
Rectangle {
width: availableWidth
height: editorColumn.height + (_margin * 2)
color: qgcPal.windowShadeDark
radius: _radius
property bool _specifiesAltitude: missionItem.specifiesAltitude
property real _margin: ScreenTools.defaultFontPixelHeight / 2
property var _controllerVehicle: missionItem.masterController.controllerVehicle
property bool _supportsTerrainFrame: _controllerVehicle.supportsTerrainFrame
property int _globalAltMode: missionItem.masterController.missionController.globalAltitudeMode
property bool _globalAltModeIsMixed: _globalAltMode == QGroundControl.AltitudeModeNone
property real _radius: ScreenTools.defaultFontPixelWidth / 2
property string _altModeRelativeHelpText: qsTr("Altitude relative to launch 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 === QGroundControl.AltitudeModeRelative) {
altModeLabel.text = QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeRelative)
altModeHelp.text = _altModeRelativeHelpText
} else if (missionItem.altitudeMode === QGroundControl.AltitudeModeAbsolute) {
altModeLabel.text = QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAbsolute)
altModeHelp.text = _altModeAbsoluteHelpText
} else if (missionItem.altitudeMode === QGroundControl.AltitudeModeAboveTerrain) {
altModeLabel.text = QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAboveTerrain)
altModeHelp.text = Qt.binding(function() { return _altModeAboveTerrainHelpText })
} else if (missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame) {
altModeLabel.text = QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeTerrainFrame)
altModeHelp.text = _altModeTerrainFrameHelpText
} else {
altModeLabel.text = qsTr("Internal Error")
altModeHelp.text = ""
}
}
Component.onCompleted: updateAltitudeModeText()
Connections {
target: missionItem
onAltitudeModeChanged: updateAltitudeModeText()
}
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
Column {
id: editorColumn
anchors.margins: _margin
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
spacing: _margin
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.smallFontPointSize
text: missionItem.rawEdit ?
qsTr("Provides advanced access to all commands/parameters. Be very careful!") :
missionItem.commandDescription
}
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
spacing: _margin
visible: missionItem.isTakeoffItem && missionItem.wizardMode // Hack special case for takeoff item
QGCLabel {
text: qsTr("Move '%1' %2 to the %3 location. %4")
.arg(_controllerVehicle.vtol ? qsTr("T") : qsTr("T"))
.arg(_controllerVehicle.vtol ? qsTr("Transition Direction") : qsTr("Takeoff"))
.arg(_controllerVehicle.vtol ? qsTr("desired") : qsTr("climbout"))
.arg(_controllerVehicle.vtol ? (qsTr("Ensure distance from launch to transition direction is far enough to complete transition.")) : "")
Layout.fillWidth: true
wrapMode: Text.WordWrap
visible: !initialClickLabel.visible
}
QGCLabel {
text: qsTr("Ensure clear of obstacles and into the wind.")
Layout.fillWidth: true
wrapMode: Text.WordWrap
visible: !initialClickLabel.visible
}
QGCButton {
text: qsTr("Done")
Layout.fillWidth: true
visible: !initialClickLabel.visible
onClicked: {
missionItem.wizardMode = false
}
}
QGCLabel {
id: initialClickLabel
text: missionItem.launchTakeoffAtSameLocation ?
qsTr("Click in map to set planned Takeoff location.") :
qsTr("Click in map to set planned Launch location.")
Layout.fillWidth: true
wrapMode: Text.WordWrap
visible: missionItem.isTakeoffItem && !missionItem.launchCoordinate.isValid
}
}
Column {
anchors.left: parent.left
anchors.right: parent.right
spacing: _margin
visible: !missionItem.wizardMode
// This control needs to morph between a simple altitude entry field to a more complex alt mode picker based on the global plan alt mode
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
height: altColumn.y + altColumn.height + _margin
color: _globalAltModeIsMixed ? qgcPal.windowShadeLight : qgcPal.windowShadeDark
visible: _specifiesAltitude
ColumnLayout {
id: altColumn
anchors.margins: _globalAltModeIsMixed ? _margin : 0
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
spacing: _globalAltModeIsMixed ? _margin : 0
QGCLabel {
Layout.fillWidth: true
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.smallFontPointSize
text: qsTr("Altitude below specifies the approximate altitude of the ground. Normally 0 for landing back at original launch location.")
visible: missionItem.isLandCommand
}
Item {
width: altModeDropArrow.x + altModeDropArrow.width
height: altModeLabel.height
visible: _globalAltModeIsMixed
QGCLabel { id: altModeLabel }
QGCColoredImage {
id: altModeDropArrow
anchors.leftMargin: ScreenTools.defaultFontPixelWidth / 4
anchors.left: altModeLabel.right
anchors.verticalCenter: altModeLabel.verticalCenter
width: ScreenTools.defaultFontPixelHeight / 2
height: width
sourceSize.height: height
source: "/res/DropArrow.svg"
color: qgcPal.text
}
QGCMouseArea {
anchors.fill: parent
onClicked: altModeMenu.popup()
}
QGCMenu {
id: altModeMenu
QGCMenuItem {
text: QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeRelative)
checkable: true
checked: missionItem.altitudeMode === QGroundControl.AltitudeModeRelative
onTriggered: missionItem.altitudeMode = QGroundControl.AltitudeModeRelative
}
QGCMenuItem {
text: QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAbsolute)
checkable: true
checked: missionItem.altitudeMode === QGroundControl.AltitudeModeAbsolute
visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude
onTriggered: missionItem.altitudeMode = QGroundControl.AltitudeModeAbsolute
}
QGCMenuItem {
text: QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAboveTerrain)
checkable: true
checked: missionItem.altitudeMode === QGroundControl.AltitudeModeAboveTerrain
onTriggered: missionItem.altitudeMode = QGroundControl.AltitudeModeAboveTerrain
visible: missionItem.specifiesCoordinate
}
QGCMenuItem {
text: QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeTerrainFrame)
checkable: true
checked: missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame
visible: _supportsTerrainFrame && (missionItem.specifiesCoordinate || missionItem.specifiesAltitudeOnly)
onTriggered: missionItem.altitudeMode = QGroundControl.AltitudeModeTerrainFrame
}
}
}
QGCLabel {
text: qsTr("Altitude")
font.pointSize: ScreenTools.smallFontPointSize
visible: !_globalAltModeIsMixed
}
AltitudeFactTextField {
id: altField
Layout.fillWidth: true
fact: missionItem.altitude
altitudeMode: missionItem.altitudeMode
}
QGCLabel {
id: altModeHelp
Layout.fillWidth: true
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.smallFontPointSize
visible: _globalAltModeIsMixed
}
}
}
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
spacing: _margin
Repeater {
model: missionItem.comboboxFacts
ColumnLayout {
Layout.fillWidth: true
spacing: 0
QGCLabel {
font.pointSize: ScreenTools.smallFontPointSize
text: object.name
visible: object.name !== ""
}
FactComboBox {
Layout.fillWidth: true
indexModel: false
model: object.enumStrings
fact: object
}
}
}
}
GridLayout {
anchors.left: parent.left
anchors.right: parent.right
flow: GridLayout.TopToBottom
rows: missionItem.textFieldFacts.count +
missionItem.nanFacts.count +
(missionItem.speedSection.available ? 1 : 0)
columns: 2
Repeater {
model: missionItem.textFieldFacts
QGCLabel { text: object.name }
}
Repeater {
model: missionItem.nanFacts
QGCCheckBox {
text: object.name
checked: !isNaN(object.rawValue)
onClicked: object.rawValue = checked ? 0 : NaN
}
}
QGCCheckBox {
id: flightSpeedCheckbox
text: qsTr("Flight Speed")
checked: missionItem.speedSection.specifyFlightSpeed
onClicked: missionItem.speedSection.specifyFlightSpeed = checked
visible: missionItem.speedSection.available
}
Repeater {
model: missionItem.textFieldFacts
FactTextField {
showUnits: true
fact: object
Layout.fillWidth: true
enabled: !object.readOnly
}
}
Repeater {
model: missionItem.nanFacts
FactTextField {
showUnits: true
fact: object
Layout.fillWidth: true
enabled: !isNaN(object.rawValue)
}
}
FactTextField {
fact: missionItem.speedSection.flightSpeed
Layout.fillWidth: true
enabled: flightSpeedCheckbox.checked
visible: missionItem.speedSection.available
}
}
CameraSection {
checked: missionItem.cameraSection.settingsSpecified
visible: missionItem.cameraSection.available
}
}
}
}