3 changed files with 0 additions and 538 deletions
@ -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 @@ |
|||||||
/**************************************************************************** |
|
||||||
* |
|
||||||
* (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