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