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.TrackInfo;
9 * Undo addition/subtraction of an altitude offset
11 public class UndoAddAltitudeOffset implements UndoOperation
13 /** Start index of section */
14 private int _startIndex;
15 /** altitude values before operation */
16 private Altitude[] _altitudes;
21 * @param inTrackInfo track info object
23 public UndoAddAltitudeOffset(TrackInfo inTrackInfo)
25 _startIndex = inTrackInfo.getSelection().getStart();
26 final int endIndex = inTrackInfo.getSelection().getEnd();
27 final int numPoints = endIndex - _startIndex + 1;
28 // Make array of cloned altitude objects
29 _altitudes = new Altitude[numPoints];
30 for (int i=0; i<numPoints; i++) {
31 Altitude a = inTrackInfo.getTrack().getPoint(_startIndex+i).getAltitude();
32 if (a != null && a.isValid()) {
33 _altitudes[i] = a.clone();
40 * @return description of operation including number of points adjusted
42 public String getDescription()
44 return I18nManager.getText("undo.addaltitudeoffset") + " (" + (_altitudes.length) + ")";
49 * Perform the undo operation on the given Track
50 * @param inTrackInfo TrackInfo object on which to perform the operation
52 public void performUndo(TrackInfo inTrackInfo) throws UndoException
54 // Perform the inverse operation
55 final int numPoints = _altitudes.length;
56 for (int i=0; i<numPoints; i++) {
57 inTrackInfo.getTrack().getPoint(i+_startIndex).getAltitude().reset(_altitudes[i]);
60 UpdateMessageBroker.informSubscribers();