예제 #1
0
        /// <inheritdoc />
        void IMenuBuilder.HasSubmenu(string name, int priority, Action <ISubmenuBuilder> configure)
        {
            if (!Submenus.Contains(name))
            {
                Submenus.Add(name);
            }
            ISubmenuBuilder menu2;

            if (!Contributor.Store.TryGetValue(name, out var menu))
            {
                Contributor.Store.Add(name, menu2 = new ConcreteSubmenuBuilder(Contributor)
                {
                    Priority = priority
                });
            }
            else if (menu is ISubmenuBuilder menu3)
            {
                menu2 = menu3;
            }
            else
            {
                throw new InvalidOperationException(
                          $"\"{name}\" is not a submenu.");
            }
            configure.Invoke(menu2);
        }
예제 #2
0
        /// <inheritdoc />
        public void Contribute()
        {
            if (Finalized)
            {
                return;
            }
            Finalized = true;

            var subMenus = Contributor.Store
                           .Where(a => Submenus.Contains(a.Key))
                           .Select(a => a.Value)
                           .Cast <ConcreteSubmenuBuilder>()
                           .ToList();

            subMenus.ForEach(a => a.Contribute());
            Entries.ForEach(a => ((IMenuEntryBuilder)a).Contribute());
            Entries.AddRange(subMenus);
            Entries.Sort((a, b) => a.Priority.CompareTo(b.Priority));
        }