地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

303 lines
15 KiB

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.2
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
import QGroundControl.SettingsManager 1.0
import QGroundControl.Controllers 1.0
// Editor for Mission Settings
Rectangle {
id: valuesRect
width: availableWidth
height: valuesColumn.height + (_margin * 2)
color: qgcPal.windowShadeDark
visible: missionItem.isCurrentItem
radius: _radius
property var _masterControler: masterController
property var _missionController: _masterControler.missionController
property var _controllerVehicle: _masterControler.controllerVehicle
property bool _vehicleHasHomePosition: _controllerVehicle.homePosition.isValid
property bool _showCruiseSpeed: !_controllerVehicle.multiRotor
property bool _showHoverSpeed: _controllerVehicle.multiRotor || _controllerVehicle.vtol
property bool _multipleFirmware: !QGroundControl.singleFirmwareSupport
property bool _multipleVehicleTypes: !QGroundControl.singleVehicleSupport
property real _fieldWidth: ScreenTools.defaultFontPixelWidth * 16
property bool _mobile: ScreenTools.isMobile
property var _savePath: QGroundControl.settingsManager.appSettings.missionSavePath
property var _fileExtension: QGroundControl.settingsManager.appSettings.missionFileExtension
property var _appSettings: QGroundControl.settingsManager.appSettings
property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly
property bool _showCameraSection: (_waypointsOnlyMode || QGroundControl.corePlugin.showAdvancedUI) && !_controllerVehicle.apmFirmware
property bool _simpleMissionStart: QGroundControl.corePlugin.options.showSimpleMissionStart
property bool _showFlightSpeed: !_controllerVehicle.vtol && !_simpleMissionStart && !_controllerVehicle.apmFirmware
readonly property string _firmwareLabel: qsTr("Firmware")
readonly property string _vehicleLabel: qsTr("Vehicle")
readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2
QGCPalette { id: qgcPal }
QGCFileDialogController { id: fileController }
ColumnLayout {
id: valuesColumn
anchors.margins: _margin
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
spacing: _margin
QGCLabel {
text: qsTr("All Altitudes")
font.pointSize: ScreenTools.smallFontPointSize
}
QGCComboBox {
id: altModeCombo
model: enumStrings
Layout.fillWidth: true
enabled: _noMissionItemsAdded
onActivated: _missionController.globalAltitudeMode = enumValues[index]
Component.onCompleted: buildEnumStrings()
readonly property var enumStringsBase: [ QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeRelative),
QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAbsolute),
QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeAboveTerrain),
QGroundControl.altitudeModeShortDescription(QGroundControl.AltitudeModeTerrainFrame),
qsTr("Mixed Modes") ]
readonly property var enumValuesBase: [QGroundControl.AltitudeModeRelative, QGroundControl.AltitudeModeAbsolute, QGroundControl.AltitudeModeAboveTerrain, QGroundControl.AltitudeModeTerrainFrame, QGroundControl.AltitudeModeNone ]
property var enumStrings: [ ]
property var enumValues: [ ]
function buildEnumStrings() {
var newEnumStrings = enumStringsBase.slice(0)
var newEnumValues = enumValuesBase.slice(0)
if (!_controllerVehicle.supportsTerrainFrame) {
// We need to find and pull out the QGroundControl.AltitudeModeTerrainFrame values
var deleteIndex = newEnumValues.lastIndexOf(QGroundControl.AltitudeModeTerrainFrame)
newEnumStrings.splice(deleteIndex, 1)
newEnumValues.splice(deleteIndex, 1)
if (_missionController.globalAltitudeMode == QGroundControl.AltitudeModeTerrainFrame) {
_missionController.globalAltitudeMode = QGroundControl.AltitudeModeAboveTerrain
}
}
enumStrings = newEnumStrings
enumValues = newEnumValues
currentIndex = enumValues.lastIndexOf(_missionController.globalAltitudeMode)
}
Connections {
target: _controllerVehicle
onSupportsTerrainFrameChanged: altModeCombo.buildEnumStrings()
}
}
QGCLabel {
Layout.fillWidth: true
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
font.pointSize: ScreenTools.smallFontPointSize
text: switch(_missionController.globalAltitudeMode) {
case QGroundControl.AltitudeModeAboveTerrain:
qsTr("Specified altitudes are distance above terrain. Actual altitudes sent to vehicle are calculated from terrain data and sent in AMSL")
break
case QGroundControl.AltitudeModeTerrainFrame:
qsTr("Specified altitudes are distance above terrain. The actual altitude flown is controlled by the vehicle either from terrain height maps being sent to vehicle or a distance sensor.")
break
case QGroundControl.AltitudeModeNone:
qsTr("The altitude mode can differ for each individual item.")
break
default:
""
break
}
visible: _missionController.globalAltitudeMode == QGroundControl.AltitudeModeAboveTerrain || _missionController.globalAltitudeMode == QGroundControl.AltitudeModeTerrainFrame || _missionController.globalAltitudeMode == QGroundControl.AltitudeModeNone
}
QGCLabel {
text: qsTr("Initial Waypoint Alt")
font.pointSize: ScreenTools.smallFontPointSize
}
AltitudeFactTextField {
fact: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
altitudeMode: _missionController.globalAltitudeModeDefault
Layout.fillWidth: true
}
GridLayout {
Layout.fillWidth: true
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: columnSpacing
columns: 2
QGCCheckBox {
id: flightSpeedCheckBox
text: qsTr("Flight speed")
visible: _showFlightSpeed
checked: missionItem.speedSection.specifyFlightSpeed
onClicked: missionItem.speedSection.specifyFlightSpeed = checked
}
FactTextField {
Layout.fillWidth: true
fact: missionItem.speedSection.flightSpeed
visible: _showFlightSpeed
enabled: flightSpeedCheckBox.checked
}
}
Column {
Layout.fillWidth: true
spacing: _margin
visible: !_simpleMissionStart
CameraSection {
id: cameraSection
checked: !_waypointsOnlyMode && missionItem.cameraSection.settingsSpecified
visible: _showCameraSection
}
QGCLabel {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Above camera commands will take affect immediately upon mission start.")
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
font.pointSize: ScreenTools.smallFontPointSize
visible: _showCameraSection && cameraSection.checked
}
SectionHeader {
id: vehicleInfoSectionHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Vehicle Info")
visible: !_waypointsOnlyMode
checked: false
}
GridLayout {
anchors.left: parent.left
anchors.right: parent.right
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: columnSpacing
columns: 2
visible: vehicleInfoSectionHeader.visible && vehicleInfoSectionHeader.checked
QGCLabel {
text: _firmwareLabel
Layout.fillWidth: true
visible: _multipleFirmware
}
FactComboBox {
fact: QGroundControl.settingsManager.appSettings.offlineEditingFirmwareClass
indexModel: false
Layout.preferredWidth: _fieldWidth
visible: _multipleFirmware && _noMissionItemsAdded
}
QGCLabel {
text: _controllerVehicle.firmwareTypeString
visible: _multipleFirmware && !_noMissionItemsAdded
}
QGCLabel {
text: _vehicleLabel
Layout.fillWidth: true
visible: _multipleVehicleTypes
}
FactComboBox {
fact: QGroundControl.settingsManager.appSettings.offlineEditingVehicleClass
indexModel: false
Layout.preferredWidth: _fieldWidth
visible: _multipleVehicleTypes && _noMissionItemsAdded
}
QGCLabel {
text: _controllerVehicle.vehicleTypeString
visible: _multipleVehicleTypes && !_noMissionItemsAdded
}
QGCLabel {
Layout.columnSpan: 2
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.smallFontPointSize
text: qsTr("The following speed values are used to calculate total mission time. They do not affect the flight speed for the mission.")
visible: _showCruiseSpeed || _showHoverSpeed
}
QGCLabel {
text: qsTr("Cruise speed")
visible: _showCruiseSpeed
Layout.fillWidth: true
}
FactTextField {
fact: QGroundControl.settingsManager.appSettings.offlineEditingCruiseSpeed
visible: _showCruiseSpeed
Layout.preferredWidth: _fieldWidth
}
QGCLabel {
text: qsTr("Hover speed")
visible: _showHoverSpeed
Layout.fillWidth: true
}
FactTextField {
fact: QGroundControl.settingsManager.appSettings.offlineEditingHoverSpeed
visible: _showHoverSpeed
Layout.preferredWidth: _fieldWidth
}
} // GridLayout
SectionHeader {
id: plannedHomePositionSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Launch Position")
visible: !_vehicleHasHomePosition
checked: false
}
Column {
anchors.left: parent.left
anchors.right: parent.right
spacing: _margin
visible: plannedHomePositionSection.checked && !_vehicleHasHomePosition
GridLayout {
anchors.left: parent.left
anchors.right: parent.right
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: columnSpacing
columns: 2
QGCLabel {
text: qsTr("Altitude")
}
FactTextField {
fact: missionItem.plannedHomePositionAltitude
Layout.fillWidth: true
}
}
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.smallFontPointSize
text: qsTr("Actual position set by vehicle at flight time.")
horizontalAlignment: Text.AlignHCenter
}
QGCButton {
text: qsTr("Set To Map Center")
onClicked: missionItem.coordinate = map.center
anchors.horizontalCenter: parent.horizontalCenter
}
}
} // Column
} // Column
} // Rectangle