public virtual void MergeMenu(Menu menuSrc)
{
if (menuSrc == this)
{
throw new ArgumentException(System.Windows.Forms.SR.GetString("MenuMergeWithSelf"), "menuSrc");
}
if ((menuSrc.items != null) && (this.items == null))
{
this.MenuItems.Clear();
}
for (int i = 0; i < menuSrc.ItemCount; i++)
{
MenuItem itemSrc = menuSrc.items[i];
switch (itemSrc.MergeType)
{
case MenuMerge.Add:
this.MenuItems.Add(this.FindMergePosition(itemSrc.MergeOrder), itemSrc.MergeMenu());
break;
case MenuMerge.Replace:
case MenuMerge.MergeItems:
{
int mergeOrder = itemSrc.MergeOrder;
int index = this.xFindMergePosition(mergeOrder);
while (true)
{
if (index >= this.ItemCount)
{
this.MenuItems.Add(index, itemSrc.MergeMenu());
break;
}
MenuItem item2 = this.items[index];
if (item2.MergeOrder != mergeOrder)
{
this.MenuItems.Add(index, itemSrc.MergeMenu());
break;
}
if (item2.MergeType != MenuMerge.Add)
{
if ((itemSrc.MergeType != MenuMerge.MergeItems) || (item2.MergeType != MenuMerge.MergeItems))
{
item2.Dispose();
this.MenuItems.Add(index, itemSrc.MergeMenu());
}
else
{
item2.MergeMenu(itemSrc);
}
break;
}
index++;
}
}
}
}
}