X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fundo%2FUndoReverseSection.java;h=dd4a24e7b0d1f7e67d43d983b905df89906f91d4;hp=73fe6923a2d834d96851f88c5748d28d52cc6d52;hb=ca9bdb3916f9c39adbbf95d06ac95c21dafbb4e6;hpb=63f178fd6c6b30b99a01f2a2d700963ea2dfef8b diff --git a/tim/prune/undo/UndoReverseSection.java b/tim/prune/undo/UndoReverseSection.java index 73fe692..dd4a24e 100644 --- a/tim/prune/undo/UndoReverseSection.java +++ b/tim/prune/undo/UndoReverseSection.java @@ -1,6 +1,8 @@ package tim.prune.undo; import tim.prune.I18nManager; +import tim.prune.data.DataPoint; +import tim.prune.data.Track; import tim.prune.data.TrackInfo; /** @@ -8,18 +10,39 @@ import tim.prune.data.TrackInfo; */ public class UndoReverseSection implements UndoOperation { + /** Start and end indices of section */ private int _startIndex, _endIndex; + /** First and last track point in section and next track point after */ + private DataPoint _firstTrackPoint, _lastTrackPoint, _nextTrackPoint; + /** Segment flags for these points */ + private boolean _firstSegmentFlag, _lastSegmentFlag, _nextSegmentFlag; /** * Constructor + * @param inTrack track object for copying segment flags * @param inStart start index of section * @param inEnd end index of section */ - public UndoReverseSection(int inStart, int inEnd) + public UndoReverseSection(Track inTrack, int inStart, int inEnd) { _startIndex = inStart; _endIndex = inEnd; + // Look for first track point in section to be reversed, store flag + _firstTrackPoint = inTrack.getNextTrackPoint(inStart); + if (_firstTrackPoint != null) { + _firstSegmentFlag = _firstTrackPoint.getSegmentStart(); + } + // Look for last track point in section to be reversed, store flag + _lastTrackPoint = inTrack.getPreviousTrackPoint(inEnd); + if (_lastTrackPoint != null) { + _lastSegmentFlag = _lastTrackPoint.getSegmentStart(); + } + // Look for following track point, store flag + _nextTrackPoint = inTrack.getNextTrackPoint(inEnd + 1); + if (_nextTrackPoint != null) { + _nextSegmentFlag = _nextTrackPoint.getSegmentStart(); + } } @@ -42,5 +65,15 @@ public class UndoReverseSection implements UndoOperation { throw new UndoException(getDescription()); } + // Restore segment start flags + if (_firstTrackPoint != null) { + _firstTrackPoint.setSegmentStart(_firstSegmentFlag); + } + if (_lastTrackPoint != null) { + _lastTrackPoint.setSegmentStart(_lastSegmentFlag); + } + if (_nextTrackPoint != null) { + _nextTrackPoint.setSegmentStart(_nextSegmentFlag); + } } }