1
package org.herac.tuxguitar.gui.undo.undoables.track;
3
import org.herac.tuxguitar.gui.TuxGuitar;
4
import org.herac.tuxguitar.gui.undo.CannotRedoException;
5
import org.herac.tuxguitar.gui.undo.CannotUndoException;
6
import org.herac.tuxguitar.gui.undo.UndoableEdit;
7
import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
8
import org.herac.tuxguitar.song.models.TGTrack;
10
public class UndoableTrackGeneric implements UndoableEdit{
12
private UndoableCaretHelper undoCaret;
13
private UndoableCaretHelper redoCaret;
14
private UndoTrack undoTrack;
15
private RedoTrack redoTrack;
17
private UndoableTrackGeneric(){
21
public void redo() throws CannotRedoException {
23
throw new CannotRedoException();
25
this.redoTrack.redo();
26
this.redoCaret.update();
27
this.doAction = UNDO_ACTION;
30
public void undo() throws CannotUndoException {
32
throw new CannotUndoException();
34
this.undoTrack.undo();
35
this.undoCaret.update();
36
this.doAction = REDO_ACTION;
39
public boolean canRedo() {
40
return (this.doAction == REDO_ACTION);
43
public boolean canUndo() {
44
return (this.doAction == UNDO_ACTION);
48
public static UndoableTrackGeneric startUndo(TGTrack track){
49
UndoableTrackGeneric undoable = new UndoableTrackGeneric();
50
undoable.doAction = UNDO_ACTION;
51
undoable.undoCaret = new UndoableCaretHelper();
52
undoable.undoTrack = undoable.new UndoTrack(track);
57
public UndoableTrackGeneric endUndo(TGTrack track){
58
this.redoCaret = new UndoableCaretHelper();
59
this.redoTrack = new RedoTrack(track);
63
private class UndoTrack{
64
private TGTrack track;
66
public UndoTrack(TGTrack track){
68
this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
73
if(this.track != null){
74
TuxGuitar.instance().getSongManager().replaceTrack(this.track);
75
TuxGuitar.instance().fireUpdate();
76
TuxGuitar.instance().getMixer().update();
81
private class RedoTrack{
82
private TGTrack track;
84
public RedoTrack(TGTrack track){
86
this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
91
if(this.track != null){
92
TuxGuitar.instance().getSongManager().replaceTrack(this.track);
93
TuxGuitar.instance().fireUpdate();
94
TuxGuitar.instance().getMixer().update();