private static void RenderWidgetTreeNode(WidgetBase widget)
    {
        ImGui.PushID($"widget${widget.GetHashCode()}");
        var zIndex = "";

        if (widget is WidgetContainer window && window.GetParent() == null)
        {
            zIndex = $" Z:{window.ZIndex}";
        }
        if (ImGui.TreeNode($"{widget.GetType().Name} #{widget.GetHashCode()} - {widget.GetId()} ({widget.GetSourceURI()}){zIndex}"))
        {
            if (ImGui.IsItemHovered())
            {
                RenderWidgetOutline(widget);
            }

            if (widget is WidgetContainer container)
            {
                foreach (var child in container.GetChildren())
                {
                    RenderWidgetTreeNode(child);
                }
            }

            ImGui.TreePop();
        }
        else
        {
            // Render the hover outline even when collapsed
            if (ImGui.IsItemHovered())
            {
                RenderWidgetOutline(widget);
            }
        }
    }
예제 #2
0
        private void SetDataSource(WidgetBase widget)
        {
            var dataSourceSetting = HttpContext.RequestServices.GetService(typeof(IOptions <>).MakeGenericType(widget.GetType())) as IOptions <WidgetBase>;

            if (dataSourceSetting != null)
            {
                widget.DataSourceLink      = dataSourceSetting.Value.DataSourceLink;
                widget.DataSourceLinkTitle = dataSourceSetting.Value.DataSourceLinkTitle;
            }
            else
            {
                widget.DataSourceLink      = string.Empty;
                widget.DataSourceLinkTitle = string.Empty;
            }
        }
        public static Kendo.Mvc.UI.WidgetBase ToKendoWidget(this WidgetBase widget, HtmlHelper helper,
                                                            IJavaScriptInitializer initializer, Kendo.Mvc.IUrlGenerator urlGenerator)
        {
            var type = widget.GetType();

            if (type.IsGenericType)
            {
                if (type.GetGenericTypeDefinition() == typeof(TextBox <>))
                {
                    var tb = TextBoxExtensions.CreateTextBox(
                        type.GenericTypeArguments[0], helper, initializer);
                    tb.Name = widget.Name;

                    tb.SetPropValue("Value", widget.GetPropValue("Value"));

                    dynamic dynamicTb = tb;
                    dynamicTb.Enabled = !widget.IsReadOnly;
                    return(tb);
                }

                if (type.GetGenericTypeDefinition() == typeof(Grid <>))
                {
                    var grid        = widget as Grid;
                    var controlType = typeof(Kendo.Mvc.UI.Grid <>).MakeGenericType(type.GenericTypeArguments[0]);
                    var control     = (Kendo.Mvc.UI.WidgetBase)Activator.CreateInstance(controlType, new object[]
                    {
                        helper.ViewContext, initializer, urlGenerator, DI.Current.Resolve <Kendo.Mvc.UI.Html.IGridHtmlBuilderFactory>()
                    });

                    control.Name = "grid";
                    var gridControl = (Kendo.Mvc.UI.IGrid)control;
                    grid.DataSource.SetDataSource(gridControl.DataSource, helper, initializer, urlGenerator);


                    return(control);
                }
            }
            else
            {
                if (widget is Grid)
                {
                    var grid = widget as Grid;
                    return(grid.ToKendoWidget(helper, initializer));
                }

                if (widget is DatePicker)
                {
                    var dp = widget as DatePicker;
                    return(dp.ToKendoWidget(helper, initializer));
                }

                if (widget is CheckBox)
                {
                    var cb = widget as CheckBox;
                    return(cb.ToKendoWidget(helper, initializer));
                }

                if (widget is ComboBox)
                {
                    var cb = widget as ComboBox;
                    return(cb.ToKendoWidget(helper, initializer, urlGenerator));
                }

                if (widget is Label)
                {
                    var label = widget as Label;
                    return(label.ToKendoWidget(helper, initializer));
                }

                if (widget is Link)
                {
                    var link = widget as Link;
                    return(link.ToKendoWidget(helper, initializer));
                }

                if (widget is Tabs)
                {
                    var tabs = widget as Tabs;
                    return(tabs.ToKendoWidget(helper, initializer, urlGenerator));
                }
            }

            if (widget is Panel)
            {
                return(new NsPanel(widget as Panel, helper, initializer, urlGenerator));
            }
            return(null);
        }