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++; } } } } }
public virtual MenuItem MergeMenu() { MenuItem item = (MenuItem)Activator.CreateInstance(base.GetType()); this.data.AddItem(item); item.MergeMenu(this); return(item); }
public virtual void MergeMenu(Menu menuSrc) { if (menuSrc == this) { throw new ArgumentException("The menu cannot be merged with itself"); } if (menuSrc == null) { return; } for (int i = 0; i < menuSrc.MenuItems.Count; i++) { MenuItem sourceitem = menuSrc.MenuItems[i]; switch (sourceitem.MergeType) { case MenuMerge.Remove: // Item not included break; case MenuMerge.Add: { int pos = FindMergePosition(sourceitem.MergeOrder); MenuItems.Add(pos, sourceitem.CloneMenu()); break; } case MenuMerge.Replace: case MenuMerge.MergeItems: { for (int pos = FindMergePosition(sourceitem.MergeOrder - 1); pos <= MenuItems.Count; pos++) { if ((pos >= MenuItems.Count) || (MenuItems[pos].MergeOrder != sourceitem.MergeOrder)) { MenuItems.Add(pos, sourceitem.CloneMenu()); break; } MenuItem mergeitem = MenuItems[pos]; if (mergeitem.MergeType != MenuMerge.Add) { if ((sourceitem.MergeType == MenuMerge.MergeItems) && (mergeitem.MergeType == MenuMerge.MergeItems)) { mergeitem.MergeMenu(sourceitem); } else { MenuItems.Remove(sourceitem); MenuItems.Add(pos, sourceitem.CloneMenu()); } break; } } break; } default: break; } } }