diff --git a/src/MissionManager/FixedWingLandingComplexItem.cc b/src/MissionManager/FixedWingLandingComplexItem.cc index 28dcd7c2e18..bfc9cfa9e59 100644 --- a/src/MissionManager/FixedWingLandingComplexItem.cc +++ b/src/MissionManager/FixedWingLandingComplexItem.cc @@ -135,16 +135,6 @@ void FixedWingLandingComplexItem::_calcGlideSlope(void) _glideSlopeFact.setRawValue(qRadiansToDegrees(qAtan(landingAltDifference / landingDistance))); } -void FixedWingLandingComplexItem::moveLandingPosition(const QGeoCoordinate& coordinate) -{ - double savedHeading = landingHeading()->rawValue().toDouble(); - double savedDistance = landingDistance()->rawValue().toDouble(); - - setLandingCoordinate(coordinate); - landingHeading()->setRawValue(savedHeading); - landingDistance()->setRawValue(savedDistance); -} - bool FixedWingLandingComplexItem::_isValidLandItem(const MissionItem& missionItem) { if (missionItem.command() != MAV_CMD_NAV_LAND || diff --git a/src/MissionManager/FixedWingLandingComplexItem.h b/src/MissionManager/FixedWingLandingComplexItem.h index 043f5067ab2..5de926d83b1 100644 --- a/src/MissionManager/FixedWingLandingComplexItem.h +++ b/src/MissionManager/FixedWingLandingComplexItem.h @@ -31,8 +31,6 @@ class FixedWingLandingComplexItem : public LandingComplexItem Q_PROPERTY(Fact* valueSetIsDistance READ valueSetIsDistance CONSTANT) Q_PROPERTY(Fact* glideSlope READ glideSlope CONSTANT) - Q_INVOKABLE void moveLandingPosition(const QGeoCoordinate& coordinate); // Maintains the current landing distance and heading - Fact* glideSlope (void) { return &_glideSlopeFact; } Fact* valueSetIsDistance (void) { return &_valueSetIsDistanceFact; } diff --git a/src/MissionManager/LandingComplexItem.cc b/src/MissionManager/LandingComplexItem.cc index cffb295940b..287294e0ea8 100644 --- a/src/MissionManager/LandingComplexItem.cc +++ b/src/MissionManager/LandingComplexItem.cc @@ -643,6 +643,19 @@ void LandingComplexItem::_setDirty(void) setDirty(true); } +void LandingComplexItem::setCoordinate(const QGeoCoordinate& coordinate) { + if (!_landingCoordSet) { + setLandingCoordinate(coordinate); + return; + } + + // Move entire complex item, preserving heading and distance + _ignoreRecalcSignals = true; + setLandingCoordinate(coordinate); + _ignoreRecalcSignals = false; + _recalcFromHeadingAndDistanceChange(); +} + void LandingComplexItem::setSequenceNumber(int sequenceNumber) { if (_sequenceNumber != sequenceNumber) { diff --git a/src/MissionManager/LandingComplexItem.h b/src/MissionManager/LandingComplexItem.h index 0cc10b27a28..e50dadd8fa3 100644 --- a/src/MissionManager/LandingComplexItem.h +++ b/src/MissionManager/LandingComplexItem.h @@ -110,7 +110,7 @@ class LandingComplexItem : public ComplexMissionItem ReadyForSaveState readyForSaveState (void) const final; bool exitCoordinateSameAsEntry (void) const final { return false; } void setDirty (bool dirty) final; - void setCoordinate (const QGeoCoordinate& coordinate) final { setFinalApproachCoordinate(coordinate); } + void setCoordinate (const QGeoCoordinate& coordinate) final; void setSequenceNumber (int sequenceNumber) final; double amslEntryAlt (void) const final; double amslExitAlt (void) const final; diff --git a/src/QmlControls/FWLandingPatternMapVisual.qml b/src/QmlControls/FWLandingPatternMapVisual.qml index f1d3ff0bd60..a8ccc868f3f 100644 --- a/src/QmlControls/FWLandingPatternMapVisual.qml +++ b/src/QmlControls/FWLandingPatternMapVisual.qml @@ -246,7 +246,7 @@ Item { itemCoordinate: _missionItem.landingCoordinate visible: _root.interactive - onItemCoordinateChanged: _missionItem.moveLandingPosition(itemCoordinate) + onItemCoordinateChanged: _missionItem.coordinate = itemCoordinate } }