1 package tim.prune.undo;
3 import tim.prune.I18nManager;
4 import tim.prune.UpdateMessageBroker;
5 import tim.prune.data.Altitude;
6 import tim.prune.data.DataPoint;
7 import tim.prune.data.TrackInfo;
10 * Undo addition/subtraction of an altitude offset
12 public class UndoAddAltitudeOffset implements UndoOperation
14 /** Start index of section */
15 private int _startIndex;
16 /** altitude values before operation */
17 private Altitude[] _altitudes;
22 * @param inTrackInfo track info object
24 public UndoAddAltitudeOffset(TrackInfo inTrackInfo)
26 _startIndex = inTrackInfo.getSelection().getStart();
27 final int endIndex = inTrackInfo.getSelection().getEnd();
28 final int numPoints = endIndex - _startIndex + 1;
29 // Make array of cloned altitude objects
30 _altitudes = new Altitude[numPoints];
31 for (int i=0; i<numPoints; i++) {
32 Altitude a = inTrackInfo.getTrack().getPoint(_startIndex+i).getAltitude();
33 if (a != null && a.isValid()) {
34 _altitudes[i] = a.clone();
41 * @return description of operation including number of points adjusted
43 public String getDescription()
45 return I18nManager.getText("undo.addaltitudeoffset") + " (" + (_altitudes.length) + ")";
50 * Perform the undo operation on the given Track
51 * @param inTrackInfo TrackInfo object on which to perform the operation
53 public void performUndo(TrackInfo inTrackInfo) throws UndoException
55 // Perform the inverse operation
56 final int numPoints = _altitudes.length;
57 for (int i=0; i<numPoints; i++)
59 DataPoint point = inTrackInfo.getTrack().getPoint(i+_startIndex);
60 point.resetAltitude(_altitudes[i]);
63 inTrackInfo.getSelection().markInvalid();
64 UpdateMessageBroker.informSubscribers();