コード例 #1
0
        private void AddNumeric(ObsProperty property, ObsData setting, List<Control> controls)
        {
            ObsPropertyType type = property.Type;
            string name = property.Name;

            NumericUpDown numeric = new NumericUpDown
            {
                Width = 300,
                DecimalPlaces = 0
            };

            if (type == ObsPropertyType.Int)
            {
                int intMin = property.IntMin;
                int intMax = property.IntMax;
                long intValue = setting.GetInt(name);
                intValue = Math.Max(Math.Min(intValue, intMax), intMin);

                numeric.Minimum = intMin;
                numeric.Maximum = intMax;
                numeric.Increment = property.IntStep;
                numeric.Value = intValue;

                numeric.ValueChanged += (sender, args) =>
                {
                    setting.SetInt(name, (int)numeric.Value);
                    view.PropertyChanged(property);
                };
            }
            else if (type == ObsPropertyType.Float)
            {
                double floatMin = property.FloatMin;
                double floatMax = property.FloatMax;
                double floatValue = setting.GetDouble(name);
                floatValue = Math.Max(Math.Min(floatValue, floatMax), floatMin);

                numeric.DecimalPlaces = 2;
                numeric.Minimum = (decimal)floatMin;
                numeric.Maximum = (decimal)floatMax;
                numeric.Increment = (decimal)property.FloatStep;
                numeric.Value = (decimal)floatValue;

                numeric.ValueChanged += (sender, args) =>
                {
                    setting.SetDouble(name, (double)numeric.Value);
                    view.PropertyChanged(property);
                };
            }

            if (property.IntType == ObsNumberType.Slider || property.FloatType == ObsNumberType.Slider)
            {
                numeric.Width = 75;
                numeric.Height = 23;

                const int multiplier = 1000;
                var trackbar = new TrackBar
                               {
                                   AutoSize = false,
                                   Width = 300,
                                   Height = 23,
                                   TickStyle = TickStyle.None,
                                   Minimum = (int)(numeric.Minimum * multiplier),
                                   Maximum = (int)(numeric.Maximum * multiplier),
                                   SmallChange = (int)(numeric.Increment * multiplier),
                                   LargeChange = (int)(numeric.Increment * multiplier),
                                   Value = (int)(numeric.Value * multiplier)
                               };
                trackbar.ValueChanged += (sender, args) => numeric.Value = (decimal)trackbar.Value / multiplier;
                numeric.ValueChanged += (sender, args) => trackbar.Value = (int) (numeric.Value * multiplier);
                controls.Add(trackbar);
            }
            controls.Add(numeric);
        }
コード例 #2
0
        private void AddFont(ObsProperty property, ObsData setting, List<Control> controls)
        {
            string name = property.Name;

            Label label = new Label
            {
                Width = 300,
                Height = 60,
                AutoSize = false,
                BorderStyle = BorderStyle.Fixed3D,
                TextAlign = ContentAlignment.MiddleCenter
            };

            Button button = new Button { Text = "Select..." };

            using (ObsData fontData = new ObsData(setting.GetObject(name)))
            {
                string family = fontData.GetString("face");
                //string style = fontData.GetString("style");	//not supported in Windows
                ObsFontFlags flags = (ObsFontFlags)fontData.GetInt("flags");

                label.Font = new Font(family, 25F, (FontStyle)flags); ;
                label.Text = family;
            }

            button.Click += (sender, args) =>
            {
                var fontDialog = new FontDialog();

                using (ObsData fontData = new ObsData(setting.GetObject(name)))
                {
                    float size = fontData.GetInt("size");
                    fontDialog.Font = new Font(label.Font.FontFamily, size, label.Font.Style);
                }

                if (fontDialog.ShowDialog() == DialogResult.OK)
                {
                    var font = fontDialog.Font;

                    using (ObsData fontData = new ObsData(setting.GetObject(name)))
                    {
                        fontData.SetString("face", font.Name.ToString());
                        fontData.SetString("style", "");	//not supported in Windows
                        fontData.SetInt("size", (int)font.SizeInPoints);
                        fontData.SetInt("flags", (int)font.Style);
                    }

                    view.PropertyChanged(property);

                    font = new Font(font.Name, 25f, font.Style);
                    label.Font = font;
                    label.Text = font.Name;
                }
            };

            controls.Add(label);
            controls.Add(button);
        }
コード例 #3
0
        private void AddList(ObsProperty property, ObsData setting, List<Control> controls)
        {
            string name = property.Name;

            int index = 0;
            string[] names = property.GetListItemNames();
            object[] values = property.GetListItemValues();
            EventHandler selectedIndexChanged = null;
            ComboBox combobox = new ComboBox { Width = 300 };

            combobox.Items.AddRange(names.ToArray());

            //if (namelist.Length > 0)
            //	combobox.SelectedIndex = 0;

            if (property.ListType == ObsComboType.List)
                combobox.DropDownStyle = ComboBoxStyle.DropDownList;

            switch (property.ListFormat)
            {
                case ObsComboFormat.Float:
                    {
                        index = Array.IndexOf(values, setting.GetDouble(name));

                        selectedIndexChanged = (sender, args) =>
                        {
                            double value = (double)values.GetValue(combobox.SelectedIndex);
                            setting.SetDouble(name, value);
                            view.PropertyChanged(property);
                        };
                        break;
                    }
                case ObsComboFormat.Int:
                    {
                        var val = setting.GetInt(name);
                        index = Array.IndexOf(values, setting.GetInt(name));

                        selectedIndexChanged = (sender, args) =>
                        {
                            long value = (long)values[combobox.SelectedIndex];
                            setting.SetInt(name, (int)value);
                            view.PropertyChanged(property);
                        };
                        break;
                    }
                case ObsComboFormat.String:
                    {
                        index = Array.IndexOf(values, setting.GetString(name));

                        selectedIndexChanged = (sender, args) =>
                        {
                            string value = (string)values[combobox.SelectedIndex];
                            setting.SetString(name, value);
                            view.PropertyChanged(property);
                        };
                        break;
                    }
            }

            if (index != -1)
                combobox.SelectedIndex = index;

            combobox.SelectedIndexChanged += selectedIndexChanged;

            if (index == -1 && names.Length > 0)
                combobox.SelectedIndex = 0;

            controls.Add(combobox);
        }
コード例 #4
0
        private void AddColor(ObsProperty property, ObsData setting, List<Control> controls)
        {
            string name = property.Name;

            // note: libobs stores color in ABGR instead of ARGB

            Color color = ColorHelper.FromAbgr((int)setting.GetInt(name));
            TextBox textbox = new TextBox
            {
                Width = 300,
                ForeColor = color.GetBrightness() > 0.93 ? Color.Black : color,
                Text = color.ToHtml(),
                TextAlign = HorizontalAlignment.Center
            };

            Button button = new Button { Text = "Select..." };

            textbox.TextChanged += (sender, args) =>
            {
                Color newColor = ColorHelper.FromAbgr((int)setting.GetInt(name));
                newColor = newColor.FromHtml(textbox.Text);

                textbox.ForeColor = newColor.GetBrightness() > 0.93 ? Color.Black : newColor;
                setting.SetInt(name, newColor.ToAbgr());
                view.PropertyChanged(property);
            };

            button.Click += (sender, args) =>
            {
                ColorDialog colorDialog = new ColorDialog
                {
                    AllowFullOpen = true,
                    AnyColor = true,
                    Color = ColorHelper.TryColorFromHtml(textbox.Text),
                    FullOpen = true
                };
                colorDialog.Color = colorDialog.Color.FromHtml(textbox.Text);

                if (colorDialog.ShowDialog(this) == DialogResult.OK)
                    textbox.Text = colorDialog.Color.ToHtml();
            };

            controls.Add(textbox);
            controls.Add(button);
        }