/// <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); }
/// <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)); }