Example #1
0
        UnitResult Redo()
        {
            if (globallyRedoableUnits.Count < 1)
            {
                throw new InvalidOperationException("No unit to redo.");                 /* TODO: Make localizable resource. */
            }

            var unit      = globallyRedoableUnits.Pop();
            var eventArgs = new CancellableUndoServiceEventArgs(unit);

            OnRedoing(eventArgs);

            if (eventArgs.Cancel)
            {
                globallyRedoableUnits.AddLast(unit);
                return(UnitResult.Cancelled);
            }

            var internalUnit = (IInternalUnit)unit;

            globallyRepeatableUnits.AddLast(internalUnit);
            globallyUndoableUnits.AddLast(unit);

            var result = internalUnit.PerformUnit(internalUnit.Argument, UnitMode.Redo);

            TrimIfRequired();

            OnRedone(new UndoServiceEventArgs(unit));
            return(result);
        }
Example #2
0
        UnitResult Undo()
        {
            if (globallyRepeatableUnits.Count < 1)
            {
                throw new InvalidOperationException("No unit to undo.");
            }

            IUndoableUnit undoableUnit   = globallyUndoableUnits.Pop();
            IInternalUnit repeatableUnit = globallyRepeatableUnits.Pop();

            var eventArgs = new CancellableUndoServiceEventArgs(undoableUnit);

            OnUndoing(eventArgs);
            if (eventArgs.Cancel)
            {
                globallyUndoableUnits.AddLast(undoableUnit);
                globallyRepeatableUnits.AddLast(repeatableUnit);
                return(UnitResult.Cancelled);
            }

            globallyRedoableUnits.AddLast(undoableUnit);

            UnitResult result = undoableUnit.Undo();

            OnUndone(new UndoServiceEventArgs(undoableUnit));
            return(result);
        }