/// <summary> /// Undoes the most recently done (or redone) action /// </summary> /// <returns>true if there was something to undo, false otherwise</returns> public bool Undo() { if (undoStack.Count == 0) { return(false); } var toUndo = undoStack.Pop(); toUndo.Undo(); redoStack.Push(toUndo); OnUndoRedoAction.Fire(); if (toUndo.GetType().HasAttr <TransientUndoRedoAction>()) { Undo(); } if (undoStack.None()) { OnEmptyUndoStack.Fire(); } return(true); }
/// <summary> /// Redoes the las thing that was undone. /// </summary> /// <returns>true if there was something to redo, false otherwise</returns> public bool Redo() { if (redoStack.Count == 0) { return(false); } var toRedo = redoStack.Pop(); toRedo.Redo(); undoStack.Push(toRedo); OnUndoRedoAction.Fire(); if (redoStack.Count > 0 && redoStack.Peek().GetType().HasAttr <TransientUndoRedoAction>()) { Redo(); } return(true); }
public void Done(IUndoRedoAction action) { undoStack.Push(action); redoStack.Clear(); OnUndoRedoAction.Fire(); }