Пример #1
0
        /// <summary>
        ///     Redo last undone action
        /// </summary>
        public void PerformRedo()
        {
            if (!Enabled || !CanRedo)
            {
                return;
            }

            var action = (IUndoAction)UndoOperationsStack.PopReverse();

            action.Do();

            OnRedo(action);
        }
Пример #2
0
        /// <summary>
        ///     Undo last recorded action
        /// </summary>
        public void PerformUndo()
        {
            if (!Enabled || !CanUndo)
            {
                return;
            }

            var action = (IUndoAction)UndoOperationsStack.PopHistory();

            action.Undo();

            OnUndo(action);
        }
Пример #3
0
        /// <summary>
        /// Adds the action to the history.
        /// </summary>
        /// <param name="action">The action.</param>
        public void AddAction(IUndoAction action)
        {
            if (action == null)
            {
                throw new ArgumentNullException();
            }

            if (!Enabled)
            {
                return;
            }

            UndoOperationsStack.Push(action);

            OnAction(action);
        }
Пример #4
0
        /// <summary>
        ///     Ends recording for undo action.
        /// </summary>
        /// <param name="snapshotInstance">Instance of an object to finish recording, if null take last provided.</param>
        public void RecordMultiEnd(object[] snapshotInstance = null)
        {
            if (!Enabled)
            {
                return;
            }

            if (snapshotInstance == null)
            {
                snapshotInstance = (object[])_snapshots.Last().Key;
            }
            var action = _snapshots[snapshotInstance].End(snapshotInstance);

            _snapshots.Remove(snapshotInstance);

            // It may be null if no changes has been found during recording
            if (action != null)
            {
                UndoOperationsStack.Push(action);
                OnAction(action);
            }
        }
Пример #5
0
        /// <summary>
        ///     Ends recording for undo action.
        /// </summary>
        /// <param name="snapshotInstance">Instance of an object to finish recording, if null take last provided.</param>
        /// <param name="customActionBefore">Custom action to append to the undo block action before recorded modifications apply.</param>
        /// <param name="customActionAfter">Custom action to append to the undo block action after recorded modifications apply.</param>
        public void RecordMultiEnd(object[] snapshotInstance = null, IUndoAction customActionBefore = null, IUndoAction customActionAfter = null)
        {
            if (!Enabled)
            {
                return;
            }

            if (snapshotInstance == null)
            {
                snapshotInstance = (object[])_snapshots.Last().Key;
            }
            var action = _snapshots[snapshotInstance].End(snapshotInstance);

            _snapshots.Remove(snapshotInstance);

            // It may be null if no changes has been found during recording
            if (action != null)
            {
                // Batch with a custom action if provided
                if (customActionBefore != null && customActionAfter != null)
                {
                    action = new MultiUndoAction(new[] { customActionBefore, action, customActionAfter });
                }
                else if (customActionBefore != null)
                {
                    action = new MultiUndoAction(new[] { customActionBefore, action });
                }
                else if (customActionAfter != null)
                {
                    action = new MultiUndoAction(new[] { action, customActionAfter });
                }

                UndoOperationsStack.Push(action);
                OnAction(action);
            }
        }
Пример #6
0
 /// <summary>
 /// Clears the history.
 /// </summary>
 public void Clear()
 {
     _snapshots.Clear();
     UndoOperationsStack.Clear();
 }