public EntityOperationContext(T entity, OperationInfo operationInfo, EntityButtonContext context, EntityOperationSettings <T> settings) { Entity = entity; OperationInfo = operationInfo; Context = context; OperationSettings = settings; }
protected internal virtual List <FrameworkElement> ButtonBar_GetButtonBarElement(object entity, EntityButtonContext ctx) { Entity ident = entity as Entity; if (ident == null) { return(null); } Type type = ident.GetType(); var operations = (from oi in OperationInfos(type) where oi.IsEntityOperation && (oi.AllowsNew.Value || !ident.IsNew) let os = GetSettings <EntityOperationSettingsBase>(type, oi.OperationSymbol) let eoc = newEntityOperationContext.GetInvoker(os?.OverridenType ?? type)(ident, oi, ctx, os) where (os != null && os.HasIsVisible) ? os.OnIsVisible(eoc) : ctx.ShowOperations select eoc).ToList(); if (operations.Any(eoc => eoc.OperationInfo.HasCanExecute == true)) { Dictionary <OperationSymbol, string> canExecutes = Server.Return((IOperationServer os) => os.GetCanExecuteAll(ident)); foreach (var eoc in operations) { var ce = canExecutes.TryGetC(eoc.OperationInfo.OperationSymbol); if (ce != null && ce.HasText()) { eoc.CanExecute = ce; } } } List <FrameworkElement> buttons = new List <FrameworkElement>(); Dictionary <EntityOperationGroup, ToolBarButton> groups = new Dictionary <EntityOperationGroup, ToolBarButton>(); Dictionary <EntityOperationGroup, List <FrameworkElement> > groupButtons = new Dictionary <EntityOperationGroup, List <FrameworkElement> >(); foreach (var eoc in operations) { if (eoc.OperationInfo.OperationType == OperationType.ConstructorFrom && (eoc.OperationSettings == null || !eoc.OperationSettings.AvoidMoveToSearchControl)) { if (EntityOperationToolBarButton.MoveToSearchControls(eoc)) { continue; } } EntityOperationGroup group = GetDefaultGroup(eoc); if (group != null) { var list = groupButtons.GetOrCreate(group, () => { var tbb = EntityOperationToolBarButton.CreateGroupContainer(group); groups.Add(group, tbb); buttons.Add(tbb); return(new List <FrameworkElement>()); }); list.Add(EntityOperationToolBarButton.NewMenuItem(eoc, group)); } else { buttons.Add(EntityOperationToolBarButton.NewToolbarButton(eoc)); } } foreach (var gr in groups) { var cm = gr.Value.ContextMenu; foreach (var b in groupButtons.GetOrThrow(gr.Key).OrderBy(Common.GetOrder)) { cm.Items.Add(b); } } return(buttons.ToList()); }
public virtual ToolBarButton[] ButtonBar_GetButtonBarElement(EntityButtonContext ctx, ModifiableEntity entity) { Entity ident = entity as Entity; if (ident == null) { return(null); } Type type = ident.GetType(); var operations = (from oi in OperationInfos(type) where oi.IsEntityOperation && (oi.AllowsNew.Value || !ident.IsNew) let os = GetSettings <EntityOperationSettingsBase>(type, oi.OperationSymbol) let eoc = newEntityOperationContext.GetInvoker(os?.OverridenType ?? type)(ident, oi, ctx, os) where (os != null && os.HasIsVisible) ? os.OnIsVisible(eoc) : ctx.ShowOperations select eoc).ToList(); if (operations.Any(eoc => eoc.OperationInfo.HasCanExecute == true)) { Dictionary <OperationSymbol, string> canExecutes = OperationLogic.ServiceCanExecute(ident); foreach (var eoc in operations) { var ce = canExecutes.TryGetC(eoc.OperationInfo.OperationSymbol); if (ce != null && ce.HasText()) { eoc.CanExecute = ce; } } } List <ToolBarButton> buttons = new List <ToolBarButton>(); Dictionary <EntityOperationGroup, ToolBarDropDown> groups = new Dictionary <EntityOperationGroup, ToolBarDropDown>(); foreach (var eoc in operations.Where(c => c.OperationSettings == null || !c.OperationSettings.HideOnCanExecute || c.CanExecute == null)) { EntityOperationGroup group = GetDefaultGroup(eoc); if (group != null) { var cm = groups.GetOrCreate(group, () => { var id = group == EntityOperationGroup.Create ? "tmConstructors" : ""; var tbm = new ToolBarDropDown(ctx.Prefix, id) { Title = group.Description(), Text = group.Description(), CssClass = group.CssClass, Items = new List <IMenuItem>(), Order = group.Order, }; buttons.Add(tbm); return(tbm); }); cm.Items.Add(CreateToolBarButton(eoc, group).ToMenuItem()); } else { buttons.Add(CreateToolBarButton(eoc, null)); } } foreach (var item in buttons.OfType <ToolBarDropDown>()) { item.Items = item.Items.OrderBy(a => ((MenuItem)a).Order).ToList(); } return(buttons.OrderBy(a => a.Order).ToArray()); }