Пример #1
0
        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);
                };
            }
        }