package org.herac.tuxguitar.gui.undo.undoables.track;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.undo.CannotRedoException;
import org.herac.tuxguitar.gui.undo.CannotUndoException;
import org.herac.tuxguitar.gui.undo.UndoableEdit;
import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
import org.herac.tuxguitar.song.managers.TGSongManager;
import org.herac.tuxguitar.song.models.TGTrack;
public class UndoableTrackInstrument implements UndoableEdit {
public static UndoableTrackInstrument startUndo(TGTrack track) {
UndoableTrackInstrument undoable = new UndoableTrackInstrument();
undoable.doAction = UNDO_ACTION;
undoable.undoCaret = new UndoableCaretHelper();
undoable.trackNumber = track.getNumber();
undoable.undoInstrument = track.getChannel().getInstrument();
undoable.undoPercussion = track.isPercussionTrack();
return undoable;
}
private int doAction;
private UndoableCaretHelper redoCaret;
private short redoInstrument;
private boolean redoPercussion;
private int trackNumber;
private UndoableCaretHelper undoCaret;
private short undoInstrument;
private boolean undoPercussion;
private UndoableTrackInstrument() {
super();
}
public boolean canRedo() {
return (this.doAction == REDO_ACTION);
}
public boolean canUndo() {
return (this.doAction == UNDO_ACTION);
}
public UndoableTrackInstrument endUndo(TGTrack track) {
this.redoCaret = new UndoableCaretHelper();
this.redoInstrument = track.getChannel().getInstrument();
this.redoPercussion = track.isPercussionTrack();
return this;
}
public void redo() throws CannotRedoException {
if (!canRedo()) {
throw new CannotRedoException();
}
TGSongManager manager = TuxGuitar.instance().getSongManager();
manager.getTrackManager().changeInstrument(
manager.getTrack(this.trackNumber), this.redoInstrument,
this.redoPercussion);
TuxGuitar.instance().fireUpdate();
TuxGuitar.instance().getMixer().updateValues();
if (TuxGuitar.instance().getPlayer().isRunning()) {
TuxGuitar.instance().getPlayer().updatePrograms();
}
this.redoCaret.update();
this.doAction = UNDO_ACTION;
}
public void undo() throws CannotUndoException {
if (!canUndo()) {
throw new CannotUndoException();
}
TGSongManager manager = TuxGuitar.instance().getSongManager();
manager.getTrackManager().changeInstrument(
manager.getTrack(this.trackNumber), this.undoInstrument,
this.undoPercussion);
TuxGuitar.instance().fireUpdate();
TuxGuitar.instance().getMixer().updateValues();
if (TuxGuitar.instance().getPlayer().isRunning()) {
TuxGuitar.instance().getPlayer().updatePrograms();
}
this.undoCaret.update();
this.doAction = REDO_ACTION;
}
}