internal static MenuModelItem RequestItem(IEnumerable <MenuModelItem> rootItems, string[] itemNameTreePath, Action <MenuModelItem> addAction, Action <MenuModelItem> configureAction) { // Check if such item already exists. Returns it, if it does. { MenuModelItem existingItem = GetItemDeep(rootItems, itemNameTreePath); if (existingItem != null) { return(existingItem); } } // Create an item that matches the specified full name MenuModelItem resultItem = null; { // Create the root item MenuModelItem item = rootItems.FirstOrDefault(c => string.Equals(c.Name, itemNameTreePath[0], StringComparison.InvariantCultureIgnoreCase)); if (item == null) { item = new MenuModelItem(itemNameTreePath[0]); if (configureAction != null) { configureAction(item); } addAction(item); } // Create subsequent items resultItem = item; for (int i = 1; i < itemNameTreePath.Length; i++) { resultItem = item.Items.FirstOrDefault(c => string.Equals(c.Name, itemNameTreePath[i], StringComparison.InvariantCultureIgnoreCase)); if (resultItem == null) { resultItem = new MenuModelItem(itemNameTreePath[i]); if (configureAction != null) { configureAction(resultItem); } item.AddItem(resultItem); } item = resultItem; } } return(resultItem); }
internal static MenuModelItem GetItemDeep(IEnumerable <MenuModelItem> rootItems, string[] itemNameTreePath) { IEnumerable <MenuModelItem> itemCollection = rootItems; MenuModelItem item = null; for (int nameIndex = 0; nameIndex < itemNameTreePath.Length; nameIndex++) { item = itemCollection.FirstOrDefault(i => i.Name == itemNameTreePath[nameIndex]); if (item == null) { return(null); } itemCollection = item.Items; } return(item); }
public void RemoveItem(MenuModelItem item) { this.RemoveItems(new[] { item }); }
public void AddItem(MenuModelItem item) { this.AddItems(new[] { item }); }