1 package tim.prune.undo;
\r
3 import tim.prune.I18nManager;
\r
4 import tim.prune.data.DataPoint;
\r
5 import tim.prune.data.Track;
\r
6 import tim.prune.data.TrackInfo;
\r
9 * Operation to undo the deletion of marked points
\r
11 public class UndoDeleteMarked implements UndoOperation
\r
13 private DataPoint[] _contents = null;
\r
14 protected int _numPointsDeleted = -1;
\r
15 private boolean[] _segmentStarts = null;
\r
20 * @param inTrack track contents to copy
\r
22 public UndoDeleteMarked(Track inTrack)
\r
24 _contents = inTrack.cloneContents();
\r
25 // Copy boolean segment start flags
\r
26 _segmentStarts = new boolean[inTrack.getNumPoints()];
\r
27 for (int i=0; i<inTrack.getNumPoints(); i++) {
\r
28 _segmentStarts[i] = inTrack.getPoint(i).getSegmentStart();
\r
34 * Set the number of points deleted
\r
35 * (only known after attempted compression)
\r
36 * @param inNum number of points deleted
\r
38 public void setNumPointsDeleted(int inNum)
\r
40 _numPointsDeleted = inNum;
\r
45 * @return description of operation including parameters
\r
47 public String getDescription()
\r
49 String desc = I18nManager.getText("undo.deletemarked");
\r
50 if (_numPointsDeleted > 0)
\r
51 desc = desc + " (" + _numPointsDeleted + ")";
\r
57 * Perform the undo operation on the given Track
\r
58 * @param inTrackInfo TrackInfo object on which to perform the operation
\r
60 public void performUndo(TrackInfo inTrackInfo) throws UndoException
\r
62 // restore track to previous values
\r
63 inTrackInfo.getTrack().replaceContents(_contents);
\r
64 // Copy boolean segment start flags
\r
65 Track track = inTrackInfo.getTrack();
\r
66 if (_segmentStarts.length != track.getNumPoints())
\r
67 throw new UndoException("Cannot undo delete - track length no longer matches");
\r
68 for (int i=0; i<_segmentStarts.length; i++) {
\r
69 track.getPoint(i).setSegmentStart(_segmentStarts[i]);
\r
72 inTrackInfo.getSelection().clearAll();
\r