public UndoManager(View View, Document Document) { view = View; doc = Document; undo = new Stack <UndoPackage>(); redo = new Stack <UndoPackage>(); currentPackage = null; }
public void ClosePackage() { if (currentPackage != null) { if (currentPackage.Count > 0) { currentPackage.Commit(view.CaretDocLoc, view.Selection, doc.DocumentChanged); undo.Push(currentPackage); } currentPackage = null; } }
public void AddElement(UndoElement Element) { if (!suspend) { if (currentPackage == null) { currentPackage = new UndoPackage(view.CaretDocLoc, view.Selection, doc.DocumentChanged); } currentPackage.Add(Element); redo.Clear(); } }
public UndoPackage GetRedoPackage() { ClosePackage(); if (redo.Count > 0) { UndoPackage rp = redo.Pop(); undo.Push(rp); return(rp); } else { return(null); } }
public UndoPackage GetUndoPackage() { ClosePackage(); if (undo.Count > 0) { UndoPackage up = undo.Pop(); redo.Push(up); return(up); } else { return(null); } }
public void Redo() { undoManager.Suspend(); UndoPackage rp = undoManager.GetRedoPackage(); if (rp != null) { for (int i = 0; i < rp.Elements.Count; i++) { rp.Elements[i].Redo(this); } undoManager.SetNewView(rp); } undoManager.Resume(); }
public void Undo() { undoManager.Suspend(); UndoPackage up = undoManager.GetUndoPackage(); if (up != null) { for (int i = up.Elements.Count - 1; i >= 0; i--) { up.Elements[i].Undo(this); } undoManager.SetOldView(up); } undoManager.Resume(); }
public void Clear() { undo.Clear(); redo.Clear(); currentPackage = null; }
public void SetNewView(UndoPackage UP) { view.CaretDocLoc = UP.NewCaretPosn; view.Selection = UP.NewSelection; doc.DocumentChanged = UP.NewDocumentChanged; }
public void SetOldView(UndoPackage UP) { view.CaretDocLoc = UP.OldCaretPosn; view.Selection = UP.OldSelection; doc.DocumentChanged = UP.OldDocumentChanged; }