Exemplo n.º 1
0
        public MenuHierarchy GetHierachialModel() {

            if (getHierachialModel != null) return CloneModel(getHierachialModel);
            var list = GetBuildMenu();
            var usedItems = new List<MenuItem>();
            getHierachialModel = new MenuHierarchy(null);

            var selectedItem = GetSelectedMenuItem();
            //create root elements
            foreach (var item in list)
            {
                if (selectedItem.Position == item.Position) item.Selected = true;
                //if (selectedItem.Href == item.Href) item.Selected = true;
                if (!item.Position.Contains(SEPARATOR))
                {
                    getHierachialModel.Children.Add(new MenuHierarchy(item));
                    usedItems.Add(item);
                }
            }
            foreach (var item in getHierachialModel.Children)
            {
                var childUsedItems = CreateChildren(item, list);
                usedItems.AddRange(childUsedItems);
            }

            foreach (var item in list.Except(usedItems).ToList())
            {
                getHierachialModel.Children.Add(new MenuHierarchy(item));
                usedItems.Add(item);
            }

            //set order
            SetOrder(getHierachialModel.Children, 0);

            return CloneModel(getHierachialModel);
        }
Exemplo n.º 2
0
 private MenuHierarchy CloneModel(MenuHierarchy hierachialModel) {
     var mh = _classMappingService.MapObject<MenuHierarchy>(hierachialModel);
     mh.Children = new List<MenuHierarchy>();
     mh.Children.AddRange(hierachialModel.Children.Select(CloneModel));
     return mh;
 }
Exemplo n.º 3
0
        private static IEnumerable<MenuItem> CreateChildren(MenuHierarchy hitem, IEnumerable<MenuItem> list)
        {
            var usedItems = new List<MenuItem>();

            var startStr = hitem.Item.Position + SEPARATOR;
            foreach (var item in list)
            {
                if (item.Position.StartsWith(startStr) && item.Position.LastIndexOf(SEPARATOR) == startStr.Length - 1)
                {
                    hitem.Children.Add(new MenuHierarchy(item) { Level = hitem.Level+1});
                    usedItems.Add(item);
                }
            }
            foreach (var item in hitem.Children) usedItems.AddRange(CreateChildren(item, list));
            return usedItems;
        }