private bool CanRepositionEvent(int startIndex, ComponentChangedEventArgs e)
            {
                bool flag  = false;
                bool flag2 = false;
                bool flag3 = false;

                for (int i = startIndex + 1; i < this._events.Count; i++)
                {
                    AddRemoveUndoEvent event2 = this._events[i] as AddRemoveUndoEvent;
                    RenameUndoEvent    event3 = this._events[i] as RenameUndoEvent;
                    ChangeUndoEvent    event4 = this._events[i] as ChangeUndoEvent;
                    if ((event2 != null) && !event2.NextUndoAdds)
                    {
                        flag = true;
                    }
                    else if ((event4 != null) && ChangeEventsSymmetric(event4.ComponentChangingEventArgs, e))
                    {
                        flag3 = true;
                    }
                    else if (event3 != null)
                    {
                        flag2 = true;
                    }
                }
                return((flag && !flag2) && !flag3);
            }
 public virtual void ComponentChanging(ComponentChangingEventArgs e)
 {
     if ((this._ignoreAddingList == null) || !this._ignoreAddingList.Contains(e.Component))
     {
         if (this._changeEvents == null)
         {
             this._changeEvents = new ArrayList();
         }
         if ((this._engine != null) && (this._engine.GetName(e.Component, false) != null))
         {
             IComponent component = e.Component as IComponent;
             bool       flag      = false;
             for (int i = 0; i < this._changeEvents.Count; i++)
             {
                 ChangeUndoEvent event2 = (ChangeUndoEvent)this._changeEvents[i];
                 if ((event2.OpenComponent == e.Component) && event2.ContainsChange(e.Member))
                 {
                     flag = true;
                     break;
                 }
             }
             if (!flag || (((e.Member != null) && (e.Member.Attributes != null)) && e.Member.Attributes.Contains(DesignerSerializationVisibilityAttribute.Content)))
             {
                 ChangeUndoEvent event3 = null;
                 bool            serializeBeforeState = true;
                 if ((this._ignoreAddedList != null) && this._ignoreAddedList.Contains(e.Component))
                 {
                     serializeBeforeState = false;
                 }
                 if ((component != null) && (component.Site != null))
                 {
                     event3 = new ChangeUndoEvent(this._engine, e, serializeBeforeState);
                 }
                 else if (e.Component != null)
                 {
                     IReferenceService service = this.GetService(typeof(IReferenceService)) as IReferenceService;
                     if (service != null)
                     {
                         IComponent component2 = service.GetComponent(e.Component);
                         if (component2 != null)
                         {
                             event3 = new ChangeUndoEvent(this._engine, new ComponentChangingEventArgs(component2, null), serializeBeforeState);
                         }
                     }
                 }
                 if (event3 != null)
                 {
                     this.AddEvent(event3);
                     this._changeEvents.Add(event3);
                 }
             }
         }
     }
 }
 public virtual void ComponentChanged(ComponentChangedEventArgs e)
 {
     if ((this._events != null) && (e != null))
     {
         for (int i = 0; i < this._events.Count; i++)
         {
             ChangeUndoEvent event2 = this._events[i] as ChangeUndoEvent;
             if ((((event2 != null) && ChangeEventsSymmetric(event2.ComponentChangingEventArgs, e)) && ((i != (this._events.Count - 1)) && (e.Member != null))) && (e.Member.Attributes.Contains(DesignerSerializationVisibilityAttribute.Content) && this.CanRepositionEvent(i, e)))
             {
                 this._events.RemoveAt(i);
                 this._events.Add(event2);
             }
         }
     }
 }
 public virtual void ComponentRemoved(ComponentEventArgs e)
 {
     if ((this._events != null) && (e != null))
     {
         ChangeUndoEvent event2 = null;
         int             index  = -1;
         for (int i = this._events.Count - 1; i >= 0; i--)
         {
             AddRemoveUndoEvent event3 = this._events[i] as AddRemoveUndoEvent;
             if (event2 == null)
             {
                 event2 = this._events[i] as ChangeUndoEvent;
                 index  = i;
             }
             if ((event3 != null) && (event3.OpenComponent == e.Component))
             {
                 event3.Commit(this._engine);
                 if ((i == (this._events.Count - 1)) || (event2 == null))
                 {
                     break;
                 }
                 bool flag = true;
                 for (int j = i + 1; j < index; j++)
                 {
                     if (!(this._events[j] is ChangeUndoEvent))
                     {
                         flag = false;
                         break;
                     }
                 }
                 if (!flag)
                 {
                     break;
                 }
                 this._events.RemoveAt(i);
                 this._events.Insert(index, event3);
                 return;
             }
         }
     }
 }
 public virtual void ComponentChanging(ComponentChangingEventArgs e)
 {
     if ((this._ignoreAddingList == null) || !this._ignoreAddingList.Contains(e.Component))
     {
         if (this._changeEvents == null)
         {
             this._changeEvents = new ArrayList();
         }
         if ((this._engine != null) && (this._engine.GetName(e.Component, false) != null))
         {
             IComponent component = e.Component as IComponent;
             bool flag = false;
             for (int i = 0; i < this._changeEvents.Count; i++)
             {
                 ChangeUndoEvent event2 = (ChangeUndoEvent) this._changeEvents[i];
                 if ((event2.OpenComponent == e.Component) && event2.ContainsChange(e.Member))
                 {
                     flag = true;
                     break;
                 }
             }
             if (!flag || (((e.Member != null) && (e.Member.Attributes != null)) && e.Member.Attributes.Contains(DesignerSerializationVisibilityAttribute.Content)))
             {
                 ChangeUndoEvent event3 = null;
                 bool serializeBeforeState = true;
                 if ((this._ignoreAddedList != null) && this._ignoreAddedList.Contains(e.Component))
                 {
                     serializeBeforeState = false;
                 }
                 if ((component != null) && (component.Site != null))
                 {
                     event3 = new ChangeUndoEvent(this._engine, e, serializeBeforeState);
                 }
                 else if (e.Component != null)
                 {
                     IReferenceService service = this.GetService(typeof(IReferenceService)) as IReferenceService;
                     if (service != null)
                     {
                         IComponent component2 = service.GetComponent(e.Component);
                         if (component2 != null)
                         {
                             event3 = new ChangeUndoEvent(this._engine, new ComponentChangingEventArgs(component2, null), serializeBeforeState);
                         }
                     }
                 }
                 if (event3 != null)
                 {
                     this.AddEvent(event3);
                     this._changeEvents.Add(event3);
                 }
             }
         }
     }
 }