地面站终端 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.

259 lines
12 KiB

/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.3
import QtQuick.Layouts 1.11
import QGroundControl 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
Item {
width: mainCol.width + (ScreenTools.defaultFontPixelWidth * 2)
height: mainCol.height + (ScreenTools.defaultFontPixelHeight * 2)
readonly property real axisMonitorWidth: ScreenTools.defaultFontPixelWidth * 32
Column {
id: mainCol
anchors.centerIn: parent
spacing: ScreenTools.defaultFontPixelHeight
GridLayout {
columns: 2
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: ScreenTools.defaultFontPixelHeight
//---------------------------------------------------------------------
//-- Enable Joystick
QGCLabel {
text: _activeJoystick ? _activeJoystick.calibrated ? qsTr("Enable joystick input") : qsTr("Enable not allowed (Calibrate First)") : ""
Layout.alignment: Qt.AlignVCenter
Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 36
}
QGCCheckBox {
id: enabledSwitch
enabled: _activeJoystick ? _activeJoystick.calibrated : false
onClicked: {
globals.activeVehicle.joystickEnabled = checked
globals.activeVehicle.saveJoystickSettings()
}
Component.onCompleted: {
checked = globals.activeVehicle.joystickEnabled
}
Connections {
target: globals.activeVehicle
onJoystickEnabledChanged: {
enabledSwitch.checked = globals.activeVehicle.joystickEnabled
}
}
Connections {
target: joystickManager
onActiveJoystickChanged: {
if(_activeJoystick) {
enabledSwitch.checked = Qt.binding(function() { return _activeJoystick.calibrated && globals.activeVehicle.joystickEnabled })
}
}
}
}
//---------------------------------------------------------------------
//-- Joystick Selector
QGCLabel {
text: qsTr("Active joystick:")
Layout.alignment: Qt.AlignVCenter
}
QGCComboBox {
id: joystickCombo
width: ScreenTools.defaultFontPixelWidth * 40
Layout.alignment: Qt.AlignVCenter
model: joystickManager.joystickNames
onActivated: joystickManager.activeJoystickName = textAt(index)
Component.onCompleted: {
var index = joystickCombo.find(joystickManager.activeJoystickName)
if (index === -1) {
console.warn(qsTr("Active joystick name not in combo"), joystickManager.activeJoystickName)
} else {
joystickCombo.currentIndex = index
}
}
Connections {
target: joystickManager
onAvailableJoysticksChanged: {
var index = joystickCombo.find(joystickManager.activeJoystickName)
if (index >= 0) {
joystickCombo.currentIndex = index
}
}
}
}
//---------------------------------------------------------------------
//-- RC Mode
QGCLabel {
text: qsTr("RC Mode:")
Layout.alignment: Qt.AlignVCenter
}
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCRadioButton {
text: "1"
checked: controller.transmitterMode === 1
enabled: !controller.calibrating
onClicked: controller.transmitterMode = 1
anchors.verticalCenter: parent.verticalCenter
}
QGCRadioButton {
text: "2"
checked: controller.transmitterMode === 2
enabled: !controller.calibrating
onClicked: controller.transmitterMode = 2
anchors.verticalCenter: parent.verticalCenter
}
QGCRadioButton {
text: "3"
checked: controller.transmitterMode === 3
enabled: !controller.calibrating
onClicked: controller.transmitterMode = 3
anchors.verticalCenter: parent.verticalCenter
}
QGCRadioButton {
text: "4"
checked: controller.transmitterMode === 4
enabled: !controller.calibrating
onClicked: controller.transmitterMode = 4
anchors.verticalCenter: parent.verticalCenter
}
}
}
Row {
spacing: ScreenTools.defaultFontPixelWidth
//---------------------------------------------------------------------
//-- Axis Monitors
Rectangle {
id: axisRect
color: Qt.rgba(0,0,0,0)
border.color: qgcPal.text
border.width: 1
radius: ScreenTools.defaultFontPixelWidth * 0.5
width: axisGrid.width + (ScreenTools.defaultFontPixelWidth * 2)
height: axisGrid.height + (ScreenTools.defaultFontPixelHeight * 2)
GridLayout {
id: axisGrid
columns: 2
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: ScreenTools.defaultFontPixelHeight
anchors.centerIn: parent
QGCLabel {
text: globals.activeVehicle.sub ? qsTr("Lateral") : qsTr("Roll")
Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 12
}
AxisMonitor {
id: rollAxis
height: ScreenTools.defaultFontPixelHeight
width: axisMonitorWidth
mapped: controller.rollAxisMapped
reversed: controller.rollAxisReversed
}
QGCLabel {
id: pitchLabel
width: _attitudeLabelWidth
text: globals.activeVehicle.sub ? qsTr("Forward") : qsTr("Pitch")
}
AxisMonitor {
id: pitchAxis
height: ScreenTools.defaultFontPixelHeight
width: axisMonitorWidth
mapped: controller.pitchAxisMapped
reversed: controller.pitchAxisReversed
}
QGCLabel {
id: yawLabel
width: _attitudeLabelWidth
text: qsTr("Yaw")
}
AxisMonitor {
id: yawAxis
height: ScreenTools.defaultFontPixelHeight
width: axisMonitorWidth
mapped: controller.yawAxisMapped
reversed: controller.yawAxisReversed
}
QGCLabel {
id: throttleLabel
width: _attitudeLabelWidth
text: qsTr("Throttle")
}
AxisMonitor {
id: throttleAxis
height: ScreenTools.defaultFontPixelHeight
width: axisMonitorWidth
mapped: controller.throttleAxisMapped
reversed: controller.throttleAxisReversed
}
Connections {
target: _activeJoystick
onAxisValues: {
rollAxis.axisValue = roll * 32768.0
pitchAxis.axisValue = pitch * 32768.0
yawAxis.axisValue = yaw * 32768.0
throttleAxis.axisValue = _activeJoystick.negativeThrust ? throttle * -32768.0 : (-2 * throttle + 1) * 32768.0
}
}
}
}
Rectangle {
color: Qt.rgba(0,0,0,0)
border.color: qgcPal.text
border.width: 1
radius: ScreenTools.defaultFontPixelWidth * 0.5
width: axisRect.width
height: axisRect.height
Flow {
width: ScreenTools.defaultFontPixelWidth * 30
spacing: -1
anchors.centerIn: parent
Connections {
target: _activeJoystick
onRawButtonPressedChanged: {
if (buttonMonitorRepeater.itemAt(index)) {
buttonMonitorRepeater.itemAt(index).pressed = pressed
}
}
}
Repeater {
id: buttonMonitorRepeater
model: _activeJoystick ? _activeJoystick.totalButtonCount : []
Rectangle {
width: ScreenTools.defaultFontPixelHeight * 1.5
height: width
border.width: 1
border.color: qgcPal.text
color: pressed ? qgcPal.buttonHighlight : qgcPal.windowShade
property bool pressed
QGCLabel {
anchors.fill: parent
color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: modelData
}
}
}
}
}
}
}
}