public override object ReadJson(JToken jToken, JsonSerializer serializer) { var type = (string)jToken["type"]; ControlTemplate controlTemplate; switch (type) { case "AmountNumericUpDown": controlTemplate = new AmountNumericUpDownTemplate(); break; case "AccountDropDownList": controlTemplate = new AccountDropDownListTemplate(); break; case ControlType.GroupBox: controlTemplate = new GroupBoxTemplate <WMColumnTemplate>(); break; default: return(base.ReadJson(jToken, serializer)); } using (var innerReader = jToken.CreateReader()) { serializer.Populate(innerReader, controlTemplate); } return(controlTemplate); }
public string RenderBoxedGroups(IEnumerable <IGrouping <int, Framework.Domain.MenuPrincipal> > groupedMenus, Framework.Domain.MenuPrincipal rootMenu) { StringBuilder boxedGroupshtml = new StringBuilder(); IGrouping <int, Framework.Domain.MenuPrincipal> groupsNode = groupedMenus.FirstOrDefault(group => group.Key == rootMenu.ID); if (groupsNode == null) { return(string.Empty); } int boxCount = (int)Math.Ceiling((double)groupsNode.Count() / GroupsPerBox); for (int i = 0; i < boxCount; i++) { StringBuilder groupshtml = new StringBuilder(); foreach (Framework.Domain.MenuPrincipal currentGroup in groupsNode.Skip(i * GroupsPerBox).Take(GroupsPerBox)) { string destino = string.Empty; if (currentGroup.Destino == Core.Domain.Destino.Fancybox) { currentGroup.ClassedeEstiloCSS += " fancybox"; destino = "data-fancybox-type=\"iframe\""; } else if (currentGroup.Destino != Core.Domain.Destino.Invalido) { destino = string.Format("target=\"{0}\"", currentGroup.Destino.ToString()); } IGrouping <int, Framework.Domain.MenuPrincipal> subitems = groupedMenus .FirstOrDefault(group => group.Key == currentGroup.ID); string subitemsHtml = RenderSubMenus(groupedMenus, subitems); groupshtml.Append( GroupTemplate .Replace("[Title]", currentGroup.Title) .Replace("[Url]", currentGroup.URL) .Replace("[ClassedeEstiloCSS]", currentGroup.ClassedeEstiloCSS) .Replace("[Destino]", destino) .Replace("{subitems}", subitemsHtml)); } boxedGroupshtml.Append( GroupBoxTemplate .Replace("{groups}", groupshtml.ToString())); } return(boxedGroupshtml.ToString()); }
public void ApplyTemplate <TColumnTemplate>(GroupBoxTemplate <TColumnTemplate> template) where TColumnTemplate : class, IShapeColumnTemplate { if (null == template) { throw new ArgumentNullException(nameof(template)); } Reset(); Text = template.Desc; AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; if (null != template.Name) { Name = template.Name; } var innerControlWidth = template.ControlWidth - (Padding.Left + Padding.Right + ControlTemplate.ControlMargin + ControlTemplate.ControlMargin); // Корректировка шаблонов вложенных элементов (устанавливаем ширину). foreach (var controlTemplate in template.Column.Controls) { controlTemplate.ControlWidth = innerControlWidth; } var controlHolders = ControlHolderHelper.BuildControlHolders(template.Column.Controls); var tunableShape = new TunableShape { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Location = new Point(DisplayRectangle.Location.X, DisplayRectangle.Location.Y) }; tunableShape.BuildSingleColumn(controlHolders); SuspendLayout(); Controls.Add(tunableShape); ResumeLayout(); _controlHolders.AddRange(controlHolders); foreach (var controlHolder in ControlHolders) { var serviceControl = controlHolder.Control as IServiceControl; if (null == serviceControl) { continue; } serviceControl.ServiceCommand += (sender, args) => { ServiceCommand?.Invoke(serviceControl, args); }; } }