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.managers.SongManager;
10
import org.herac.tuxguitar.song.models.SongTrack;
12
public class UndoableInstrumentTrack implements UndoableEdit{
14
private int trackNumber;
15
private UndoableCaretHelper undoCaret;
16
private UndoableCaretHelper redoCaret;
17
private short undoInstrument;
18
private short redoInstrument;
19
private boolean undoPercusion;
20
private boolean redoPercusion;
22
private UndoableInstrumentTrack(){
26
public void redo() throws CannotRedoException {
28
throw new CannotRedoException();
30
SongManager manager = TuxGuitar.instance().getSongManager();
31
manager.getTrackManager().changeInstrument(manager.getTrack(trackNumber),redoInstrument,redoPercusion);
32
TuxGuitar.instance().fireUpdate();
33
TuxGuitar.instance().getMixer().update();
34
if (TuxGuitar.instance().getPlayer().isRunning()) {
35
TuxGuitar.instance().getPlayer().updatePrograms();
37
this.redoCaret.update();
38
this.doAction = UNDO_ACTION;
41
public void undo() throws CannotUndoException {
43
throw new CannotUndoException();
45
SongManager manager = TuxGuitar.instance().getSongManager();
46
manager.getTrackManager().changeInstrument(manager.getTrack(trackNumber),undoInstrument,undoPercusion);
47
TuxGuitar.instance().fireUpdate();
48
TuxGuitar.instance().getMixer().update();
49
if (TuxGuitar.instance().getPlayer().isRunning()) {
50
TuxGuitar.instance().getPlayer().updatePrograms();
52
this.undoCaret.update();
54
this.doAction = REDO_ACTION;
57
public boolean canRedo() {
58
return (doAction == REDO_ACTION);
61
public boolean canUndo() {
62
return (doAction == UNDO_ACTION);
65
public static UndoableInstrumentTrack startUndo(SongTrack track){
66
UndoableInstrumentTrack undoable = new UndoableInstrumentTrack();
67
Caret caret = getCaret();
68
undoable.doAction = UNDO_ACTION;
69
undoable.undoCaret = new UndoableCaretHelper();
70
undoable.trackNumber = track.getNumber();
71
undoable.undoInstrument = track.getChannel().getInstrument();
72
undoable.undoPercusion = track.isPercussionTrack();
77
public UndoableInstrumentTrack endUndo(SongTrack track){
78
this.redoCaret = new UndoableCaretHelper();
79
this.redoInstrument = track.getChannel().getInstrument();
80
this.redoPercusion = track.isPercussionTrack();
85
private static Caret getCaret(){
86
return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();