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.managers.TGSongManager;
9
import org.herac.tuxguitar.song.models.TGTrack;
11
public class UndoableTrackInstrument implements UndoableEdit{
13
private int trackNumber;
14
private UndoableCaretHelper undoCaret;
15
private UndoableCaretHelper redoCaret;
16
private short undoInstrument;
17
private short redoInstrument;
18
private boolean undoPercusion;
19
private boolean redoPercusion;
21
private UndoableTrackInstrument(){
25
public void redo() throws CannotRedoException {
27
throw new CannotRedoException();
29
TGSongManager manager = TuxGuitar.instance().getSongManager();
30
manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.redoInstrument,this.redoPercusion);
31
TuxGuitar.instance().fireUpdate();
32
TuxGuitar.instance().getMixer().update();
33
if (TuxGuitar.instance().getPlayer().isRunning()) {
34
TuxGuitar.instance().getPlayer().updatePrograms();
36
this.redoCaret.update();
37
this.doAction = UNDO_ACTION;
40
public void undo() throws CannotUndoException {
42
throw new CannotUndoException();
44
TGSongManager manager = TuxGuitar.instance().getSongManager();
45
manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.undoInstrument,this.undoPercusion);
46
TuxGuitar.instance().fireUpdate();
47
TuxGuitar.instance().getMixer().update();
48
if (TuxGuitar.instance().getPlayer().isRunning()) {
49
TuxGuitar.instance().getPlayer().updatePrograms();
51
this.undoCaret.update();
53
this.doAction = REDO_ACTION;
56
public boolean canRedo() {
57
return (this.doAction == REDO_ACTION);
60
public boolean canUndo() {
61
return (this.doAction == UNDO_ACTION);
64
public static UndoableTrackInstrument startUndo(TGTrack track){
65
UndoableTrackInstrument undoable = new UndoableTrackInstrument();
66
undoable.doAction = UNDO_ACTION;
67
undoable.undoCaret = new UndoableCaretHelper();
68
undoable.trackNumber = track.getNumber();
69
undoable.undoInstrument = track.getChannel().getInstrument();
70
undoable.undoPercusion = track.isPercussionTrack();
75
public UndoableTrackInstrument endUndo(TGTrack track){
76
this.redoCaret = new UndoableCaretHelper();
77
this.redoInstrument = track.getChannel().getInstrument();
78
this.redoPercusion = track.isPercussionTrack();