30 changed files with 1016 additions and 109 deletions
@ -0,0 +1,138 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2016 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.4 |
||||||
|
import QtQuick.Controls 1.3 |
||||||
|
import QtQuick.Layouts 1.2 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
import QGroundControl.Vehicle 1.0 |
||||||
|
import QGroundControl.FlightMap 1.0 |
||||||
|
|
||||||
|
QGCListView { |
||||||
|
id: missionItemEditorListView |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight / 2 |
||||||
|
orientation: ListView.Vertical |
||||||
|
model: QGroundControl.multiVehicleManager.vehicles |
||||||
|
cacheBuffer: _cacheBuffer < 0 ? 0 : _cacheBuffer |
||||||
|
clip: true |
||||||
|
|
||||||
|
property real _margin: ScreenTools.defaultFontPixelWidth / 2 |
||||||
|
property real _cacheBuffer: height * 2 |
||||||
|
property real _widgetHeight: ScreenTools.defaultFontPixelHeight * 3 |
||||||
|
|
||||||
|
delegate: Rectangle { |
||||||
|
width: parent.width |
||||||
|
height: innerColumn.y + innerColumn.height + _margin |
||||||
|
color: qgcPal.buttonHighlight |
||||||
|
opacity: 0.8 |
||||||
|
radius: _margin |
||||||
|
|
||||||
|
property var _vehicle: object |
||||||
|
property color _textColor: "black" |
||||||
|
|
||||||
|
QGCPalette { id: qgcPal } |
||||||
|
|
||||||
|
Row { |
||||||
|
id: widgetLayout |
||||||
|
anchors.margins: _margin |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.right: parent.right |
||||||
|
spacing: ScreenTools.defaultFontPixelWidth / 2 |
||||||
|
layoutDirection: Qt.RightToLeft |
||||||
|
|
||||||
|
QGCCompassWidget { |
||||||
|
size: _widgetHeight |
||||||
|
active: true |
||||||
|
heading: _vehicle.heading.rawValue |
||||||
|
} |
||||||
|
|
||||||
|
QGCAttitudeWidget { |
||||||
|
size: _widgetHeight |
||||||
|
active: true |
||||||
|
rollAngle: _vehicle.roll.rawValue |
||||||
|
pitchAngle: _vehicle.pitch.rawValue |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
anchors.top: widgetLayout.top |
||||||
|
anchors.bottom: widgetLayout.bottom |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: widgetLayout.left |
||||||
|
spacing: ScreenTools.defaultFontPixelWidth / 2 |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
Layout.alignment: Qt.AlignTop |
||||||
|
text: _vehicle.id |
||||||
|
color: _textColor |
||||||
|
} |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
text: _vehicle.flightMode |
||||||
|
font.pointSize: ScreenTools.largeFontPointSize |
||||||
|
color: _textColor |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Column { |
||||||
|
id: innerColumn |
||||||
|
anchors.margins: _margin |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.top: widgetLayout.bottom |
||||||
|
spacing: _margin |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
height: 5 |
||||||
|
color: "green" |
||||||
|
} |
||||||
|
|
||||||
|
Row { |
||||||
|
spacing: ScreenTools.defaultFontPixelWidth |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: "Arm" |
||||||
|
visible: !_vehicle.armed |
||||||
|
onClicked: _vehicle.armed = true |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: "Start" |
||||||
|
visible: _vehicle.armed && _vehicle.flightMode != _vehicle.missionFlightMode |
||||||
|
onClicked: _vehicle.flightMode = _vehicle.missionFlightMode |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: "Stop" |
||||||
|
visible: _vehicle.armed && _vehicle.pauseVehicleSupported |
||||||
|
onClicked: _vehicle.pauseVehicle() |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: "RTL" |
||||||
|
visible: _vehicle.armed && _vehicle.flightMode != _vehicle.rtlFlightMode |
||||||
|
onClicked: _vehicle.flightMode = _vehicle.rtlFlightMode |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: "Take control" |
||||||
|
visible: _vehicle.armed && _vehicle.flightMode != _vehicle.takeControlFlightMode |
||||||
|
onClicked: _vehicle.flightMode = _vehicle.takeControlFlightMode |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} // QGCListView |
@ -0,0 +1,268 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2016 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.4 |
||||||
|
import QtQuick.Controls 1.3 |
||||||
|
import QtQuick.Dialogs 1.2 |
||||||
|
import QtQuick.Layouts 1.2 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
import QGroundControl.Controllers 1.0 |
||||||
|
import QGroundControl.FactSystem 1.0 |
||||||
|
|
||||||
|
/// Multi-Vehicle View |
||||||
|
QGCView { |
||||||
|
id: qgcView |
||||||
|
viewPanel: panel |
||||||
|
|
||||||
|
property real _margins: ScreenTools.defaultFontPixelWidth |
||||||
|
property var _fileDialogController |
||||||
|
|
||||||
|
readonly property string _loadingText: qsTr("Loading...") |
||||||
|
|
||||||
|
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } |
||||||
|
|
||||||
|
QGCViewPanel { |
||||||
|
id: panel |
||||||
|
anchors.fill: parent |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
anchors.fill: parent |
||||||
|
color: qgcPal.window |
||||||
|
|
||||||
|
QGCFlickable { |
||||||
|
anchors.fill: parent |
||||||
|
contentHeight: vehicleColumn.height |
||||||
|
flickableDirection: Flickable.VerticalFlick |
||||||
|
clip: true |
||||||
|
|
||||||
|
Column { |
||||||
|
id: vehicleColumn |
||||||
|
anchors.margins: _margins |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.top: parent.top |
||||||
|
spacing: _margins |
||||||
|
|
||||||
|
QGCLabel { text: qsTr("All Vehicles") } |
||||||
|
|
||||||
|
Repeater { |
||||||
|
model: QGroundControl.multiVehicleManager.vehicles |
||||||
|
|
||||||
|
Column { |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight / 2 |
||||||
|
|
||||||
|
MissionController { |
||||||
|
id: missionController |
||||||
|
|
||||||
|
Component.onCompleted: startStaticActiveVehicle(object) |
||||||
|
|
||||||
|
property bool missionAvailable: visualItems && visualItems.count > 1 |
||||||
|
|
||||||
|
function loadFromSelectedFile() { |
||||||
|
if (ScreenTools.isMobile) { |
||||||
|
_fileDialogController = missionController |
||||||
|
qgcView.showDialog(mobileFilePicker, qsTr("Select Mission File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) |
||||||
|
} else { |
||||||
|
missionController.loadFromFilePicker() |
||||||
|
missionController.sendToVehicle() |
||||||
|
} |
||||||
|
} |
||||||
|
} // MissionController |
||||||
|
|
||||||
|
GeoFenceController { |
||||||
|
id: geoFenceController |
||||||
|
|
||||||
|
Component.onCompleted: startStaticActiveVehicle(object) |
||||||
|
|
||||||
|
property bool fenceAvailable: fenceSupported && (circleSupported || polygonSupported) |
||||||
|
|
||||||
|
function loadFromSelectedFile() { |
||||||
|
if (ScreenTools.isMobile) { |
||||||
|
_fileDialogController = geoFenceController |
||||||
|
qgcView.showDialog(mobileFilePicker, qsTr("Select Fence File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) |
||||||
|
} else { |
||||||
|
geoFenceController.loadFromFilePicker() |
||||||
|
geoFenceController.sendToVehicle() |
||||||
|
} |
||||||
|
} |
||||||
|
} // GeoFenceController |
||||||
|
|
||||||
|
RallyPointController { |
||||||
|
id: rallyPointController |
||||||
|
|
||||||
|
Component.onCompleted: startStaticActiveVehicle(object) |
||||||
|
|
||||||
|
property bool pointsAvailable: rallyPointsSupported && points.count |
||||||
|
|
||||||
|
function loadFromSelectedFile() { |
||||||
|
if (ScreenTools.isMobile) { |
||||||
|
_fileDialogController = rallyPointController |
||||||
|
qgcView.showDialog(mobileFilePicker, qsTr("Select Rally Point File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) |
||||||
|
} else { |
||||||
|
rallyPointController.loadFromFilePicker() |
||||||
|
rallyPointController.sendToVehicle() |
||||||
|
} |
||||||
|
} |
||||||
|
} // RallyPointController |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
text: "Vehicle #" + object.id |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
height: vehicleDisplayColumn.height + (_margins * 2) |
||||||
|
color: qgcPal.windowShade |
||||||
|
|
||||||
|
Column { |
||||||
|
id: vehicleDisplayColumn |
||||||
|
anchors.margins: _margins |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.top: parent.top |
||||||
|
|
||||||
|
Row { |
||||||
|
id: indicatorRow |
||||||
|
spacing: _margins |
||||||
|
visible: !object.connectionLost |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
width: missionLabel.contentWidth + _margins |
||||||
|
height: ScreenTools.defaultFontPixelHeight + _margins |
||||||
|
radius: height / 4 |
||||||
|
color: missionController.missionAvailable ? "green" : qgcPal.window |
||||||
|
border.width: 1 |
||||||
|
border.color: qgcPal.text |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
id: missionLabel |
||||||
|
anchors.margins: _margins / 2 |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.top: parent.top |
||||||
|
text: missionController.syncInProgress ? _loadingText : qsTr("Mission") |
||||||
|
} |
||||||
|
|
||||||
|
MouseArea { |
||||||
|
anchors.fill: parent |
||||||
|
enabled: !missionController.syncInProgress |
||||||
|
onClicked: missionController.loadFromSelectedFile() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
width: fenceLabel.contentWidth + _margins |
||||||
|
height: ScreenTools.defaultFontPixelHeight + _margins |
||||||
|
radius: height / 4 |
||||||
|
color: geoFenceController.fenceAvailable ? "green" : qgcPal.window |
||||||
|
border.width: 1 |
||||||
|
border.color: qgcPal.text |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
id: fenceLabel |
||||||
|
anchors.margins: _margins / 2 |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.top: parent.top |
||||||
|
text: geoFenceController.syncInProgress ? _loadingText : qsTr("Fence") |
||||||
|
} |
||||||
|
|
||||||
|
MouseArea { |
||||||
|
anchors.fill: parent |
||||||
|
enabled: !geoFenceController.syncInProgress |
||||||
|
onClicked: geoFenceController.loadFromSelectedFile() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
width: rallyLabel.contentWidth + _margins |
||||||
|
height: ScreenTools.defaultFontPixelHeight + _margins |
||||||
|
radius: height / 4 |
||||||
|
color: rallyPointController.pointsAvailable ? "green" : qgcPal.window |
||||||
|
border.width: 1 |
||||||
|
border.color: qgcPal.text |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
id: rallyLabel |
||||||
|
anchors.margins: _margins / 2 |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.top: parent.top |
||||||
|
text: rallyPointController.syncInProgress ? _loadingText : qsTr("Rally") |
||||||
|
} |
||||||
|
|
||||||
|
MouseArea { |
||||||
|
anchors.fill: parent |
||||||
|
enabled: !rallyPointController.syncInProgress |
||||||
|
onClicked: rallyPointController.loadFromSelectedFile() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FlightModeDropdown { activeVehicle: object } |
||||||
|
|
||||||
|
GuidedBar { activeVehicle: object } |
||||||
|
} // Row - contents display |
||||||
|
|
||||||
|
Flow { |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
layoutDirection: Qt.LeftToRight |
||||||
|
spacing: _margins |
||||||
|
|
||||||
|
Repeater { |
||||||
|
model: [ "battery.voltage", "battery.percentRemaining", "altitudeRelative", "altitudeAMSL", "groundSpeed", "heading"] |
||||||
|
|
||||||
|
Column { |
||||||
|
property Fact fact: object.getFact(modelData) |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
text: fact.shortDescription |
||||||
|
} |
||||||
|
Row { |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
//spacing: ScreenTools.defaultFontPixelWidth |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
text: fact.enumOrValueString |
||||||
|
} |
||||||
|
QGCLabel { |
||||||
|
text: fact.units |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} // Repeater - Small |
||||||
|
} // Flow |
||||||
|
} // Column |
||||||
|
} // Rectangle - contents display |
||||||
|
} // Column - layout for vehicle |
||||||
|
} // Repeater - vehicle repeater |
||||||
|
} // Column |
||||||
|
} // QGCFlickable |
||||||
|
} // Rectangle - View background |
||||||
|
} // QGCViewPanel |
||||||
|
|
||||||
|
Component { |
||||||
|
id: mobileFilePicker |
||||||
|
|
||||||
|
QGCMobileFileDialog { |
||||||
|
openDialog: true |
||||||
|
fileExtension: _fileDialogController.fileExtension |
||||||
|
|
||||||
|
onFilenameReturned: { |
||||||
|
_fileDialogController.loadFromFile(filename) |
||||||
|
_fileDialogController.sendToVehicle() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} // QGCView |
@ -0,0 +1,65 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2016 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.5 |
||||||
|
|
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
|
||||||
|
Item { |
||||||
|
width: flightModeLabel.visible ? flightModeLabel.width : flightModeCombo.width |
||||||
|
height: flightModeLabel.visible ? flightModeLabel.height : flightModeCombo.height |
||||||
|
|
||||||
|
property var activeVehicle ///< Vehicle to show flight modes for |
||||||
|
|
||||||
|
property int _maxFMCharLength: 10 ///< Maximum number of chars in a flight mode |
||||||
|
property string flightMode: activeVehicle ? activeVehicle.flightMode : qsTr("N/A", "No data to display") |
||||||
|
|
||||||
|
onActiveVehicleChanged: _activeVehicleChanged() |
||||||
|
|
||||||
|
onFlightModeChanged: { |
||||||
|
if (flightModeCombo.visible) { |
||||||
|
flightModeCombo.currentIndex = flightModeCombo.find(flightMode) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Component.onCompleted: _activeVehicleChanged() |
||||||
|
|
||||||
|
function _activeVehicleChanged() { |
||||||
|
if (activeVehicle.flightModeSetAvailable) { |
||||||
|
var maxFMChars = 0 |
||||||
|
for (var i=0; i<activeVehicle.flightModes.length; i++) { |
||||||
|
maxFMChars = Math.max(maxFMChars, activeVehicle.flightModes[i].length) |
||||||
|
} |
||||||
|
_maxFMCharLength = maxFMChars |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
id: flightModeLabel |
||||||
|
text: flightMode |
||||||
|
visible: !activeVehicle.flightModeSetAvailable |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
} |
||||||
|
|
||||||
|
QGCComboBox { |
||||||
|
id: flightModeCombo |
||||||
|
width: (_maxFMCharLength + 4) * ScreenTools.defaultFontPixelWidth |
||||||
|
model: activeVehicle ? activeVehicle.flightModes : 0 |
||||||
|
visible: activeVehicle.flightModeSetAvailable |
||||||
|
|
||||||
|
onModelChanged: { |
||||||
|
if (activeVehicle && visible) { |
||||||
|
currentIndex = find(flightMode) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
onActivated: activeVehicle.flightMode = textAt(index) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,269 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2016 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.5 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
|
||||||
|
//-- Guided mode bar |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
id: guidedModeBar |
||||||
|
width: guidedModeColumn.width + (_margins * 2) |
||||||
|
height: guidedModeColumn.height + (_margins * 2) |
||||||
|
radius: ScreenTools.defaultFontPixelHeight * 0.25 |
||||||
|
color: backgroundColor |
||||||
|
|
||||||
|
property var activeVehicle ///< Vehicle to show guided bar for |
||||||
|
property real fontPointSize: ScreenTools.defaultFontPointSize ///< point size for fonts in control |
||||||
|
property color backgroundColor: qgcPal.windowShadeDark ///< Background color for bar |
||||||
|
|
||||||
|
// Values for _confirmActionCode |
||||||
|
readonly property int confirmHome: 1 |
||||||
|
readonly property int confirmLand: 2 |
||||||
|
readonly property int confirmTakeoff: 3 |
||||||
|
readonly property int confirmArm: 4 |
||||||
|
readonly property int confirmDisarm: 5 |
||||||
|
readonly property int confirmEmergencyStop: 6 |
||||||
|
readonly property int confirmChangeAlt: 7 |
||||||
|
readonly property int confirmGoTo: 8 |
||||||
|
readonly property int confirmRetask: 9 |
||||||
|
readonly property int confirmOrbit: 10 |
||||||
|
|
||||||
|
property int _confirmActionCode |
||||||
|
property real _showMargin: _margins |
||||||
|
property real _hideMargin: _margins - guidedModeBar.height |
||||||
|
property real _barMargin: _showMargin |
||||||
|
property bool _showConfirm: false |
||||||
|
property string _confirmText |
||||||
|
property bool _showAltitude: false |
||||||
|
property real _confirmAltitude |
||||||
|
|
||||||
|
function actionConfirmed(altitude) { |
||||||
|
_showConfirm = false |
||||||
|
switch (_confirmActionCode) { |
||||||
|
case confirmHome: |
||||||
|
activeVehicle.guidedModeRTL() |
||||||
|
break; |
||||||
|
case confirmLand: |
||||||
|
activeVehicle.guidedModeLand() |
||||||
|
break; |
||||||
|
case confirmTakeoff: |
||||||
|
activeVehicle.guidedModeTakeoff(altitude) |
||||||
|
break; |
||||||
|
case confirmArm: |
||||||
|
activeVehicle.armed = true |
||||||
|
break; |
||||||
|
case confirmDisarm: |
||||||
|
activeVehicle.armed = false |
||||||
|
break; |
||||||
|
case confirmEmergencyStop: |
||||||
|
activeVehicle.emergencyStop() |
||||||
|
break; |
||||||
|
case confirmChangeAlt: |
||||||
|
activeVehicle.guidedModeChangeAltitude(altitude) |
||||||
|
break; |
||||||
|
case confirmGoTo: |
||||||
|
activeVehicle.guidedModeGotoLocation(_flightMap._gotoHereCoordinate) |
||||||
|
break; |
||||||
|
case confirmRetask: |
||||||
|
activeVehicle.setCurrentMissionSequence(_flightMap._retaskSequence) |
||||||
|
break; |
||||||
|
case confirmOrbit: |
||||||
|
//-- All parameters controlled by RC |
||||||
|
activeVehicle.guidedModeOrbit() |
||||||
|
//-- Center on current flight map position and orbit with a 50m radius (velocity/direction controlled by the RC) |
||||||
|
//activeVehicle.guidedModeOrbit(QGroundControl.flightMapPosition, 50.0) |
||||||
|
break; |
||||||
|
default: |
||||||
|
console.warn(qsTr("Internal error: unknown _confirmActionCode"), _confirmActionCode) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function actionRejected() { |
||||||
|
_showConfirm = false |
||||||
|
/* |
||||||
|
altitudeSlider.visible = false |
||||||
|
_flightMap._gotoHereCoordinate = QtPositioning.coordinate() |
||||||
|
guidedModeHideTimer.restart() |
||||||
|
*/ |
||||||
|
} |
||||||
|
|
||||||
|
function confirmAction(actionCode) { |
||||||
|
//guidedModeHideTimer.stop() |
||||||
|
_confirmActionCode = actionCode |
||||||
|
_showAltitude = false |
||||||
|
switch (_confirmActionCode) { |
||||||
|
case confirmArm: |
||||||
|
_confirmText = qsTr("Arm vehicle?") |
||||||
|
break; |
||||||
|
case confirmDisarm: |
||||||
|
_confirmText = qsTr("Disarm vehicle?") |
||||||
|
break; |
||||||
|
case confirmEmergencyStop: |
||||||
|
_confirmText = qsTr("STOP ALL MOTORS?") |
||||||
|
break; |
||||||
|
case confirmTakeoff: |
||||||
|
_showAltitude = true |
||||||
|
setInitialValueMeters(3) |
||||||
|
_confirmText = qsTr("Takeoff vehicle?") |
||||||
|
break; |
||||||
|
case confirmLand: |
||||||
|
_confirmText = qsTr("Land vehicle?") |
||||||
|
break; |
||||||
|
case confirmHome: |
||||||
|
_confirmText = qsTr("Return to land?") |
||||||
|
break; |
||||||
|
case confirmChangeAlt: |
||||||
|
_showAltitude = true |
||||||
|
setInitialValueAppSettingsDistanceUnits(activeVehicle.altitudeRelative.value) |
||||||
|
_confirmText = qsTr("Change altitude?") |
||||||
|
break; |
||||||
|
case confirmGoTo: |
||||||
|
_confirmText = qsTr("Move vehicle?") |
||||||
|
break; |
||||||
|
case confirmRetask: |
||||||
|
_confirmText = qsTr("Change active waypoint?") |
||||||
|
break; |
||||||
|
case confirmOrbit: |
||||||
|
_confirmText = qsTr("Enter orbit mode?") |
||||||
|
break; |
||||||
|
} |
||||||
|
_showConfirm = true |
||||||
|
} |
||||||
|
|
||||||
|
function setInitialValueMeters(meters) { |
||||||
|
_confirmAltitude = QGroundControl.metersToAppSettingsDistanceUnits(meters) |
||||||
|
} |
||||||
|
|
||||||
|
function setInitialValueAppSettingsDistanceUnits(height) { |
||||||
|
_confirmAltitude = height |
||||||
|
} |
||||||
|
|
||||||
|
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } |
||||||
|
|
||||||
|
Column { |
||||||
|
id: guidedModeColumn |
||||||
|
anchors.margins: _margins |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.left: parent.left |
||||||
|
spacing: _margins |
||||||
|
|
||||||
|
/* |
||||||
|
QGCLabel { |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
color: _lightWidgetBorders ? qgcPal.mapWidgetBorderDark : qgcPal.mapWidgetBorderLight |
||||||
|
text: "Click in map to move vehicle" |
||||||
|
visible: gotoEnabled |
||||||
|
}*/ |
||||||
|
|
||||||
|
Row { |
||||||
|
spacing: _margins * 2 |
||||||
|
visible: !_showConfirm |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: (activeVehicle && activeVehicle.armed) ? (activeVehicle.flying ? qsTr("Emergency Stop") : qsTr("Disarm")) : qsTr("Arm") |
||||||
|
visible: activeVehicle |
||||||
|
onClicked: confirmAction(activeVehicle.armed ? (activeVehicle.flying ? confirmEmergencyStop : confirmDisarm) : confirmArm) |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: qsTr("RTL") |
||||||
|
visible: (activeVehicle && activeVehicle.armed) && activeVehicle.guidedModeSupported && activeVehicle.flying |
||||||
|
onClicked: confirmAction(confirmHome) |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: (activeVehicle && activeVehicle.flying) ? qsTr("Land"): qsTr("Takeoff") |
||||||
|
visible: activeVehicle && activeVehicle.guidedModeSupported && activeVehicle.armed |
||||||
|
onClicked: confirmAction(activeVehicle.flying ? confirmLand : confirmTakeoff) |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: qsTr("Pause") |
||||||
|
visible: (activeVehicle && activeVehicle.armed) && activeVehicle.pauseVehicleSupported && activeVehicle.flying |
||||||
|
onClicked: { |
||||||
|
guidedModeHideTimer.restart() |
||||||
|
activeVehicle.pauseVehicle() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: qsTr("Change Altitude") |
||||||
|
visible: (activeVehicle && activeVehicle.flying) && activeVehicle.guidedModeSupported && activeVehicle.armed |
||||||
|
onClicked: confirmAction(confirmChangeAlt) |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
pointSize: fontPointSize |
||||||
|
text: qsTr("Orbit") |
||||||
|
visible: (activeVehicle && activeVehicle.flying) && activeVehicle.orbitModeSupported && activeVehicle.armed |
||||||
|
onClicked: confirmAction(confirmOrbit) |
||||||
|
} |
||||||
|
|
||||||
|
} // Row |
||||||
|
|
||||||
|
Column { |
||||||
|
visible: _showConfirm |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
text: _confirmText |
||||||
|
} |
||||||
|
|
||||||
|
Row { |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
spacing: ScreenTools.defaultFontPixelWidth |
||||||
|
|
||||||
|
Row { |
||||||
|
visible: _showAltitude |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Alt (rel)") |
||||||
|
} |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
text: QGroundControl.appSettingsDistanceUnitsString |
||||||
|
} |
||||||
|
|
||||||
|
QGCTextField { |
||||||
|
id: altField |
||||||
|
text: _confirmAltitude.toFixed(1) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: qsTr("Yes") |
||||||
|
|
||||||
|
onClicked: { |
||||||
|
var value = parseFloat(altField.text) |
||||||
|
if (isNaN(value)) { |
||||||
|
actionRejected() |
||||||
|
} else { |
||||||
|
actionConfirmed(QGroundControl.appSettingsDistanceUnitsToMeters(value)) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
text: qsTr("No") |
||||||
|
onClicked: actionRejected() |
||||||
|
} |
||||||
|
} |
||||||
|
} // Column |
||||||
|
} // Column |
||||||
|
} // Rectangle - Guided mode buttons |
Loading…
Reference in new issue