1
package org.herac.tuxguitar.gui.undo.undoables.track;
3
import org.herac.tuxguitar.gui.TuxGuitar;
4
import org.herac.tuxguitar.gui.editors.tab.Caret;
5
import org.herac.tuxguitar.gui.undo.CannotRedoException;
6
import org.herac.tuxguitar.gui.undo.CannotUndoException;
7
import org.herac.tuxguitar.gui.undo.UndoableEdit;
8
import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
9
import org.herac.tuxguitar.song.models.SongTrack;
11
public class UndoableTrackGeneric implements UndoableEdit{
13
private UndoableCaretHelper undoCaret;
14
private UndoableCaretHelper redoCaret;
15
private UndoTrack undoTrack;
16
private RedoTrack redoTrack;
18
private UndoableTrackGeneric(){
22
public void redo() throws CannotRedoException {
24
throw new CannotRedoException();
27
this.redoCaret.update();
28
this.doAction = UNDO_ACTION;
31
public void undo() throws CannotUndoException {
33
throw new CannotUndoException();
36
this.undoCaret.update();
37
this.doAction = REDO_ACTION;
40
public boolean canRedo() {
41
return (doAction == REDO_ACTION);
44
public boolean canUndo() {
45
return (doAction == UNDO_ACTION);
49
public static UndoableTrackGeneric startUndo(SongTrack track){
50
Caret caret = getCaret();
51
UndoableTrackGeneric undoable = new UndoableTrackGeneric();
52
undoable.doAction = UNDO_ACTION;
53
undoable.undoCaret = new UndoableCaretHelper();
54
undoable.undoTrack = undoable.new UndoTrack(track);
59
public UndoableTrackGeneric endUndo(SongTrack track){
60
Caret caret = getCaret();
61
this.redoCaret = new UndoableCaretHelper();
62
this.redoTrack = new RedoTrack(track);
67
private static Caret getCaret(){
68
return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
71
private class UndoTrack{
72
private SongTrack track;
74
public UndoTrack(SongTrack track){
76
this.track = (SongTrack)track.clone(TuxGuitar.instance().getSongManager().getMeasureHeaders());
81
if(this.track != null){
82
TuxGuitar.instance().getSongManager().replaceTrack(track);
83
TuxGuitar.instance().fireUpdate();
84
TuxGuitar.instance().getMixer().update();
89
private class RedoTrack{
90
private SongTrack track;
92
public RedoTrack(SongTrack track){
94
this.track = (SongTrack)track.clone(TuxGuitar.instance().getSongManager().getMeasureHeaders());
99
if(this.track != null){
100
TuxGuitar.instance().getSongManager().replaceTrack(track);
101
TuxGuitar.instance().fireUpdate();
102
TuxGuitar.instance().getMixer().update();