public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var schemaDesigner = new DocumentSchemaDesignerElement(parent);

            schemaDesigner.ApplyElementMeatadata((object)metadata);

            // Редакторы свойств модели данных

            if (metadata.Editors != null)
            {
                var editors = new List <ItemEditor>();

                foreach (var editor in metadata.Editors)
                {
                    editors.Add(new ItemEditor
                    {
                        Text         = editor.Text,
                        Image        = editor.Image,
                        Container    = editor.Container,
                        MetadataType = editor.MetadataType,
                        LinkView     = context.Build(parent, editor.LinkView)
                    });
                }

                schemaDesigner.SetEditors(editors);
            }

            // Привязка к источнику данных представления

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => schemaDesigner.SetValue(a.Value);
                schemaDesigner.OnValueChanged       += (c, a) => valueBinding.SetPropertyValue(a.Value);
            }

            return(schemaDesigner);
        }
Exemplo n.º 2
0
        private static View CreateView(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            LinkView linkView = context.Build(parent, metadata.View);

            if (linkView != null)
            {
                linkView.SetOpenMode(OpenMode.None);

                return(linkView.CreateView());
            }

            return(null);
        }
Exemplo n.º 3
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var menuDesigner = new MenuDesignerElement(parent);

            menuDesigner.ApplyElementMeatadata((object)metadata);

            // Редактор элементов меню
            var menuItemEditor = context.Build(parent, metadata.Editor);

            menuDesigner.SetEditor(menuItemEditor);

            // Привязка к источнику данных представления

            IElementDataBinding itemsDataBinding = context.Build(parent, metadata.Items);

            if (itemsDataBinding != null)
            {
                itemsDataBinding.OnPropertyValueChanged += (c, a) => menuDesigner.SetItems(a.Value);
                menuDesigner.OnUpdateItems += (c, a) => itemsDataBinding.SetPropertyValue(a.Value);
            }

            return(menuDesigner);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var label = new LabelElement(parent);

            // Установка формата данных
            var valueFormat = context.Build(parent, metadata.Format);

            label.SetFormat(valueFormat);
            label.ApplyElementMeatadata((object)metadata);
            label.SetLineCount(Convert.ToInt32(metadata.LineCount));
            label.SetHorizontalTextAlignment(
                (metadata.HorizontalTextAlignment as string).ToEnum(HorizontalTextAlignment.Left));

            // Привязка к источнику данных

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => label.SetValue(a.Value);
            }

            return(label);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var editor = new ConfigVerifyDesignerElement(parent);

            editor.ApplyElementMeatadata((object)metadata);

            // Привязка к источнику данных

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => editor.SetValue(a.Value);
            }

            return(editor);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var button = new ButtonElement(parent);

            button.ApplyElementMeatadata((object)metadata);
            button.SetImage(metadata.Image);

            var action = context.Build(parent, metadata.Action);

            button.SetAction(action);

            if (parent != null && metadata.OnClick != null)
            {
                button.OnClick += parent.GetScript(metadata.OnClick);
            }

            return(button);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var printViewDesigner = new PrintViewDesignerElement(parent);

            printViewDesigner.ApplyElementMeatadata((object)metadata);

            // Привязка к источнику данных представления

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => printViewDesigner.SetValue(a.Value);
                printViewDesigner.OnValueChanged    += (c, a) => valueBinding.SetPropertyValue(a.Value, force: true);
            }

            return(printViewDesigner);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var checkBox = new CheckBoxElement(parent);

            checkBox.ApplyElementMeatadata((object)metadata);
            checkBox.SetReadOnly(Convert.ToBoolean(metadata.ReadOnly));

            // Привязка к источнику данных

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => checkBox.SetValue(a.Value);
                checkBox.OnValueChanged             += (c, a) => valueBinding.SetPropertyValue(a.Value);
            }

            return(checkBox);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var element = new ConfigSelectorElement(parent);

            element.ApplyElementMeatadata((object)metadata);
            element.SetConfigurationsFunc(GetConfigurations);

            // Привязка к источнику данных

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => element.SetValue(a.Value);
                element.OnValueChanged += (c, a) => valueBinding.SetPropertyValue(a.Value);
            }

            return(element);
        }
Exemplo n.º 10
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var scrollPanel = new ScrollPanelElement(parent);

            scrollPanel.ApplyElementMeatadata((object)metadata);

            scrollPanel.SetVerticalScroll(GetScrollVisibility(metadata.VerticalScroll));
            scrollPanel.SetHorizontalScroll(GetScrollVisibility(metadata.HorizontalScroll));

            var layoutPanel = context.Build(parent, metadata.LayoutPanel);

            scrollPanel.SetLayoutPanel(layoutPanel);

            if (parent != null && metadata.OnLoaded != null)
            {
                scrollPanel.OnLoaded += parent.GetScript(metadata.OnLoaded);
            }

            return(scrollPanel);
        }
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var codeEditor = new CodeEditorElement(parent);

            codeEditor.SetSyntax(BuildSyntax(metadata.Syntax));
            codeEditor.SetFormatter(BuildFormatter(metadata.Formatter));
            codeEditor.ApplyElementMeatadata((object)metadata);

            // Привязка к источнику данных

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => codeEditor.SetValue(a.Value);
                codeEditor.OnValueChanged           += (c, a) => valueBinding.SetPropertyValue(a.Value);
            }

            return(codeEditor);
        }
Exemplo n.º 12
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var element = new ParameterElement(parent);

            element.SetName(metadata.Name);

            IElementDataBinding valueBinding = context.Build(parent, metadata.Value);

            if (valueBinding != null)
            {
                valueBinding.OnPropertyValueChanged += (c, a) => element.SetValue(a.Value);
                element.OnValueChanged += (c, a) => valueBinding.SetPropertyValue(a.Value);
            }

            if (metadata.OnValueChanged != null)
            {
                element.OnValueChanged += parent.GetScript(metadata.OnValueChanged);
            }

            return(element);
        }
Exemplo n.º 13
0
        private static void BindParameters(ObjectBuilderContext context, View parentView, View childView,
                                           dynamic parameters)
        {
            if (parameters != null)
            {
                foreach (var parameterLink in parameters)
                {
                    ParameterElement parameter = childView.GetParameter(parameterLink.Name);

                    if (parameter != null)
                    {
                        IElementDataBinding parameterValueBinding = context.Build(parentView, parameterLink.Value);

                        if (parameterValueBinding != null)
                        {
                            parameterValueBinding.OnPropertyValueChanged += (c, a) => parameter.SetValue(a.Value);
                            parameter.OnValueChanged += (c, a) => parameterValueBinding.SetPropertyValue(a.Value);
                        }
                    }
                }
            }
        }
Exemplo n.º 14
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var action = new BaseItemAction(parent);

            IElementDataBinding itemsDataBinding = context.Build(parent, metadata.Items);

            if (itemsDataBinding != null)
            {
                itemsDataBinding.OnPropertyValueChanged += (c, a) => action.SetItems(a.Value);
                action.OnValueChanged += (c, a) => itemsDataBinding.SetPropertyValue(a.Value);

                var sourceItemsDataBinding = itemsDataBinding as ISourceDataBinding;

                if (sourceItemsDataBinding != null)
                {
                    var dataSourceName = sourceItemsDataBinding.GetDataSource();
                    var propertyName   = sourceItemsDataBinding.GetProperty();

                    // Публикация сообщений в шину при возникновении событий

                    action.NotifyWhenEventAsync(i => i.OnSetSelectedItem, a =>
                    {
                        a.DataSource = dataSourceName;
                        a.Property   = propertyName;
                        return(true);
                    });

                    // Подписка на сообщения шины от внешних элементов

                    action.SubscribeOnEvent(OnSetSelectedItem, a => a.DataSource == dataSourceName &&
                                            a.Property == propertyName);
                }
            }

            action.SetAction(() => ExecuteAction(context, action, metadata));

            return(action);
        }
 private static void ExecuteAction(ObjectBuilderContext context, View parent, dynamic metadata)
 {
     ViewHelper.ShowView(null, () => context.Build(parent, metadata.View));
 }
Exemplo n.º 16
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var view = new View(parent);

            view.SetName(metadata.Name);
            view.SetImage(metadata.Image);

            // Прикладные скрипты

            var scripts = context.BuildScripts(view, (object)metadata.Scripts);

            if (scripts != null)
            {
                foreach (dynamic script in scripts)
                {
                    view.AddScript(script.Name, script.Action);
                }
            }

            // Параметры

            var parameters = context.BuildParameters(view, (object)metadata.Parameters);

            if (parameters != null)
            {
                foreach (dynamic parameter in parameters)
                {
                    view.AddParameter(parameter);
                }
            }

            // Источники данных

            var dataSources = context.BuildMany(view, metadata.DataSources);

            if (dataSources != null)
            {
                foreach (var dataSource in dataSources)
                {
                    view.AddDataSource(dataSource);
                }
            }

            // Общие свойства

            context.BuildOneWayBinding(view, view, "Text", (object)metadata.Text);

            // Элементы представления

            var layoutPanel = context.Build(view, metadata.LayoutPanel);

            view.SetLayoutPanel(layoutPanel);

            // Обработчики событий

            if (metadata.OnTextChanged != null)
            {
                view.OnTextChanged += view.GetScript(metadata.OnTextChanged);
            }

            if (metadata.OnOpening != null)
            {
                view.OnOpening += view.GetScript(metadata.OnOpening);
            }

            if (metadata.OnOpened != null)
            {
                view.OnOpened += view.GetScript(metadata.OnOpened);
            }

            if (metadata.OnClosing != null)
            {
                view.OnClosing += view.GetScript(metadata.OnClosing);
            }
            else
            {
                view.OnClosing += (c, a) => OnClosingDefaultHandler(view, a);
            }

            if (metadata.OnClosed != null)
            {
                view.OnClosed += view.GetScript(metadata.OnClosed);
            }

            if (metadata.OnLoaded != null)
            {
                view.OnLoaded += view.GetScript(metadata.OnLoaded);
            }

            // Публикация сообщений в шину при возникновении событий
            view.NotifyWhenEventAsync(i => i.OnLoaded);

            // Подписка на сообщения шины от внешних элементов
            view.SubscribeOnEvent(OnError);

            return(view);
        }
Exemplo n.º 17
0
        public object Build(ObjectBuilderContext context, View parent, dynamic metadata)
        {
            var treeView = new TreeViewElement(parent);

            treeView.ApplyElementMeatadata((object)metadata);
            treeView.SetMultiSelect(Convert.ToBoolean(metadata.MultiSelect));
            treeView.SetShowNodeImages(Convert.ToBoolean(metadata.ShowNodeImages));
            treeView.SetKeyProperty(metadata.KeyProperty);
            treeView.SetParentProperty(metadata.ParentProperty);
            treeView.SetImageProperty(metadata.ImageProperty);
            treeView.SetValueProperty(metadata.ValueProperty);
            treeView.SetDisplayProperty(metadata.DisplayProperty);

            // Установка формата отображения элемента

            var itemFormat = context.Build(parent, metadata.ItemFormat) as DataFormat;

            if (itemFormat != null)
            {
                treeView.OnRenderItem += (c, a) => { a.Display = itemFormat.Format(a.Item); };
            }

            // Установка панели навигации по данным

            if (metadata.DataNavigation != null && metadata.DataNavigation.DataNavigation != null &&
                metadata.Items != null && metadata.Items.PropertyBinding != null)
            {
                metadata.DataNavigation.DataNavigation.DataSource = metadata.Items.PropertyBinding.DataSource;
            }

            var navigationPanel = context.Build(parent, metadata.DataNavigation);

            treeView.SetDataNavigation(navigationPanel);

            // Установка контекстного меню

            var contextMenu = context.Build(parent, metadata.ContextMenu);

            treeView.SetContextMenu(contextMenu);

            // Привязка к источнику данных списка элементов
            IElementDataBinding itemsDataBinding = context.Build(parent, metadata.Items);

            itemsDataBinding.OnPropertyValueChanged += (c, a) => treeView.SetItems(a.Value);

            // Todo: ReadOnly, Format, Value, OnValueChanged and etc.

            var sourceItemsDataBinding = itemsDataBinding as ISourceDataBinding;

            // Если источник данных для списка элементов определен
            if (sourceItemsDataBinding != null)
            {
                var dataSourceName = sourceItemsDataBinding.GetDataSource();
                var propertyName   = sourceItemsDataBinding.GetProperty();
                var dataSource     = parent.GetDataSource(dataSourceName);

                if (dataSource != null)
                {
                    treeView.SetIdProperty(dataSource.GetIdProperty());
                }

                // Публикация сообщений в шину при возникновении событий

                treeView.NotifyWhenEventAsync(i => i.OnSetSelectedItem, a =>
                {
                    a.DataSource = dataSourceName;
                    a.Property   = propertyName;
                    return(true);
                });

                // Подписка на сообщения шины от внешних элементов

                Func <dynamic, bool> filter = a => !Equals(a.Source, treeView) &&
                                              a.DataSource == dataSourceName &&
                                              a.Property == propertyName;

                treeView.SubscribeOnEvent(OnItemDeleted, filter);
                treeView.SubscribeOnEvent(OnSetSelectedItem, filter);
            }

            if (metadata.OnDoubleClick != null)
            {
                treeView.OnDoubleClick += parent.GetScript(metadata.OnDoubleClick);
            }

            return(treeView);
        }