package org.herac.tuxguitar.gui.undo.undoables.custom;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.editors.tab.Caret;
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.TGMeasure;
public class UndoableChangeCloseRepeat implements UndoableEdit {
private static Caret getCaret() {
return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
}
public static UndoableChangeCloseRepeat startUndo() {
Caret caret = getCaret();
return startUndo(caret.getPosition(), caret.getMeasure().getRepeatClose());
}
public static UndoableChangeCloseRepeat startUndo(long position,
int repeatClose) {
UndoableChangeCloseRepeat undoable = new UndoableChangeCloseRepeat();
undoable.doAction = UNDO_ACTION;
undoable.undoCaret = new UndoableCaretHelper();
undoable.position = position;
undoable.undoRepeatClose = repeatClose;
return undoable;
}
private int doAction;
private long position;
private UndoableCaretHelper redoCaret;
private int redoRepeatClose;
private UndoableCaretHelper undoCaret;
private int undoRepeatClose;
private UndoableChangeCloseRepeat() {
super();
}
public boolean canRedo() {
return (this.doAction == REDO_ACTION);
}
public boolean canUndo() {
return (this.doAction == UNDO_ACTION);
}
public UndoableChangeCloseRepeat endUndo(int redoRepeatClose) {
this.redoCaret = new UndoableCaretHelper();
this.redoRepeatClose = redoRepeatClose;
return this;
}
public void redo() throws CannotRedoException {
if (!canRedo()) {
throw new CannotRedoException();
}
TGSongManager manager = TuxGuitar.instance().getSongManager();
manager.changeCloseRepeat(this.position, this.redoRepeatClose);
TGMeasure measure = manager.getTrackManager().getMeasureAt(
manager.getFirstTrack(), this.position);
TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout()
.fireUpdate(measure.getNumber());
this.redoCaret.update();
this.doAction = UNDO_ACTION;
}
public void undo() throws CannotUndoException {
if (!canUndo()) {
throw new CannotUndoException();
}
TGSongManager manager = TuxGuitar.instance().getSongManager();
manager.changeCloseRepeat(this.position, this.undoRepeatClose);
TGMeasure measure = manager.getTrackManager().getMeasureAt(
manager.getFirstTrack(), this.position);
TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout()
.fireUpdate(measure.getNumber());
this.undoCaret.update();
this.doAction = REDO_ACTION;
}
}