Beispiel #1
0
        protected virtual IEnumerable <IMenuModel> CreateChildren(Option <IMenuModel> parent)
        {
            if (parent.IsNone)
            {
                return(RootItems);
            }

            var model    = parent.Map(p => p.Model);
            var provider = StructureProviders.Find(p => model.Exists(p.HasChildren));

            this.LogDebug("Loading children for {}.", parent.Head());
            this.LogDebug("Using structure provider: {}.", provider);

            var children =
                from m in model
                from p in provider
                select p.FindChildren(m);

            return(children.Flatten().Bind(child => CreateItem(child, parent)));
        }
Beispiel #2
0
        private void HandleItemsChange(IEnumerable <IMenuModel> items)
        {
            ItemsContainer.GetChildren()
            .OfType <Node>()
            .Filter(c => !EmptyLabel.Contains(c))
            .Iter(ItemsContainer.FreeChild);

            bool IsValid(IMenuModel item)
            {
                var hasChildren = StructureProviders.Exists(p => p.HasChildren(item.Model));
                var executable  = MenuHandlers.Exists(h => h.CanExecute(item));

                return(hasChildren || executable);
            }

            var list = items.Filter(IsValid).Freeze();

            list.Iter((index, item) => CreateItemControl(item, index, ItemsContainer));

            EmptyLabel.Iter(v => v.Visible = !list.Any());
        }