Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 public void RemoveItem(MenuModelItem item)
 {
     this.RemoveItems(new[] { item });
 }
Exemple #4
0
 public void AddItem(MenuModelItem item)
 {
     this.AddItems(new[] { item });
 }