// // // // // $Revision$ // using System; using System.Collections.Generic; using System.Diagnostics; namespace ICSharpCode.TextEditor.Undo { /// /// This class stacks the last x operations from the undostack and makes /// one undo/redo operation from it. /// internal sealed class UndoQueue : IUndoableOperation { List undolist = new List(); /// /// public UndoQueue(Stack stack, int numops) { if (stack == null) { throw new ArgumentNullException("stack"); } Debug.Assert(numops > 0 , "ICSharpCode.TextEditor.Undo.UndoQueue : numops should be > 0"); if (numops > stack.Count) { numops = stack.Count; } for (int i = 0; i < numops; ++i) { undolist.Add(stack.Pop()); } } public void Undo() { for (int i = 0; i < undolist.Count; ++i) { undolist[i].Undo(); } } public void Redo() { for (int i = undolist.Count - 1 ; i >= 0 ; --i) { undolist[i].Redo(); } } } }