Commit 1723a2d2 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4845 from DonLakeFlyer/ClickToSetNewMissionItem

Fly: Click to set new mission item
parents 34b4f681 161607d8
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
<file alias="MixersComponent.qml">src/AutoPilotPlugins/Common/MixersComponent.qml</file> <file alias="MixersComponent.qml">src/AutoPilotPlugins/Common/MixersComponent.qml</file>
<file alias="MockLink.qml">src/ui/preferences/MockLink.qml</file> <file alias="MockLink.qml">src/ui/preferences/MockLink.qml</file>
<file alias="MockLinkSettings.qml">src/ui/preferences/MockLinkSettings.qml</file> <file alias="MockLinkSettings.qml">src/ui/preferences/MockLinkSettings.qml</file>
<file alias="MultiVehicleView.qml">src/MultiVehicle/MultiVehicleView.qml</file>
<file alias="MotorComponent.qml">src/AutoPilotPlugins/Common/MotorComponent.qml</file> <file alias="MotorComponent.qml">src/AutoPilotPlugins/Common/MotorComponent.qml</file>
<file alias="OfflineMap.qml">src/QtLocationPlugin/QMLControl/OfflineMap.qml</file> <file alias="OfflineMap.qml">src/QtLocationPlugin/QMLControl/OfflineMap.qml</file>
<file alias="PowerComponent.qml">src/AutoPilotPlugins/PX4/PowerComponent.qml</file> <file alias="PowerComponent.qml">src/AutoPilotPlugins/PX4/PowerComponent.qml</file>
...@@ -58,7 +57,6 @@ ...@@ -58,7 +57,6 @@
<file alias="QGroundControl/Controls/FWLandingPatternMapVisual.qml">src/MissionEditor/FWLandingPatternMapVisual.qml</file> <file alias="QGroundControl/Controls/FWLandingPatternMapVisual.qml">src/MissionEditor/FWLandingPatternMapVisual.qml</file>
<file alias="QGroundControl/Controls/GeoFenceEditor.qml">src/MissionEditor/GeoFenceEditor.qml</file> <file alias="QGroundControl/Controls/GeoFenceEditor.qml">src/MissionEditor/GeoFenceEditor.qml</file>
<file alias="QGroundControl/Controls/GeoFenceMapVisuals.qml">src/MissionEditor/GeoFenceMapVisuals.qml</file> <file alias="QGroundControl/Controls/GeoFenceMapVisuals.qml">src/MissionEditor/GeoFenceMapVisuals.qml</file>
<file alias="QGroundControl/Controls/GuidedBar.qml">src/QmlControls/GuidedBar.qml</file>
<file alias="QGroundControl/Controls/IndicatorButton.qml">src/QmlControls/IndicatorButton.qml</file> <file alias="QGroundControl/Controls/IndicatorButton.qml">src/QmlControls/IndicatorButton.qml</file>
<file alias="QGroundControl/Controls/JoystickThumbPad.qml">src/QmlControls/JoystickThumbPad.qml</file> <file alias="QGroundControl/Controls/JoystickThumbPad.qml">src/QmlControls/JoystickThumbPad.qml</file>
<file alias="QGroundControl/Controls/MainToolBar.qml">src/ui/toolbar/MainToolBar.qml</file> <file alias="QGroundControl/Controls/MainToolBar.qml">src/ui/toolbar/MainToolBar.qml</file>
......
...@@ -257,7 +257,12 @@ FlightMap { ...@@ -257,7 +257,12 @@ FlightMap {
model: _mainIsMap ? missionController.visualItems : 0 model: _mainIsMap ? missionController.visualItems : 0
delegate: MissionItemMapVisual { delegate: MissionItemMapVisual {
map: flightMap map: flightMap
onClicked: {
_retaskSequence = object.sequenceNumber
flightWidgets.guidedModeBar.confirmAction(parent.flightWidgets.guidedModeBar.confirmRetask)
}
} }
} }
......
...@@ -318,7 +318,7 @@ Item { ...@@ -318,7 +318,7 @@ Item {
guidedModeConfirm.confirmText = qsTr("move vehicle") guidedModeConfirm.confirmText = qsTr("move vehicle")
break; break;
case confirmRetask: case confirmRetask:
guidedModeConfirm.confirmText = qsTr("active waypoint change") guidedModeConfirm.confirmText = qsTr("activate waypoint change")
break; break;
case confirmOrbit: case confirmOrbit:
guidedModeConfirm.confirmText = qsTr("enter orbit mode") guidedModeConfirm.confirmText = qsTr("enter orbit mode")
......
...@@ -20,8 +20,12 @@ import QGroundControl.FlightMap 1.0 ...@@ -20,8 +20,12 @@ import QGroundControl.FlightMap 1.0
/// Fixed Wing Landing Pattern map visuals /// Fixed Wing Landing Pattern map visuals
Item { Item {
id: _root
property var map ///< Map control to place item in property var map ///< Map control to place item in
signal clicked(int sequenceNumber)
property var _missionItem: object property var _missionItem: object
property var _itemVisuals: [ ] property var _itemVisuals: [ ]
property var _mouseArea property var _mouseArea
...@@ -208,7 +212,7 @@ Item { ...@@ -208,7 +212,7 @@ Item {
label: "Loiter" label: "Loiter"
checked: _missionItem.isCurrentItem checked: _missionItem.isCurrentItem
onClicked: setCurrentItem(_missionItem.sequenceNumber) onClicked: _root.clicked(_missionItem.sequenceNumber)
} }
} }
} }
...@@ -243,7 +247,7 @@ Item { ...@@ -243,7 +247,7 @@ Item {
label: "Land" label: "Land"
checked: _missionItem.isCurrentItem checked: _missionItem.isCurrentItem
onClicked: setCurrentItem(_missionItem.sequenceNumber) onClicked: _root.clicked(_missionItem.sequenceNumber)
} }
} }
} }
......
...@@ -49,7 +49,7 @@ QGCView { ...@@ -49,7 +49,7 @@ QGCView {
property var activeVehiclePosition: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate() property var activeVehiclePosition: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
property bool _lightWidgetBorders: editorMap.isSatelliteMap property bool _lightWidgetBorders: editorMap.isSatelliteMap
property bool _addWaypointOnClick: false property bool _addWaypointOnClick: false
property bool _singleComplexItem: missionController.complexMissionItemNames.length == 1 property bool _singleComplexItem: missionController.complexMissionItemNames.length === 1
/// The controller which should be called for load/save, send to/from vehicle calls /// The controller which should be called for load/save, send to/from vehicle calls
property var _syncDropDownController: missionController property var _syncDropDownController: missionController
...@@ -459,7 +459,8 @@ QGCView { ...@@ -459,7 +459,8 @@ QGCView {
model: missionController.visualItems model: missionController.visualItems
delegate: MissionItemMapVisual { delegate: MissionItemMapVisual {
map: editorMap map: editorMap
onClicked: setCurrentItem(sequenceNumber)
} }
} }
...@@ -702,6 +703,10 @@ QGCView { ...@@ -702,6 +703,10 @@ QGCView {
property bool _showZoom: !ScreenTools.isMobile property bool _showZoom: !ScreenTools.isMobile
property bool mySingleComplexItem: _singleComplexItem
onMySingleComplexItemChanged: console.log(model[1].dropPanelComponent)
model: [ model: [
{ {
name: "Waypoint", name: "Waypoint",
......
...@@ -17,12 +17,14 @@ import QGroundControl.Palette 1.0 ...@@ -17,12 +17,14 @@ import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
/// Mission item edit control /// Mission item map visual
Item { Item {
id: _root id: _root
property var map ///< Map control to place item in property var map ///< Map control to place item in
signal clicked(int sequenceNumber)
property var _visualItem property var _visualItem
Component.onCompleted: { Component.onCompleted: {
...@@ -32,6 +34,7 @@ Item { ...@@ -32,6 +34,7 @@ Item {
console.log("Error loading Qml: ", object.mapVisualQML, component.errorString()) console.log("Error loading Qml: ", object.mapVisualQML, component.errorString())
} }
_visualItem = component.createObject(map, { "map": _root.map }) _visualItem = component.createObject(map, { "map": _root.map })
_visualItem.clicked.connect(_root.clicked)
} }
} }
......
...@@ -20,8 +20,12 @@ import QGroundControl.FlightMap 1.0 ...@@ -20,8 +20,12 @@ import QGroundControl.FlightMap 1.0
/// Mission Settings map visuals /// Mission Settings map visuals
Item { Item {
id: _root
property var map ///< Map control to place item in property var map ///< Map control to place item in
signal clicked(int sequenceNumber)
property var _missionItem: object property var _missionItem: object
property var _itemVisual property var _itemVisual
property var _dragArea property var _dragArea
...@@ -103,7 +107,7 @@ Item { ...@@ -103,7 +107,7 @@ Item {
z: QGroundControl.zOrderMapItems z: QGroundControl.zOrderMapItems
missionItem: _missionItem missionItem: _missionItem
onClicked: setCurrentItem(_missionItem.sequenceNumber) onClicked: _root.clicked(_missionItem.sequenceNumber)
// These are the non-coordinate child mission items attached to this item // These are the non-coordinate child mission items attached to this item
Row { Row {
...@@ -119,7 +123,7 @@ Item { ...@@ -119,7 +123,7 @@ Item {
z: 2 z: 2
specifiesCoordinate: false specifiesCoordinate: false
onClicked: setCurrentItem(object.sequenceNumber) onClicked: _root.Clicked(object.sequenceNumber)
} }
} }
} }
......
...@@ -20,6 +20,7 @@ import QGroundControl.FlightMap 1.0 ...@@ -20,6 +20,7 @@ import QGroundControl.FlightMap 1.0
/// Simple Mission Item visuals /// Simple Mission Item visuals
Item { Item {
id: _root
property var map ///< Map control to place item in property var map ///< Map control to place item in
property var _missionItem: object property var _missionItem: object
...@@ -28,6 +29,8 @@ Item { ...@@ -28,6 +29,8 @@ Item {
property bool _itemVisualShowing: false property bool _itemVisualShowing: false
property bool _dragAreaShowing: false property bool _dragAreaShowing: false
signal clicked(int sequenceNumber)
function hideItemVisuals() { function hideItemVisuals() {
if (_itemVisualShowing) { if (_itemVisualShowing) {
_itemVisual.destroy() _itemVisual.destroy()
...@@ -104,7 +107,7 @@ Item { ...@@ -104,7 +107,7 @@ Item {
missionItem: _missionItem missionItem: _missionItem
sequenceNumber: _missionItem.sequenceNumber sequenceNumber: _missionItem.sequenceNumber
onClicked: setCurrentItem(_missionItem.sequenceNumber) onClicked: _root.clicked(_missionItem.sequenceNumber)
// These are the non-coordinate child mission items attached to this item // These are the non-coordinate child mission items attached to this item
Row { Row {
...@@ -120,7 +123,7 @@ Item { ...@@ -120,7 +123,7 @@ Item {
checked: object.isCurrentItem checked: object.isCurrentItem
specifiesCoordinate: false specifiesCoordinate: false
onClicked: setCurrentItem(object.sequenceNumber) onClicked: _root.clicked(object.sequenceNumber)
} }
} }
} }
......
...@@ -20,6 +20,8 @@ import QGroundControl.FlightMap 1.0 ...@@ -20,6 +20,8 @@ import QGroundControl.FlightMap 1.0
/// Survey Complex Mission Item visuals /// Survey Complex Mission Item visuals
Item { Item {
id: _root
property var map ///< Map control to place item in property var map ///< Map control to place item in
property var _missionItem: object property var _missionItem: object
...@@ -30,6 +32,8 @@ Item { ...@@ -30,6 +32,8 @@ Item {
property var _dragHandles property var _dragHandles
property var _splitHandles property var _splitHandles
signal clicked(int sequenceNumber)
function _addVisualElements() { function _addVisualElements() {
_polygon = polygonComponent.createObject(map) _polygon = polygonComponent.createObject(map)
_grid = gridComponent.createObject(map) _grid = gridComponent.createObject(map)
...@@ -148,13 +152,11 @@ Item { ...@@ -148,13 +152,11 @@ Item {
coordinate: _missionItem.coordinate coordinate: _missionItem.coordinate
visible: _missionItem.exitCoordinate.isValid visible: _missionItem.exitCoordinate.isValid
sourceItem: sourceItem: MissionItemIndexLabel {
MissionItemIndexLabel {
index: _missionItem.sequenceNumber index: _missionItem.sequenceNumber
label: "Entry" label: "Entry"
checked: _missionItem.isCurrentItem checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
onClicked: setCurrentItem(_missionItem.sequenceNumber)
} }
} }
} }
...@@ -170,13 +172,11 @@ Item { ...@@ -170,13 +172,11 @@ Item {
coordinate: _missionItem.exitCoordinate coordinate: _missionItem.exitCoordinate
visible: _missionItem.exitCoordinate.isValid visible: _missionItem.exitCoordinate.isValid
sourceItem: sourceItem: MissionItemIndexLabel {
MissionItemIndexLabel {
index: _missionItem.lastSequenceNumber index: _missionItem.lastSequenceNumber
label: "Exit" label: "Exit"
checked: _missionItem.isCurrentItem checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
onClicked: setCurrentItem(_missionItem.sequenceNumber)
} }
} }
} }
......
...@@ -1321,6 +1321,7 @@ void MissionController::_activeVehicleSet(void) ...@@ -1321,6 +1321,7 @@ void MissionController::_activeVehicleSet(void)
connect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged); connect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged);
connect(_activeVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_activeVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
connect(_activeVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_activeVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
connect(_activeVehicle, &Vehicle::vehicleTypeChanged, this, &MissionController::complexMissionItemNamesChanged);
if (_activeVehicle->parameterManager()->parametersReady() && !syncInProgress()) { if (_activeVehicle->parameterManager()->parametersReady() && !syncInProgress()) {
// We are switching between two previously existing vehicles. We have to manually ask for the items from the Vehicle. // We are switching between two previously existing vehicles. We have to manually ask for the items from the Vehicle.
......
This diff is collapsed.
/****************************************************************************
*
* (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
...@@ -12,7 +12,6 @@ FlightModeDropdown 1.0 FlightModeDropdown.qml ...@@ -12,7 +12,6 @@ FlightModeDropdown 1.0 FlightModeDropdown.qml
FlightModeMenu 1.0 FlightModeMenu.qml FlightModeMenu 1.0 FlightModeMenu.qml
GeoFenceEditor 1.0 GeoFenceEditor.qml GeoFenceEditor 1.0 GeoFenceEditor.qml
GeoFenceMapVisuals 1.0 GeoFenceMapVisuals.qml GeoFenceMapVisuals 1.0 GeoFenceMapVisuals.qml
GuidedBar 1.0 GuidedBar.qml
IndicatorButton 1.0 IndicatorButton.qml IndicatorButton 1.0 IndicatorButton.qml
JoystickThumbPad 1.0 JoystickThumbPad.qml JoystickThumbPad 1.0 JoystickThumbPad.qml
MainToolBar 1.0 MainToolBar.qml MainToolBar 1.0 MainToolBar.qml
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment