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 UndoableTrackSoloMute implements UndoableEdit { public static UndoableTrackSoloMute startUndo(TGTrack track) { UndoableTrackSoloMute undoable = new UndoableTrackSoloMute(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.track = track.getNumber(); undoable.undoSolo = track.isSolo(); undoable.undoMute = track.isMute(); return undoable; } private int doAction; private UndoableCaretHelper redoCaret; private boolean redoMute; private boolean redoSolo; private int track; private UndoableCaretHelper undoCaret; private boolean undoMute; private boolean undoSolo; private UndoableTrackSoloMute() { super(); } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public UndoableTrackSoloMute endUndo(TGTrack track) { this.redoCaret = new UndoableCaretHelper(); this.redoSolo = track.isSolo(); this.redoMute = track.isMute(); return this; } public void redo() throws CannotRedoException { if (!canRedo()) { throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); TGTrack track = manager.getTrack(this.track); if (track != null) { manager.getTrackManager().changeSolo(track, this.redoSolo); manager.getTrackManager().changeMute(track, this.redoMute); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if (!canUndo()) { throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); TGTrack track = manager.getTrack(this.track); if (track != null) { manager.getTrackManager().changeSolo(track, this.undoSolo); manager.getTrackManager().changeMute(track, this.undoMute); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.undoCaret.update(); this.doAction = REDO_ACTION; } }