示例#1
0
 public UndoManager(View View, Document Document)
 {
     view           = View;
     doc            = Document;
     undo           = new Stack <UndoPackage>();
     redo           = new Stack <UndoPackage>();
     currentPackage = null;
 }
示例#2
0
 public void ClosePackage()
 {
     if (currentPackage != null)
     {
         if (currentPackage.Count > 0)
         {
             currentPackage.Commit(view.CaretDocLoc, view.Selection, doc.DocumentChanged);
             undo.Push(currentPackage);
         }
         currentPackage = null;
     }
 }
示例#3
0
 public void AddElement(UndoElement Element)
 {
     if (!suspend)
     {
         if (currentPackage == null)
         {
             currentPackage = new UndoPackage(view.CaretDocLoc, view.Selection, doc.DocumentChanged);
         }
         currentPackage.Add(Element);
         redo.Clear();
     }
 }
示例#4
0
 public UndoPackage GetRedoPackage()
 {
     ClosePackage();
     if (redo.Count > 0)
     {
         UndoPackage rp = redo.Pop();
         undo.Push(rp);
         return(rp);
     }
     else
     {
         return(null);
     }
 }
示例#5
0
 public UndoPackage GetUndoPackage()
 {
     ClosePackage();
     if (undo.Count > 0)
     {
         UndoPackage up = undo.Pop();
         redo.Push(up);
         return(up);
     }
     else
     {
         return(null);
     }
 }
示例#6
0
        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();
        }
示例#7
0
        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();
        }
示例#8
0
 public void Clear()
 {
     undo.Clear();
     redo.Clear();
     currentPackage = null;
 }
示例#9
0
 public void SetNewView(UndoPackage UP)
 {
     view.CaretDocLoc    = UP.NewCaretPosn;
     view.Selection      = UP.NewSelection;
     doc.DocumentChanged = UP.NewDocumentChanged;
 }
示例#10
0
 public void SetOldView(UndoPackage UP)
 {
     view.CaretDocLoc    = UP.OldCaretPosn;
     view.Selection      = UP.OldSelection;
     doc.DocumentChanged = UP.OldDocumentChanged;
 }