Exemple #1
0
        public RegisterNewTypeDialog()
        {
            var desc = new Label
            {
                Text = "Adding a supported type will allow XenForms to recognize additional view properties. You may need to use the Load Project Assemblies Dialog, first. Only value types are supported in the Beta. \n\ne.g. Xamarin.Forms.Rectangle"
            };

            _textBox = new TextBox();

            var container = new TableLayout(1, 3)
            {
                Spacing = new Size(0, 10)
            };

            var footer = new TableLayout(3, 1)
            {
                Spacing = new Size(5, 0)
            };

            var ok = new Button {
                Text = "Ok"
            };
            var cancel = new Button {
                Text = "Cancel"
            };

            footer.Add(null, 0, 0, true, false);
            footer.Add(cancel, 1, 0, false, false);
            footer.Add(ok, 2, 0, false, false);

            container.Add(desc, 0, 0, true, true);
            container.Add(_textBox, 0, 1, false, false);
            container.Add(footer, 0, 2, false, false);

            _dlg = new ConnectedDialog
            {
                Padding       = AppStyles.WindowPadding,
                Content       = container,
                Width         = 350,
                Height        = 220,
                Icon          = AppImages.Xf,
                Title         = "Register New Property Type",
                AbortButton   = cancel,
                DefaultButton = ok
            };

            ok.Click     += OnClick;
            cancel.Click += (s, e) => Close();
        }
Exemple #2
0
        public static Dialog Create(PropertyEditorModel <string> model)
        {
            var value = model.ToolboxValue as string;

            var dlg = new ConnectedDialog
            {
                Title   = "Edit String",
                Padding = AppStyles.WindowPadding,
                Width   = 500,
                Height  = 400,
            };

            var footer = new TableLayout(2, 1);
            var layout = new TableLayout(1, 2)
            {
                Spacing = new Size(0, 10)
            };

            var text = new TextArea
            {
                Text        = value,
                Wrap        = true,
                DataContext = model
            };

            text.TextBinding.BindDataContext((PropertyEditorModel <string> m) => (string)m.ToolboxValue);

            text.ReadOnly = !model.Property.CanWrite;

            var ok = new Button {
                Text = CommonResource.Ok
            };

            ok.Click += (s, e) => dlg.Close();

            layout.Add(text, 0, 0, true, true);
            footer.Add(null, 0, 0, true, false);
            footer.Add(ok, 1, 0, false, false);
            layout.Add(footer, 0, 1, true, false);

            dlg.Content     = layout;
            dlg.AbortButton = ok;

            return(dlg);
        }
Exemple #3
0
        public static Dialog Create(PropertyEditorModel <object> model, VisualTreeNode treeNode)
        {
            var id       = treeNode.Widget.Id;
            var editable = false;

            var dlg = new ConnectedDialog
            {
                Title   = $"Edit {model.DisplayName}",
                Padding = AppStyles.WindowPadding,
                Width   = 365,
                Height  = 420
            };

            var grid = new PropertyEditorGridView();

            var constructorDdl = new DropDown
            {
                Enabled = false
            };

            // default to show the user, so it doesn't flicker into view.
            constructorDdl.Items.Add("Not Applicable", "Not Applicable");
            constructorDdl.SelectedIndex = 0;

            var createBtn = new Button
            {
                Enabled = false,
                Text    = "Create"
            };

            var showBtn = new Button
            {
                Enabled = false,
                Text    = "Show"
            };

            ToolboxApp.AppEvents.Bus.Listen <ConstructorCalled>(args =>
            {
                Application.Instance.Invoke(() =>
                {
                    dlg.Close();
                });
            });

            ToolboxApp.AppEvents.Bus.Listen <ConstructorsReceived>(args =>
            {
                Application.Instance.Invoke(() =>
                {
                    showBtn.Enabled        = editable;
                    constructorDdl.Enabled = editable;

                    if (editable)
                    {
                        // clear default
                        constructorDdl.Items.Clear();

                        foreach (var ctor in args.Type.Constructors)
                        {
                            var item = new ListItem
                            {
                                Text = ctor.DisplayName,
                                Tag  = ctor
                            };

                            constructorDdl.Items.Add(item);
                        }
                    }

                    if (constructorDdl.Items.Count > 0)
                    {
                        constructorDdl.SelectedIndex = 0;
                    }
                });
            });

            ToolboxApp.AppEvents.Bus.Listen <ObjectPropertiesReceived>(args =>
            {
                Application.Instance.Invoke(() =>
                {
                    var xt   = model.Property.XenType;
                    editable = xt.Descriptor.HasFlag(XenPropertyDescriptors.ValueType) && model.Property.CanWrite;

                    grid.ShowEditors(treeNode, args.Properties, editable);
                });
            });

            ToolboxApp.Designer.GetObjectProperties(id, model.Property.Path);
            ToolboxApp.Designer.GetConstructors(model.FullTypeName);

            var propLabel = new Label
            {
                Text = model.Property.CanWrite ? "Properties" : "Properties are readonly"
            };

            var container = new TableLayout(1, 7)
            {
                Spacing = new Size(10, 5)
            };

            var constructors = new TableLayout(2, 1)
            {
                Spacing = new Size(5, 5)
            };

            constructors.Add(constructorDdl, 0, 0, true, false);
            constructors.Add(showBtn, 1, 0, false, false);

            var predefinedDdl = new DropDown();

            var footer = new TableLayout(3, 1)
            {
                Padding = new Padding(0, 5, 0, 0),
                Spacing = new Size(5, 5),
            };

            var escapeBtn = new Button {
                Text = "Ok"
            };

            footer.Add(null, 0, 0, true, false);
            footer.Add(createBtn, 1, 0, false, false);
            footer.Add(escapeBtn, 2, 0, false, false);

            container.Add("Constructors", 0, 0, true, false);
            container.Add(constructors, 0, 1, true, false);
            container.Add($"{model.ShortTypeName} predefined values", 0, 2, true, false);
            container.Add(predefinedDdl, 0, 3, true, false);
            container.Add(propLabel, 0, 4, true, false);
            container.Add(grid, 0, 5, true, true);
            container.Add(footer, 0, 6, true, false);

            dlg.Content = container;

            escapeBtn.Click += (s, e) => { dlg.Close(); };

            dlg.AbortButton   = escapeBtn;
            dlg.DefaultButton = escapeBtn;

            if (!model.Property.CanWrite)
            {
                predefinedDdl.Items.Add("Not Applicable", "Disabled");
                predefinedDdl.SelectedIndex = 0;
                predefinedDdl.Enabled       = false;
            }
            else
            {
                // refactor
                predefinedDdl.Items.Add("Custom", "Custom");

                var vals = model.Property?.XenType?.PossibleValues;
                if (vals != null)
                {
                    foreach (var v in vals)
                    {
                        predefinedDdl.Items.Add(v, v);
                    }
                }

                predefinedDdl.SelectedIndex = 0;
            }

            predefinedDdl.SelectedIndexChanged += (sender, args) =>
            {
                grid.Enabled = predefinedDdl.SelectedIndex == 0;

                if (predefinedDdl.SelectedIndex != 0)
                {
                    model.ToolboxValue = predefinedDdl.SelectedValue.ToString();
                }
            };

            dlg.Shown += (sender, args) =>
            {
                ToolboxApp.Log.Trace($"Showing {nameof(ObjectEditDialog)} for {treeNode.DisplayName}.");
            };

            dlg.Closing += (sender, args) =>
            {
                ToolboxApp.Bus.StopListening <ObjectPropertiesReceived>();
                ToolboxApp.Bus.StopListening <ConstructorsReceived>();
                ToolboxApp.Bus.StopListening <ConstructorCalled>();

                ToolboxApp.Log.Trace($"Closing {nameof(ObjectEditDialog)} for {treeNode.DisplayName}.");
            };

            createBtn.Click += (sender, args) =>
            {
                var item = constructorDdl.SelectedValue as ListItem;
                var ctor = item?.Tag as XenConstructor;

                if (ctor != null)
                {
                    ToolboxApp.Designer.CallConstructor(treeNode.Widget.Id, model.Property, ctor);
                }
            };

            showBtn.Click += (sender, args) =>
            {
                var item = constructorDdl.SelectedValue as ListItem;
                var tag  = item?.Tag as XenConstructor;

                if (tag != null)
                {
                    predefinedDdl.Enabled = false;
                    createBtn.Enabled     = true;
                    escapeBtn.Text        = "Cancel";

                    grid.ShowEditors(treeNode, tag);
                }
                else
                {
                    ToolboxApp.Log.Error($"The selected constructor for {treeNode.DisplayName} did not contain a valid tag.");
                }
            };

            return(dlg);
        }
        public async Task ShowAsync()
        {
            _model.Initialize(ToolboxApp.Project.UserAssemblies);

            var ok = new Button {
                Text = "Ok"
            };
            var close = new Button {
                Text = "Close"
            };

            var container = new TableLayout(1, 7)
            {
                Spacing = new Size(0, 10)
            };

            _dlg = new ConnectedDialog
            {
                DataContext = _model,
                Icon        = AppImages.Xf,
                Title       = "Load Project Assemblies",
                Padding     = AppStyles.WindowPadding,
                MinimumSize = new Size(775, 500),
                Width       = 775,
                Height      = 500,
                AbortButton = close,
                Content     = container,
                Resizable   = true
            };

            var searchbar = new TableLayout(2, 1)
            {
                Spacing = new Size(10, 0)
            };

            var footer = new TableLayout(3, 1)
            {
                Spacing = new Size(5, 0)
            };

            var options1 = new StackLayout
            {
                Spacing     = 5,
                Orientation = Orientation.Horizontal
            };

            var options2 = new StackLayout
            {
                Spacing     = 5,
                Orientation = Orientation.Horizontal
            };

            _search = new SearchBox
            {
                Width           = 300,
                PlaceholderText = "Search"
            };

            var instructions = new Label
            {
                Text = "Select any project assemblies that contain custom renderers, custom page types, etc. Any assembly that contains types that are required for your XAML to load correctly should be selected."
            };

            var recommend = new Label
            {
                Text = "* It's recommended to select debug assemblies.\n* Selecting assemblies will create a project.xen.json file in your project's folder."
            };

            var ignoreSystem = new CheckBox
            {
                Width = 200,
                Text  = "Ignore system assemblies.",
            };

            var ignorePackage = new CheckBox
            {
                Text = "Ignore packages && components folder.",
            };

            var includeDebug = new CheckBox
            {
                Width = 200,
                Text  = "Include debug folder.",
            };

            var includeRelease = new CheckBox
            {
                Text = "Include release folder.",
            };

            _grid = new GridView
            {
                ShowHeader = true,
                GridLines  = GridLines.Horizontal
            };

            _grid.Columns.Add(new GridColumn {
                AutoSize = true, HeaderText = "Include", DataCell = new CheckBoxCell("Include"), Editable = true
            });
            _grid.Columns.Add(new GridColumn {
                AutoSize = true, HeaderText = "File Name", DataCell = new TextBoxCell("FileName"), Editable = false
            });
            _grid.Columns.Add(new GridColumn {
                AutoSize = true, HeaderText = "Directory", DataCell = new TextBoxCell("Directory"), Editable = false
            });
            _grid.Columns.Add(new GridColumn {
                AutoSize = true, HeaderText = "Loaded", DataCell = new TextBoxCell("Sent"), Editable = false
            });

            searchbar.Add(_search, 0, 0, false, false);
            searchbar.Add(null, 1, 0, true, false);

            options1.Items.Add(ignoreSystem);
            options1.Items.Add(ignorePackage);
            options2.Items.Add(includeDebug);
            options2.Items.Add(includeRelease);

            footer.Add(null, 0, 0, true, false);
            footer.Add(close, 1, 0, false, false);
            footer.Add(ok, 2, 0, false, false);

            container.Add(instructions, 0, 0, true, false);
            container.Add(searchbar, 0, 1, true, false);
            container.Add(_grid, 0, 2, true, true);
            container.Add(options1, 0, 3, true, false);
            container.Add(options2, 0, 4, true, false);
            container.Add(recommend, 0, 5, true, false);
            container.Add(footer, 0, 6, true, false);

            var nothingFound = new Label
            {
                Text = "No assemblies found in your project folder."
            };

            if (_model.Assemblies == null || _model.Assemblies.Count == 0)
            {
                searchbar.Add(nothingFound, 1, 0, true, false);
            }

            _grid.DataStore = _model.Assemblies;
            _search.TextBinding.BindDataContext((LoadProjectDialogModel m) => m.SearchText);
            includeRelease.CheckedBinding.BindDataContext((LoadProjectDialogModel m) => m.IncludeReleaseAssemblies);
            includeDebug.CheckedBinding.BindDataContext((LoadProjectDialogModel m) => m.IncludeDebugAssemblies);
            ignorePackage.CheckedBinding.BindDataContext((LoadProjectDialogModel m) => m.IgnorePackageFolder);
            ignoreSystem.CheckedBinding.BindDataContext((LoadProjectDialogModel m) => m.IgnoreSystemAssemblies);

            _dlg.LoadComplete += (s, e) =>
            {
                _model.ApplyFilters();
                _model.IsReady = true;
            };

            ok.Click    += (s, e) => Ok();
            close.Click += (s, e) => Close();
            await _dlg.ShowModalAsync(Application.Instance.MainForm);
        }
Exemple #5
0
        public static Dialog Create(PropertyEditorModel <object> model, VisualTreeNode treeNode)
        {
            var widgetId     = treeNode.Widget.Id;
            var propertyName = model.Property.PropertyName;
            var pv           = model.Property.XenType.PossibleValues;

            var grid = new PropertyEditorGridView();

            var dlg = new ConnectedDialog
            {
                Title   = $"Edit {model.DisplayName}",
                Padding = AppStyles.WindowPadding,
                Width   = 650,
                Height  = 475
            };

            var collection = new ListBox();

            var footer = new TableLayout(4, 1)
            {
                Padding = new Padding(0, 10, 0, 0),
                Spacing = new Size(5, 5)
            };

            var ok = new Button {
                Text = "Ok"
            };
            var add = new Button {
                Text = "Add"
            };
            var del = new Button {
                Text = "Delete"
            };

            footer.Add(del, 0, 0, false, false);
            footer.Add(add, 1, 0, false, false);
            footer.Add(null, 2, 0, true, false);
            footer.Add(ok, 3, 0, false, false);

            var splitter = new Splitter
            {
                SplitterWidth    = 5,
                FixedPanel       = SplitterFixedPanel.Panel1,
                Panel1           = collection,
                Panel2           = grid,
                RelativePosition = dlg.Width * .35
            };

            var container = new TableLayout(1, 2);

            container.Add(splitter, 0, 0, true, true);
            container.Add(footer, 0, 1, true, false);

            dlg.Content       = container;
            dlg.AbortButton   = ok;
            dlg.DefaultButton = ok;

            ok.Click += (s, e) => { dlg.Close(); };

            dlg.Shown += (sender, args) =>
            {
                ToolboxApp.Log.Trace($"Showing {nameof(ObjectEditDialog)} for {treeNode.DisplayName}.");
            };

            dlg.Closing += (sender, args) =>
            {
                ToolboxApp.Bus.StopListening <CollectionPropertiesReceived>();
                ToolboxApp.Bus.StopListening <EditCollectionResponseReceived>();
                ToolboxApp.Bus.StopListening <ReplacedWidgetCollection>();

                ToolboxApp.Log.Trace($"Closing {nameof(ObjectEditDialog)} for {treeNode.DisplayName}.");
            };

            del.Click += (sender, args) =>
            {
                var item = collection.SelectedValue as ListItem;
                var path = (string)item?.Tag;
                if (string.IsNullOrWhiteSpace(path))
                {
                    return;
                }

                var res = MessageBox.Show(Application.Instance.MainForm,
                                          $"Are you sure you want to remove {path}?",
                                          AppResource.Title, MessageBoxButtons.YesNo, MessageBoxType.Question);

                if (res == DialogResult.Yes)
                {
                    ToolboxApp
                    .Designer
                    .EditCollection(treeNode.Widget.Id, EditCollectionType.Delete, path);
                }
            };

            add.Click += (sender, args) =>
            {
                ToolboxApp
                .AppEvents
                .Designer
                .EditCollection(treeNode.Widget.Id, EditCollectionType.Add, model.Property.PropertyName);
            };

            collection.SelectedIndexChanged += (sender, args) =>
            {
                grid.Clear();
                var item = collection.SelectedValue as ListItem;

                if (item != null)
                {
                    var path = (string)item.Tag;
                    ToolboxApp.Designer.GetObjectProperties(widgetId, path);
                }
            };

            ToolboxApp.AppEvents.Bus.Listen <CollectionPropertiesReceived>(args =>
            {
                var index = ReflectionMethods.GetIndexerValue(args.WidgetName);
                if (index == null)
                {
                    return;
                }

                Application.Instance.Invoke(() =>
                {
                    grid.ShowEditors(treeNode, args.Properties);
                });
            });

            ToolboxApp.AppEvents.Bus.Listen <ReplacedWidgetCollection>(args =>
            {
                Application.Instance.Invoke(() =>
                {
                    var length = GetCollectionCount(args.Widget, propertyName);
                    CreateListItems(collection, propertyName, length);
                });
            });

            ToolboxApp.AppEvents.Bus.Listen <EditCollectionResponseReceived>(args =>
            {
                Application.Instance.Invoke(() =>
                {
                    if (!args.Successful)
                    {
                        MessageBox.Show(Application.Instance.MainForm,
                                        $"There was an error performing the '{args.Type}' operation. Check the log for more information.",
                                        AppResource.Title, MessageBoxButtons.OK, MessageBoxType.Error);

                        ToolboxApp.Log.Error(args.Message);
                    }
                });
            });

            // populate list box
            if (pv != null)
            {
                int length;
                var parsed = int.TryParse(pv[0], out length);

                if (parsed)
                {
                    CreateListItems(collection, propertyName, length);
                }
            }

            return(dlg);
        }
Exemple #6
0
        public static Dialog Create(IToolboxEventModel model)
        {
            var dialog = new ConnectedDialog
            {
                Title   = $"{model.DisplayName} Event",
                Padding = new Padding(10),
                Width   = 400,
                Height  = 390,
            };

            var directions = new Label
            {
                Text = "Select a file that will contain your event handler. If one does not exist, select the create option below."
            };

            // event handler name
            var handlerLbl = new Label {
                Text = "Event Handler Name"
            };
            var handlerTxt    = new TextBox();
            var handlerLayout = new TableLayout(1, 2)
            {
                Spacing = new Size(0, 5)
            };

            handlerLayout.Add(handlerLbl, 0, 0, true, false);
            handlerLayout.Add(handlerTxt, 0, 1, true, false);

            // Select or create file layout
            var selectRdo = new RadioButton {
                Text = "Select Project File"
            };
            var selectTxt = new TextBox();
            var selectBtn = new Button
            {
                Text = "Select",
            };

            var selectStack = new StackLayout
            {
                Spacing     = 5,
                Orientation = Orientation.Horizontal,
                Items       =
                {
                    new StackLayoutItem(selectTxt, true),
                    new StackLayoutItem(selectBtn)
                }
            };

            var createRdo = new RadioButton(selectRdo)
            {
                Text = "Create Project File"
            };
            var createTxt = new TextBox();
            var createBtn = new Button
            {
                Text = "Create",
            };

            var createStack = new StackLayout
            {
                Spacing     = 5,
                Orientation = Orientation.Horizontal,
                Items       =
                {
                    new StackLayoutItem(createTxt, true),
                    new StackLayoutItem(createBtn)
                }
            };

            var editorsLbl = new Label {
                Text = "Code Editors"
            };
            var editorsLst = new ListBox();

            editorsLst.Items.Add("Visual Studio", "VS");
            editorsLst.Items.Add("Xamarin Studio", "XS");
            editorsLst.SelectedIndex = 0;

            var fileLayout = new TableLayout(1, 6)
            {
                Spacing = new Size(0, 10)
            };

            // select
            fileLayout.Add(selectRdo, 0, 0, true, false);
            fileLayout.Add(selectStack, 0, 1, true, false);

            // create
            fileLayout.Add(createRdo, 0, 2, true, false);
            fileLayout.Add(createStack, 0, 3, true, false);

            // ide choice
            fileLayout.Add(editorsLbl, 0, 4, true, false);
            fileLayout.Add(editorsLst, 0, 5, true, false);

            // button rows
            var cancel = new Button {
                Text = CommonResource.Cancel
            };
            var ok = new Button {
                Text = CommonResource.Ok
            };
            var btnRow = new TableLayout(3, 1)
            {
                Spacing = new Size(5, 0)
            };

            btnRow.Add(null, 0, 0, true, false);
            btnRow.Add(ok, 1, 0, false, false);
            btnRow.Add(cancel, 2, 0, false, false);

            // dialog main layout
            var container = new TableLayout(1, 5)
            {
                Spacing = new Size(0, 10)
            };

            container.Add(directions, 0, 0, true, false);
            container.Add(handlerLayout, 0, 1, true, false);
            container.Add(fileLayout, 0, 2, true, false);
            container.Add(null, 0, 3, true, true);

            container.Add(btnRow, 0, 4, true, false);

            dialog.Content = container;
            cancel.Click  += (s, e) => dialog.Close();

            dialog.DefaultButton = cancel;

            // refactor later

            selectRdo.CheckedChanged += (s, e) =>
            {
                if (selectRdo.Checked)
                {
                    selectTxt.Enabled = true;
                    selectBtn.Enabled = true;

                    createBtn.Enabled = false;
                    createTxt.Enabled = false;
                }
                else
                {
                    selectBtn.Enabled = false;
                    selectTxt.Enabled = false;

                    createBtn.Enabled = true;
                    createTxt.Enabled = true;
                }
            };

            if (string.IsNullOrWhiteSpace(model.EventHandlerName))
            {
                selectRdo.Checked = true;
            }


            dialog.DataContext = model;
            handlerTxt.TextBinding.BindDataContext((IToolboxEventModel m) => model.EventHandlerName);
            selectTxt.TextBinding.BindDataContext((IToolboxEventModel m) => model.SourceFile);

            selectBtn.Click += (s, e) =>
            {
                var openDialog = new OpenFileDialog
                {
                    Title     = "Open Class",
                    Directory = new Uri("D:\\Demo")
                };

                openDialog.Filters.Add(new FileDialogFilter("C#", ".cs"));
                var result = openDialog.ShowDialog(Application.Instance.MainForm);

                if (result == DialogResult.Ok)
                {
                    model.SourceFile = openDialog.FileName;
                }
            };

            ok.Click += (s, e) =>
            {
                var fs     = new FileSystem();
                var editor = new XenCodeEditor(fs, model.SourceFile);
                editor.PrependEventHandler(model.EventHandlerName, "object sender, EventArgs args");
                VisualStudioBridge.OpenFile(VisualStudioVersion.VS2015, model.SourceFile);

                dialog.Close();
            };

            return(dialog);
        }
Exemple #7
0
        protected override void OnExecuted(EventArgs e)
        {
            base.OnExecuted(e);

            var overwrite = CheckOverwrite();

            if (overwrite == DialogResult.No)
            {
                return;
            }

            var container = new TableLayout(1, 2)
            {
                Spacing = new Size(5, 5)
            };

            var grid = new TableLayout(4, 2)
            {
                Spacing = new Size(10, 10)
            };

            var footer = new TableLayout(3, 1)
            {
                Padding = new Padding(0, 10, 0, 0),
                Spacing = new Size(5, 0)
            };

            var columns = new NumericUpDown {
                Value = 1, DecimalPlaces = 0, MinValue = 0
            };
            var rows = new NumericUpDown {
                Value = 1, DecimalPlaces = 0, MinValue = 0
            };
            var columnSpacing = new NumericUpDown {
                Value = 0, DecimalPlaces = 0, MinValue = 0
            };
            var rowSpacing = new NumericUpDown {
                Value = 0, DecimalPlaces = 0, MinValue = 0
            };

            var ok = new Button {
                Text = "Ok"
            };
            var cancel = new Button {
                Text = "Cancel"
            };

            footer.Add(null, 0, 0, true, false);
            footer.Add(ok, 1, 0, false, false);
            footer.Add(cancel, 2, 0, false, false);

            grid.Add("Columns", 0, 0, false, true);
            grid.Add(columns, 1, 0, false, true);
            grid.Add("Rows", 0, 1, false, true);
            grid.Add(rows, 1, 1, false, true);
            grid.Add("Column Spacing", 2, 0, false, true);
            grid.Add(columnSpacing, 3, 0, false, true);
            grid.Add("Row Spacing", 2, 1, false, true);
            grid.Add(rowSpacing, 3, 1, false, true);

            container.Add(grid, 0, 0, true, true);
            container.Add(footer, 0, 1, false, false);

            var dlg = new ConnectedDialog
            {
                Title         = "Create Grid",
                Width         = 365,
                Height        = 154,
                Padding       = AppStyles.WindowPadding,
                Content       = container,
                AbortButton   = cancel,
                DefaultButton = ok
            };

            cancel.Click += (sender, args) => dlg.Close();

            ok.Click += (sender, args) =>
            {
                var request = XenMessage.Create <CreateGridRequest>();
                request.ParentId      = Node.Widget.Id;
                request.Columns       = (int)columns.Value;
                request.ColumnSpacing = (int)columnSpacing.Value;
                request.Rows          = (int)rows.Value;
                request.RowSpacing    = (int)rowSpacing.Value;
                Socket.Send(request);

                Log.Info($"Creating widget: Grid[{request.Rows}, {request.Columns}].");
                dlg.Close();
            };

            dlg.ShowModal(Application.Instance.MainForm);
        }
        public void Show()
        {
            _vm.Show();

            var desc = new Label
            {
                Text = "Once a view has been added, it will be available for use via the visual tree's context menu. Please enter the type's full name.\n\ne.g. MyProject.Views.ImageButton"
            };

            var textBox = new TextBox();
            var grid    = new GridView
            {
                ShowHeader = true,
                GridLines  = GridLines.Horizontal
            };

            grid.Columns.Add(new GridColumn {
                AutoSize = true, HeaderText = "Type Name", DataCell = new TextBoxCell("TypeName"), Editable = false
            });
            grid.DataStore = _vm.Views;

            var container = new TableLayout(1, 4)
            {
                Spacing = new Size(0, 10)
            };
            var textrow = new TableLayout(2, 1)
            {
                Spacing = new Size(5, 0)
            };
            var footer = new TableLayout(4, 1)
            {
                Spacing = new Size(5, 0)
            };

            var add = new Button {
                Text = "Add"
            };
            var delete = new Button {
                Text = "Delete"
            };
            var ok = new Button {
                Text = "Ok"
            };
            var cancel = new Button {
                Text = "Cancel"
            };

            footer.Add(delete, 0, 0, false, false);
            footer.Add(null, 1, 0, true, false);
            footer.Add(cancel, 2, 0, false, false);
            footer.Add(ok, 3, 0, false, false);

            container.Add(desc, 0, 0, true, false);
            container.Add(textrow, 0, 1, false, false);
            container.Add(grid, 0, 2, false, true);
            container.Add(footer, 0, 3, false, false);

            textrow.Add(textBox, 0, 0, true, false);
            textrow.Add(add, 1, 0, false, false);

            _dlg = new ConnectedDialog
            {
                Padding     = AppStyles.WindowPadding,
                Content     = container,
                Width       = 350,
                Height      = 400,
                Icon        = AppImages.Xf,
                Title       = "Register New View",
                AbortButton = cancel,
                DataContext = _vm
            };

            textBox.TextBinding.BindDataContext((RegisterNewViewModel m) => m.TypeName);
            grid.SelectedItemBinding.BindDataContext((RegisterNewViewModel m) => m.SelectedItem);
            delete.Bind(d => d.Enabled, _vm, vm => vm.DeleteEnabled);
            add.Bind(d => d.Enabled, _vm, vm => vm.AddEnabled);

            add.Click       += OnAdd;
            delete.Click    += OnDelete;
            ok.Click        += OnOk;
            textBox.KeyDown += OnKeyDown;
            cancel.Click    += OnCancel;

            _dlg.ShowModal(Application.Instance.MainForm);
        }
Exemple #9
0
        public static Dialog Create(PropertyEditorModel <string> model)
        {
            var xt   = model.Property?.XenType;
            var chks = new List <CheckBox>();

            var dialog = new ConnectedDialog
            {
                Title   = "Edit Enumeration",
                Padding = AppStyles.WindowPadding,
                Width   = 275,
                Height  = 225
            };

            var footer = new TableLayout(3, 1)
            {
                Spacing = new Size(5, 0)
            };

            var layout = new TableLayout(1, 2)
            {
                Spacing = new Size(0, 10)
            };

            var chkStack = new StackLayout
            {
                Padding         = AppStyles.PanelPadding,
                BackgroundColor = Colors.White,
                Spacing         = 5,
                Orientation     = Orientation.Vertical
            };

            // add checkboxes to stack.
            if (xt?.PossibleValues.Length > 0)
            {
                foreach (var pv in xt.PossibleValues)
                {
                    var chkd  = false;
                    var value = (string)model.ToolboxValue;

                    var split = value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    if (split.Any(s => s != null && s.Trim() == pv))
                    {
                        chkd = true;
                    }

                    var chk = new CheckBox
                    {
                        Tag     = pv,
                        Checked = chkd,
                        Text    = pv
                    };

                    // expand the width of the checkboxes so they're easier to click.
                    var item = new StackLayoutItem
                    {
                        Control             = chk,
                        HorizontalAlignment = HorizontalAlignment.Stretch
                    };

                    chkStack.Items.Add(item);

                    // make the checkboxes easier to access in the OkClicked event.
                    chks.Add(chk);
                }
            }
            else
            {
                ToolboxApp.Log.Warn($"No flags found for {model.DisplayName}.");
            }

            var scroll = new Scrollable
            {
                Border  = BorderType.Bezel,
                Content = chkStack
            };

            var ok = new Button {
                Text = CommonResource.Ok
            };
            var cancel = new Button {
                Text = CommonResource.Cancel
            };

            footer.Add(null, 0, 0, true, false);
            footer.Add(ok, 1, 0, false, false);
            footer.Add(cancel, 2, 0, false, false);

            layout.Add(scroll, 0, 0, true, true);
            layout.Add(footer, 0, 1, true, false);

            dialog.Content = layout;

            ok.Click += (s, e) =>
            {
                var value = string.Empty;

                // build the toolbox value
                foreach (var chk in chks)
                {
                    // only include checked flags.
                    if (chk.Checked == true)
                    {
                        var tag = (string)chk.Tag;

                        // first flag
                        if (string.IsNullOrWhiteSpace(value))
                        {
                            value = tag;
                        }
                        else
                        {
                            // other flags; note the spacing
                            value += $" | {tag}";
                        }
                    }
                }

                model.ToolboxValue = value;
                dialog.Close();
            };

            // discard changes
            cancel.Click += (s, e) => { dialog.Close(); };

            dialog.AbortButton   = cancel;
            dialog.DefaultButton = ok;

            return(dialog);
        }
        protected override void OnExecuted(EventArgs e)
        {
            base.OnExecuted(e);

            var overwrite = CheckOverwrite();

            if (overwrite == DialogResult.No)
            {
                return;
            }

            var container = new TableLayout(1, 2)
            {
                Spacing = new Size(5, 5)
            };

            var grid = new TableLayout(2, 2)
            {
                Spacing = new Size(5, 10)
            };

            var footer = new TableLayout(3, 1)
            {
                Padding = new Padding(0, 10, 0, 0),
                Spacing = new Size(5, 0)
            };

            var spacing = new NumericUpDown
            {
                DecimalPlaces = 1,
                MinValue      = 0
            };

            var orientation = new DropDown();

            var ok = new Button {
                Text = "Ok"
            };
            var cancel = new Button {
                Text = "Cancel"
            };

            footer.Add(null, 0, 0, true, false);
            footer.Add(ok, 1, 0, false, false);
            footer.Add(cancel, 2, 0, false, false);

            orientation.Items.Add("Vertical");
            orientation.Items.Add("Horizontal");
            orientation.SelectedIndex = 0;

            grid.Add("Orientation", 0, 0, true, true);
            grid.Add(orientation, 1, 0, false, true);
            grid.Add("Spacing", 0, 1, true, true);
            grid.Add(spacing, 1, 1, true, true);

            container.Add(grid, 0, 0, true, true);
            container.Add(footer, 0, 1, false, false);

            var dlg = new ConnectedDialog
            {
                Title         = "Create StackLayout",
                Width         = 300,
                Height        = 155,
                Padding       = AppStyles.WindowPadding,
                Content       = container,
                AbortButton   = cancel,
                DefaultButton = ok
            };

            cancel.Click += (sender, args) => dlg.Close();

            ok.Click += (sender, args) =>
            {
                var request = XenMessage.Create <CreateStackLayoutRequest>();
                request.ParentId    = Node.Widget.Id;
                request.Orientation = orientation.SelectedValue.ToString();
                request.Spacing     = spacing.Value;
                Socket.Send(request);

                Log.Info("Creating widget: StackLayout");
                dlg.Close();
            };

            dlg.ShowModal(Application.Instance.MainForm);
        }