13 changed files with 44 additions and 559 deletions
@ -1,268 +0,0 @@
@@ -1,268 +0,0 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* (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.3 |
||||
import QtQuick.Controls 1.2 |
||||
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 |
@ -1,269 +0,0 @@
@@ -1,269 +0,0 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* (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.3 |
||||
|
||||
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