package tim.prune.undo; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.FileInfo; import tim.prune.data.PhotoList; import tim.prune.data.TrackInfo; /** * Operation to undo a load operation */ public class UndoLoad implements UndoOperation { private int _cropIndex = -1; private int _numLoaded = -1; private DataPoint[] _contents = null; private PhotoList _photoList = null; private FileInfo _oldFileInfo = null; // Numbers of each media before operation private int _numPhotos = -1, _numAudios = -1; /** * Constructor for appending * @param inIndex index number of crop point * @param inNumLoaded number of points loaded */ public UndoLoad(int inIndex, int inNumLoaded) { _cropIndex = inIndex; _numLoaded = inNumLoaded; _contents = null; } /** * Constructor for replacing * @param inOldTrackInfo track info being replaced * @param inNumLoaded number of points loaded * @param inPhotoList photo list, if any */ public UndoLoad(TrackInfo inOldTrackInfo, int inNumLoaded, PhotoList inPhotoList) { _cropIndex = -1; _numLoaded = inNumLoaded; _contents = inOldTrackInfo.getTrack().cloneContents(); _oldFileInfo = inOldTrackInfo.getFileInfo().clone(); _photoList = inPhotoList; } /** * @return description of operation including number of points loaded */ public String getDescription() { String desc = I18nManager.getText("undo.load"); if (_numLoaded > 0) desc = desc + " (" + _numLoaded + ")"; return desc; } /** * Set the number of photos and audios before the load operation * @param inNumPhotos number of photos * @param inNumAudios number of audios */ public void setNumPhotosAudios(int inNumPhotos, int inNumAudios) { _numPhotos = inNumPhotos; _numAudios = inNumAudios; } /** * Perform the undo operation on the given Track * @param inTrackInfo TrackInfo object on which to perform the operation */ public void performUndo(TrackInfo inTrackInfo) throws UndoException { // remove source from fileinfo if (_oldFileInfo == null) { inTrackInfo.getFileInfo().removeSource(); } else { inTrackInfo.setFileInfo(_oldFileInfo); } // Crop / replace if (_contents == null) { // crop track to previous size inTrackInfo.getTrack().cropTo(_cropIndex); } else { // replace photos how they were if (_photoList != null) { inTrackInfo.getPhotoList().restore(_photoList); } // Crop media lists to previous size (if specified) if (_numPhotos > -1) {inTrackInfo.getPhotoList().cropTo(_numPhotos);} if (_numAudios > -1) {inTrackInfo.getAudioList().cropTo(_numAudios);} // replace track contents with old if (!inTrackInfo.getTrack().replaceContents(_contents)) { throw new UndoException(getDescription()); } } // clear selection inTrackInfo.getSelection().clearAll(); } }