Пример #1
0
        public void Undo()
        {
            try
            {
                _undoInProgress = true;

                Debug.WriteLine("UndoRedo Manager Available undo actions count: " + _undoActions.Count);

                if (_undoActions.Count == 0)
                {
                    return;
                }
                object oUndoAction = ListOperations.Pop(_undoActions);

                Type undoDataType = oUndoAction.GetType();

                if (typeof(UndoTransaction).Equals(undoDataType))
                {
                    StartTransaction(oUndoAction as UndoTransaction);
                }

                undoDataType.InvokeMember("Execute", BindingFlags.InvokeMethod, null, oUndoAction, null);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            finally
            {
                _undoInProgress = false;
                EndTransaction(_curTran);
            }
        }
Пример #2
0
        public void PushReverseAction <T>(UndoRedoOperation <T> undoOperation, T undoData)
        {
            List <IUndoRedoAction> stack = null;

            if (_undoInProgress)
            {
                stack = _redoActions;
            }
            else
            {
                stack = _undoActions;
            }

            if ((!_undoInProgress) && (!_redoInProgress))
            {
                //_redoActions.Clear();
            }
            if (_curTran == null)
            {
                ListOperations.Push(stack, new UndoRedoAction <T>(undoOperation, undoData));
            }
            else
            {
                (stack[0] as UndoTransaction).AddUndoRedoOperation(new UndoRedoAction <T>(undoOperation, undoData));
            }

            if (stack.Count > _maximumActions)
            {
                stack.RemoveRange(_maximumActions - 1, stack.Count - _maximumActions);
            }
        }
Пример #3
0
 public void StartTransaction(UndoTransaction tran)
 {
     if (_curTran == null)
     {
         _curTran = tran;
         ListOperations.Push(_undoActions, new UndoTransaction(tran.Name));
         ListOperations.Push(_redoActions, new UndoTransaction(tran.Name));
     }
 }
Пример #4
0
        public void EndTransaction(UndoTransaction tran)
        {
            if (_curTran == tran)
            {
                _curTran = null;
                if (_undoActions.Count > 0)
                {
                    UndoTransaction t = _undoActions[0] as UndoTransaction;
                    if (t != null && t.OperationsCount == 0)
                    {
                        ListOperations.Pop(_undoActions);
                    }
                }

                if (_redoActions.Count > 0)
                {
                    UndoTransaction t = _redoActions[0] as UndoTransaction;
                    if (t != null && t.OperationsCount == 0)
                    {
                        ListOperations.Pop(_redoActions);
                    }
                }
            }
        }