示例#1
0
        private void CreateComboBox(ExtensionTypeParameter parameter)
        {
            var labelHeight = 15;
            var width       = 100;

            UpdateLine(width + ControlDelta_);

            var label = new Label
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop),
                Size     = new Size(width, labelHeight),
                Text     = parameter.Name + ":",
                Name     = "lbl" + parameter.Name
            };
            var comboBox = new ComboBox
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop + labelHeight),
                Size     = new Size(width, 20),
                Name     = parameter.Name,
                Tag      = parameter
            };

            comboBox.Items.AddRange(Enum.GetNames(parameter.ParameterType));

            comboBox.Text = parameter.HasDefaultValue ?
                            parameter.Value.ToString() :
                            Enum.GetNames(parameter.ParameterType)[0];

            _groupBox.Controls.Add(label);
            _groupBox.Controls.Add(comboBox);

            UpdateWidth(width + ControlDelta_);
        }
示例#2
0
        private void CreateTextBox(ExtensionTypeParameter parameter)
        {
            var labelHeight = 15;
            var width       = 100;

            UpdateLine(width + ControlDelta_);

            var label = new Label
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop),
                Size     = new Size(width, labelHeight),
                Text     = parameter.Name + ":",
                Name     = "lbl" + parameter.Name
            };
            var textBox = new TextBox
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop + labelHeight),
                Size     = new Size(width, 20),
                Name     = parameter.Name,
                Tag      = parameter
            };

            if (parameter.HasDefaultValue)
            {
                textBox.Text = parameter.Value.ToString();
            }

            _groupBox.Controls.Add(label);
            _groupBox.Controls.Add(textBox);

            UpdateWidth(width + ControlDelta_);
        }
示例#3
0
        private Control CreateFileInput(ExtensionTypeParameter parameter)
        {
            var buttonCommand = new Command {
                Tag = parameter
            };

            buttonCommand.Executed += buttonCommand_Click;

            return(new TableLayout
            {
                Rows =
                {
                    new Label           {
                        Text = parameter.Name + ":"
                    },
                    new StackLayout
                    {
                        Orientation = Orientation.Horizontal,
                        Items =
                        {
                            new TextBox {
                                ReadOnly = true, ID = parameter.Name
                            },
                            new Button  {
                                Text = "...", Command = buttonCommand
                            }
                        }
                    }
                }
            });
        }
示例#4
0
        private void CreateCheckBox(ExtensionTypeParameter parameter)
        {
            var labelHeight = 15;
            var width       = 100;

            UpdateLine(width + ControlDelta_);

            var chk = new CheckBox
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop + labelHeight),
                Size     = new Size(width, 20),
                Text     = parameter.Name,
                Name     = parameter.Name,
                Tag      = parameter,
            };

            if (parameter.HasDefaultValue)
            {
                chk.Checked = (bool)parameter.Value;
            }

            _groupBox.Controls.Add(chk);

            UpdateWidth(width + ControlDelta_);
        }
示例#5
0
        private Control CreateControl(ExtensionTypeParameter parameter)
        {
            if (parameter.IsFile)
            {
                return(CreateFileInput(parameter));
            }

            if (parameter.ParameterType.IsEnum)
            {
                return(CreateComboBox(parameter));
            }

            switch (Type.GetTypeCode(parameter.ParameterType))
            {
            case TypeCode.Byte:
            case TypeCode.SByte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
            case TypeCode.UInt32:
            case TypeCode.Int64:
            case TypeCode.UInt64:
            case TypeCode.Single:
            case TypeCode.Double:
            case TypeCode.Decimal:
            case TypeCode.Char:
            case TypeCode.String:
                return(CreateTextBox(parameter));

            case TypeCode.Boolean:
                return(CreateCheckBox(parameter));
            }

            throw new InvalidOperationException("The parameter cannot be parsed to a control.");
        }
示例#6
0
        private Control CreateComboBox(ExtensionTypeParameter parameter)
        {
            var enumNames = Enum.GetNames(parameter.ParameterType).ToList();

            var comboBox = new ComboBox {
                Tag = parameter, DataStore = enumNames
            };

            comboBox.SelectedValueChanged += comboBox_SelectedValueChanged;

            if (parameter.HasDefaultValue)
            {
                comboBox.SelectedIndex = enumNames.ToList().IndexOf(parameter.Value.ToString());
            }

            return(new StackLayout
            {
                Orientation = Orientation.Vertical,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,

                Items =
                {
                    new Label {
                        Text = parameter.Name + ":"
                    },
                    comboBox
                }
            });
        }
示例#7
0
        private Control CreateCheckBox(ExtensionTypeParameter parameter)
        {
            var checkBox = new CheckBox
            {
                Text    = parameter.Name,
                Checked = parameter.HasDefaultValue && (bool)parameter.Value,
                Tag     = parameter
            };

            checkBox.CheckedChanged += checkBox_CheckedChanged;

            return(new StackLayout
            {
                Orientation = Orientation.Vertical,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,

                Items = { checkBox }
            });
        }
示例#8
0
        public void AddParameter(ExtensionTypeParameter parameter)
        {
            if (parameter.IsFile)
            {
                CreateFileInput(parameter);
                return;
            }

            if (parameter.ParameterType.IsEnum)
            {
                CreateComboBox(parameter);
                return;
            }

            switch (Type.GetTypeCode(parameter.ParameterType))
            {
            case TypeCode.Byte:
            case TypeCode.SByte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
            case TypeCode.UInt32:
            case TypeCode.Int64:
            case TypeCode.UInt64:
            case TypeCode.Single:
            case TypeCode.Double:
            case TypeCode.Decimal:
            case TypeCode.Char:
            case TypeCode.String:
                CreateTextBox(parameter);
                break;

            case TypeCode.Boolean:
                CreateCheckBox(parameter);
                break;
            }
        }
示例#9
0
        private void CreateFileInput(ExtensionTypeParameter parameter)
        {
            var labelHeight = 15;
            var width       = 100;

            UpdateLine(width + ControlDelta_);

            var label = new Label
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop),
                Size     = new Size(width, labelHeight),
                Text     = parameter.Name + ":",
                Name     = "lbl" + parameter.Name
            };
            var textBox = new TextBox
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft, _topLeftCorner.Y + _paddingTop + labelHeight),
                Size     = new Size(width - 30, 20),
                Name     = parameter.Name,
                ReadOnly = true
            };
            var button = new Button
            {
                Location = new Point(_topLeftCorner.X + _paddingLeft + textBox.Size.Width + 5, _topLeftCorner.Y + _paddingTop + labelHeight),
                Size     = new Size(25, 20),
                Name     = "btn" + parameter.Name,
                Text     = "..."
            };

            button.Click += Button_Click;

            _groupBox.Controls.Add(label);
            _groupBox.Controls.Add(textBox);
            _groupBox.Controls.Add(button);

            UpdateWidth(width + ControlDelta_);
        }
示例#10
0
        private Control CreateTextBox(ExtensionTypeParameter parameter)
        {
            var textBox = new TextBox
            {
                Text = parameter.HasDefaultValue ? parameter.Value.ToString() : string.Empty,
                Tag  = parameter
            };

            textBox.TextChanged += textBox_TextChanged;

            return(new StackLayout
            {
                Orientation = Orientation.Vertical,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,

                Items =
                {
                    new Label {
                        Text = parameter.Name + ":"
                    },
                    textBox
                }
            });
        }
        public static bool TryParse(this ExtensionTypeParameter parameter, Control control, out string error)
        {
            error = "";

            // If type is a file
            if (parameter.IsFile)
            {
                var fileTextBox = control as TextBox;
                if (string.IsNullOrEmpty(fileTextBox.Text))
                {
                    error = $"Parameter '{parameter.Name}' is empty.";
                    return(false);
                }

                parameter.Value = fileTextBox.Text;
                return(true);
            }

            // If type is an enum
            if (parameter.ParameterType.IsEnum)
            {
                var enumName = ((ComboBox)control).SelectedText;
                if (!Enum.IsDefined(parameter.ParameterType, enumName))
                {
                    error = $"'{enumName}' is no valid member of  parameter '{parameter.Name}'.";
                    return(false);
                }

                parameter.Value = Enum.Parse(parameter.ParameterType, enumName);
                return(true);
            }

            // If type is a boolean
            if (parameter.ParameterType == typeof(bool))
            {
                parameter.Value = ((CheckBox)control).Checked;
                return(true);
            }

            // If type is text based
            var textBox = (TextBox)control;

            if (string.IsNullOrEmpty(textBox.Text))
            {
                error = $"Parameter '{parameter.Name}' is empty.";
                return(false);
            }

            if (parameter.ParameterType == typeof(char))
            {
                if (!char.TryParse(textBox.Text, out var result))
                {
                    error = $"'{textBox.Text}' in parameter '{parameter.Name}' is no valid character.";
                    return(false);
                }

                parameter.Value = result;
                return(true);
            }

            if (parameter.ParameterType == typeof(string))
            {
                parameter.Value = textBox.Text;
                return(true);
            }

            if (!TryParseNumber(parameter.ParameterType, textBox.Text, out var value))
            {
                error = $"'{textBox.Text}' in parameter '{parameter.Name}' is no valid '{parameter.ParameterType.Name}'.";
                return(false);
            }

            parameter.Value = value;
            return(true);
        }