void IUndoEngineOperations.AddUndoUnitCore(UndoUnit unit)
 {
     //add element to Undo list
     this.containerUndoUnit.DoList.Add(unit);
     //clear redo list
     this.containerUndoUnit.RedoList.Clear();
 }
 public void AddUndoUnit(UndoUnit unit)
 {
     if (unit == null)
     {
         throw FxTrace.Exception.ArgumentNull("unit");
     }
     this.undoEngineImpl.AddUndoUnitCore(unit);
 }
 public void AddUndoUnit(UndoUnit unit)
 {
     if (unit == null)
     {
         throw FxTrace.Exception.ArgumentNull("unit");
     }
     this.undoEngineImpl.AddUndoUnitCore(unit);
 }
 private void NotifyUndoUnitCancelled(UndoUnit unit)
 {
     if (this.UndoUnitCancelled != null)
     {
         this.UndoUnitCancelled(this, new UndoUnitEventArgs()
         {
             UndoUnit = unit
         });
     }
 }
 private void NotifyRedoExecuted(UndoUnit unit)
 {
     if (this.RedoCompleted != null)
     {
         this.RedoCompleted(this, new UndoUnitEventArgs()
         {
             UndoUnit = unit
         });
     }
 }
        void IUndoEngineOperations.AddUndoUnitCore(UndoUnit unit)
        {
            undoBuffer.Add(unit);
            this.NotifyUndoUnitAdded(unit);

            if (undoBuffer.Count > capacity)
            {
                undoBuffer.RemoveAt(0);
                NotifyUndoUnitDiscarded();
            }

            redoBuffer.Clear();
            this.NotifyUndoRedoBufferChanged();
        }
        bool IUndoEngineOperations.RedoCore()
        {
            bool succeeded = false;

            if (redoBuffer.Count > 0)
            {
                UndoUnit unitToRedo = redoBuffer.Last();
                redoBuffer.RemoveAt(redoBuffer.Count - 1);
                unitToRedo.Redo();
                undoBuffer.Add(unitToRedo);
                NotifyRedoExecuted(unitToRedo);
                succeeded = true;
            }
            return(succeeded);
        }
            bool IUndoEngineOperations.RedoCore()
            {
                //if there is anything to redo
                bool succeeded = false;

                if (this.containerUndoUnit.RedoList.Count > 0)
                {
                    //get first element to redo
                    UndoUnit unitToRedo = this.containerUndoUnit.RedoList.First();
                    //remove it
                    this.containerUndoUnit.RedoList.RemoveAt(0);
                    //redo it
                    unitToRedo.Redo();
                    //add it to the end of undo list
                    this.containerUndoUnit.DoList.Add(unitToRedo);
                    succeeded = true;
                }
                return(succeeded);
            }
            bool IUndoEngineOperations.UndoCore()
            {
                //if there is anything to undo
                bool succeeded = false;

                if (this.containerUndoUnit.DoList.Count > 0)
                {
                    //get the last element done
                    UndoUnit unitToUndo = this.containerUndoUnit.DoList.Last();
                    //remove it
                    this.containerUndoUnit.DoList.RemoveAt(this.containerUndoUnit.DoList.Count - 1);
                    //undo it
                    unitToUndo.Undo();
                    //and insert to the head of redo list
                    this.containerUndoUnit.RedoList.Insert(0, unitToUndo);
                    succeeded = true;
                }
                return(succeeded);
            }
 void IUndoEngineOperations.AddUndoUnitCore(UndoUnit unit)
 {
     //add element to Undo list
     this.containerUndoUnit.DoList.Add(unit);
     //clear redo list
     this.containerUndoUnit.RedoList.Clear();
 }
 private void NotifyUndoUnitCancelled(UndoUnit unit)
 {
     if (this.UndoUnitCancelled != null)
     {
         this.UndoUnitCancelled(this, new UndoUnitEventArgs() { UndoUnit = unit });
     }
 }
 private void NotifyRedoExecuted(UndoUnit unit)
 {
     if (this.RedoCompleted != null)
     {
         this.RedoCompleted(this, new UndoUnitEventArgs() { UndoUnit = unit });
     }
 }
        void IUndoEngineOperations.AddUndoUnitCore(UndoUnit unit)
        {
            undoBuffer.Add(unit);
            this.NotifyUndoUnitAdded(unit);

            if (undoBuffer.Count > capacity)
            {
                undoBuffer.RemoveAt(0);
                NotifyUndoUnitDiscarded();
            }

            redoBuffer.Clear();
            this.NotifyUndoRedoBufferChanged();
        }