package ConnectivityEditor.UndoRedo; import java.util.Stack; import UndoRedo.IAction; import Window.MOCBuilder; public class ConnectivityEditorUndoRedoManager { private static ConnectivityEditorUndoRedoManager _instance = null; private Stack<IAction> undoActionStack; private Stack<IAction> redoActionStack; private final int stackSize = 100; private ConnectivityEditorUndoRedoManager() { undoActionStack = new Stack<IAction>(); redoActionStack = new Stack<IAction>(); } public synchronized static ConnectivityEditorUndoRedoManager getInstance() { if (_instance == null) _instance = new ConnectivityEditorUndoRedoManager(); return _instance; } public void pushUndoAction(IAction action) { MOCBuilder.getInstance().setChanged(); undoActionStack.push(action); if (undoActionStack.size() > stackSize * 2) for (int i = 0; i < stackSize; i++) undoActionStack.remove(i); } public void undo() { if (undoActionStack.isEmpty()) return; IAction action = undoActionStack.pop(); if (action == null) return; action.undoAction(); redoActionStack.push(action); if (redoActionStack.size() > stackSize * 2) for (int i = 0; i < stackSize; i++) redoActionStack.remove(i); } public void redo() { if (redoActionStack.isEmpty()) return; IAction action = redoActionStack.pop(); if (action == null) return; action.redoAction(); undoActionStack.push(action); if (undoActionStack.size() > stackSize * 2) for (int i = 0; i < stackSize; i++) undoActionStack.remove(i); } public void clear() { undoActionStack.clear(); redoActionStack.clear(); } }