package tim.prune.undo; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.Photo; import tim.prune.data.TrackInfo; /** * Operation to undo a load photos operation */ public class UndoLoadPhotos implements UndoOperation { private int _numPhotos = -1; private int _numPoints = -1; /** * Constructor * @param inNumPhotos number of photos loaded * @param inNumPoints number of points loaded */ public UndoLoadPhotos(int inNumPhotos, int inNumPoints) { _numPhotos = inNumPhotos; _numPoints = inNumPoints; } /** * @return description of operation including number of photos loaded */ public String getDescription() { String desc = I18nManager.getText("undo.loadphotos"); if (_numPhotos > 0) desc = desc + " (" + _numPhotos + ")"; return desc; } /** * Perform the undo operation on the given Track * Delete both track points and Photo objects * @param inTrackInfo TrackInfo object on which to perform the operation */ public void performUndo(TrackInfo inTrackInfo) throws UndoException { int cropIndex; // crop track to previous size if (_numPoints > 0) { cropIndex = inTrackInfo.getTrack().getNumPoints() - _numPoints; inTrackInfo.getTrack().cropTo(cropIndex); } else { // Loop through the points (if any) and detach them for (int i=0; i<_numPhotos; i++) { Photo photo = inTrackInfo.getPhotoList().getPhoto(inTrackInfo.getPhotoList().getNumPhotos() - 1 - i); if (photo.isConnected()) { DataPoint point = photo.getDataPoint(); if (point != null) {point.setPhoto(null);} } } } // crop photo list to previous size cropIndex = inTrackInfo.getPhotoList().getNumPhotos() - _numPhotos; inTrackInfo.getPhotoList().cropTo(cropIndex); // clear selection inTrackInfo.getSelection().clearAll(); } }