1 package tim.prune.undo;
3 import tim.prune.I18nManager;
4 import tim.prune.UpdateMessageBroker;
5 import tim.prune.data.DataPoint;
6 import tim.prune.data.Track;
7 import tim.prune.data.TrackInfo;
10 * Undo merging of track segments
12 public class UndoMergeTrackSegments implements UndoOperation
15 private int _startIndex;
16 /** array of segment flags */
17 private boolean[] _segmentFlags = null;
18 /** Following point, if any */
19 private DataPoint _nextTrackPoint = null;
20 /** Segment flag of next point */
21 private boolean _nextSegmentFlag = false;
26 * @param inTrack track object for copying segment flags
27 * @param inStart start index of section
28 * @param inEnd end index of section
30 public UndoMergeTrackSegments(Track inTrack, int inStart, int inEnd)
32 _startIndex = inStart;
33 // Store booleans for all points within selection
34 int numPoints = inEnd - inStart + 1;
35 _segmentFlags = new boolean[numPoints];
36 for (int i=inStart; i<=inEnd; i++) {
37 _segmentFlags[i-inStart] = inTrack.getPoint(i).getSegmentStart();
39 // Look for following track point, store flag
40 _nextTrackPoint = inTrack.getNextTrackPoint(inEnd + 1);
41 if (_nextTrackPoint != null) {
42 _nextSegmentFlag = _nextTrackPoint.getSegmentStart();
48 * @return description of operation
50 public String getDescription()
52 return I18nManager.getText("undo.mergetracksegments");
57 * Perform the undo operation on the given Track
58 * @param inTrackInfo TrackInfo object on which to perform the operation
60 public void performUndo(TrackInfo inTrackInfo) throws UndoException
62 // Loop through points replacing segment start flags
63 for (int i=0; i<_segmentFlags.length; i++) {
64 DataPoint point = inTrackInfo.getTrack().getPoint(_startIndex + i);
65 if (!point.isWaypoint()) {
66 point.setSegmentStart(_segmentFlags[i]);
69 // Restore segment start flag for following point
70 if (_nextTrackPoint != null) {
71 _nextTrackPoint.setSegmentStart(_nextSegmentFlag);
73 UpdateMessageBroker.informSubscribers();