diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 5d8b5f7eebee81deb33d23c4f23a0121707578e4..4adb1dd1f3cb994afe5489914bd94e12bc13b9f9 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -2243,6 +2243,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) _isROIActive = false; _isROIBeginCurrentItem = false; _flyThroughCommandsAllowed = true; + _previousCoordinate = QGeoCoordinate(); for (int viIndex=0; viIndex<_visualItems->count(); viIndex++) { VisualMissionItem* pVI = qobject_cast(_visualItems->get(viIndex)); @@ -2282,8 +2283,13 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) } } - // ROI state handling if (simpleItem) { + // Remember previous coordinate + if (pVI->sequenceNumber() < sequenceNumber && simpleItem->specifiesCoordinate() && !simpleItem->isStandaloneCoordinate()) { + _previousCoordinate = simpleItem->coordinate(); + } + + // ROI state handling if (pVI->sequenceNumber() <= sequenceNumber) { if (_isROIActive) { if (_isROICancelItem(simpleItem)) { @@ -2351,6 +2357,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) emit isROIActiveChanged(); emit isROIBeginCurrentItemChanged(); emit flyThroughCommandsAllowedChanged(); + emit previousCoordinateChanged(); } } diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 718521c849d2e2afd4c2f47a7086d8c9b548680f..0d5b28f9a6da61cf4295a7fc0f9916acb40e20d7 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -72,6 +72,7 @@ public: Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows CONSTANT) Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged) Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged) + Q_PROPERTY(QGeoCoordinate previousCoordinate MEMBER _previousCoordinate NOTIFY previousCoordinateChanged) Q_PROPERTY(CoordinateVector* splitSegment MEMBER _splitSegment NOTIFY splitSegmentChanged) ///< Segment which show show + split ui element Q_PROPERTY(double progressPct READ progressPct NOTIFY progressPctChanged) Q_PROPERTY(int missionItemCount READ missionItemCount NOTIFY missionItemCountChanged) ///< True mission item command count (only valid in Fly View) @@ -266,6 +267,7 @@ signals: void isROIActiveChanged (void); void isROIBeginCurrentItemChanged (void); void flyThroughCommandsAllowedChanged (void); + void previousCoordinateChanged (void); private slots: void _newMissionItemsAvailableFromVehicle(bool removeAllRequested); @@ -344,6 +346,7 @@ private: QTimer _updateTimer; QGCGeoBoundingCube _travelBoundingCube; QGeoCoordinate _takeoffCoordinate; + QGeoCoordinate _previousCoordinate; CoordinateVector* _splitSegment; bool _isInsertTakeoffValid = true; bool _isInsertLandValid = true; diff --git a/src/PlanView/MissionItemEditor.qml b/src/PlanView/MissionItemEditor.qml index d72ce3d929dbdf49b1b119ed3cc93bdbb60e44b8..213a344fbfafcdf0837a4119a38ac5c3eec294ec 100644 --- a/src/PlanView/MissionItemEditor.qml +++ b/src/PlanView/MissionItemEditor.qml @@ -40,6 +40,7 @@ Rectangle { property real _sectionSpacer: ScreenTools.defaultFontPixelWidth / 2 // spacing between section headings property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1 property bool _readyForSave: missionItem.readyForSaveState === VisualMissionItem.ReadyForSave + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle readonly property real _editFieldWidth: Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12) readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 @@ -137,6 +138,19 @@ Rectangle { QGCMenu { id: hamburgerMenu + QGCMenuItem { + text: qsTr("Move to vehicle position") + visible: missionItem.specifiesCoordinate + enabled: _activeVehicle + onTriggered: missionItem.coordinate = _activeVehicle.coordinate + } + + QGCMenuItem { + text: qsTr("Move to previous item position") + visible: _missionController.previousCoordinate.isValid + onTriggered: missionItem.coordinate = _missionController.previousCoordinate + } + QGCMenuItem { text: qsTr("Edit position...") visible: missionItem.specifiesCoordinate