Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
 public void Done(IUndoRedoAction action)
 {
     undoStack.Push(action);
     redoStack.Clear();
     OnUndoRedoAction.Fire();
 }