MergeMenu() public method

public MergeMenu ( ) : MenuItem
return MenuItem
Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
Archivo: Menu.cs Proyecto: nsivov/mono
        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;
                }
            }
        }