private int CountUndos(Interop.IEnumOleUndoUnits enumerator) { int num2 = 0; IntPtr zero = IntPtr.Zero; enumerator.Reset(); try { int num; while (enumerator.Next(1, out zero, out num) == 0) { Interop.IOleUndoUnit objectForIUnknown = (Interop.IOleUndoUnit) Marshal.GetObjectForIUnknown(zero); Marshal.Release(zero); if ((enumerator == null) || (num == 0)) { return num2; } num2++; } } catch (Exception exception) { MessageBox.Show(exception.ToString(), "Exception in CountUndos"); } return num2; }
private void Pack(Interop.IEnumOleUndoUnits enumerator) { int num; enumerator.Reset(); Interop.IOleUndoUnit[] unitArray = new Interop.IOleUndoUnit[this._startIndex]; this._undoUnits = new Interop.IOleUndoUnit[this._numUndos]; IntPtr zero = IntPtr.Zero; for (int i = 0; i < this._startIndex; i++) { enumerator.Next(1, out zero, out num); unitArray[i] = (Interop.IOleUndoUnit) Marshal.GetObjectForIUnknown(zero); Marshal.Release(zero); } for (int j = 0; j < this._numUndos; j++) { enumerator.Next(1, out zero, out num); this._undoUnits[j] = (Interop.IOleUndoUnit) Marshal.GetObjectForIUnknown(zero); Marshal.Release(zero); } this._undoManager.DiscardFrom(null); for (int k = 0; k < this._startIndex; k++) { this._undoManager.Add(unitArray[k]); } this._undoManager.Add(this); }