Example #1
0
 public void DiscardFrom(IOleUndoUnit pUU)
 {
     _wrappedUndoManager.DiscardFrom(pUU);
 }
Example #2
0
        private static List <IOleUndoUnit> RemoveTop(IOleUndoManager undoManager, IEnumOleUndoUnits enumerator, int count)
        {
            List <IOleUndoUnit> backupList = new List <IOleUndoUnit>();
            List <IOleUndoUnit> returnList = new List <IOleUndoUnit>();
            int hr;

            if (count > 0)
            {
                uint returned = 1;

                // backup all existing undo units
                while (returned > 0)
                {
                    IOleUndoUnit[] units = new IOleUndoUnit[10];

                    hr = enumerator.Next((uint)units.Length, units, out returned);
                    Marshal.ThrowExceptionForHR(hr);

                    if (returned == 10)
                    {
                        backupList.AddRange(units);
                    }
                    else if (returned > 0)
                    {
                        for (int i = 0; i < returned; i++)
                        {
                            backupList.Add(units[i]);
                        }
                    }
                }

                // put units back except those which should be removed
                if (backupList.Count > 0)
                {
                    PoisonPillUndoUnit pill = new PoisonPillUndoUnit();
                    undoManager.Add(pill);

                    // clear stack
                    undoManager.DiscardFrom(pill);

                    // add units back
                    for (int i = 0; i < backupList.Count - count; i++)
                    {
                        undoManager.Add(backupList[i]);
                    }

                    // return top "count" units or less, if there's not enough
                    if (count <= backupList.Count)
                    {
                        returnList = backupList.GetRange(backupList.Count - count, count);
                    }
                    else
                    {
                        returnList = backupList;
                    }
                }
            }

            returnList.Reverse();
            return(returnList);
        }