예제 #1
0
        public ColorPickerPanel()
        {
            var colorProperty = new Property <ColorHSVA>(() => colorHSVA, c => colorHSVA = c);

            spectrum              = new Spectrum(colorProperty);
            spectrum.DragStarted += () => DragStarted?.Invoke();
            spectrum.Changed     += () => Changed?.Invoke();
            spectrum.DragEnded   += () => DragEnded?.Invoke();
            valueSlider           = new ValueSlider(colorProperty);
            alphaSlider           = new AlphaSlider(colorProperty);
            SetupSliderDragHandlers(valueSlider.Widget);
            SetupSliderDragHandlers(alphaSlider.Widget);
            Widget = new Widget
            {
                Padding = new Thickness(8),
                Layout  = new VBoxLayout {
                    Spacing = 8
                },
                Nodes =
                {
                    new Widget {
                        LayoutCell = new LayoutCell(Alignment.Center),
                        Layout     = new StackLayout(),
                        Nodes      =
                        {
                            spectrum.Widget
                        }
                    },
                    valueSlider.Widget,
                    alphaSlider.Widget,
                }
            };
            Widget.FocusScope = new KeyboardFocusScope(Widget);
        }
 protected override void InitializeViews(View view)
 {
     recyclerView        = view.FindViewById <RecyclerView>(Resource.Id.SelectColorRecyclerView);
     saveButton          = view.FindViewById <Button>(Resource.Id.SelectColorSave);
     closeButton         = view.FindViewById <Button>(Resource.Id.SelectColorClose);
     hueSaturationPicker = view.FindViewById <HueSaturationPickerView>(Resource.Id.SelectColorHueSaturationPicker);
     valueSlider         = view.FindViewById <ValueSlider>(Resource.Id.SelectColorValueSlider);
 }
        protected override void InitializeViews(View view)
        {
            titleLabel          = view.FindViewById <TextView>(Resource.Id.SelectColorTitle);
            recyclerView        = view.FindViewById <RecyclerView>(Resource.Id.SelectColorRecyclerView);
            saveButton          = view.FindViewById <Button>(Resource.Id.SelectColorSave);
            closeButton         = view.FindViewById <Button>(Resource.Id.SelectColorClose);
            hueSaturationPicker = view.FindViewById <HueSaturationPickerView>(Resource.Id.SelectColorHueSaturationPicker);
            valueSlider         = view.FindViewById <ValueSlider>(Resource.Id.SelectColorValueSlider);

            titleLabel.Text         = Shared.Resources.ProjectColor;
            closeButton.Text        = Shared.Resources.Cancel;
            saveButton.Text         = Shared.Resources.Done;
            selectableColorsAdapter = new SimpleAdapter <SelectableColorViewModel>(
                Resource.Layout.SelectColorFragmentCell, ColorSelectionViewHolder.Create);
            recyclerView.SetLayoutManager(new GridLayoutManager(Context, 5));
            recyclerView.SetAdapter(selectableColorsAdapter);
        }
예제 #4
0
        void PopulateSettingsDock(IEnumerable <UISetting> settings, DockPanel dock)
        {
            void Dispatch(Action action)
            {
                if (Thread.CurrentThread.ManagedThreadId == Dispatcher.Thread.ManagedThreadId)
                {
                    action();
                }
                else
                {
                    Dispatcher.InvokeAsync(action).Task.GetAwaiter().GetResult();
                }
            }

            dock.LastChildFill = false;
            foreach (var sett in settings)
            {
                if (sett is UILabel)
                {
                    var s     = sett as UILabel;
                    var label = new Label()
                    {
                        Content = s.Text, FontSize = s.FontSize, Margin = new Thickness(0, 0, 0, s.Padding)
                    };
                    DockPanel.SetDock(label, Dock.Top);

                    dock.Children.Add(label);
                }
                if (sett is UINumber)
                {
                    var s      = sett as UINumber;
                    var number = new NumberSelect()
                    {
                        Minimum = (decimal)s.Minimum, Maximum = (decimal)s.Maximum, DecimalPoints = s.DecialPoints, Step = (decimal)s.Step, Value = (decimal)s.Value
                    };
                    number.MinWidth = 100;
                    var label = new Label()
                    {
                        Content = s.Text, FontSize = 16
                    };
                    var d = new DockPanel()
                    {
                        HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, s.Padding)
                    };
                    if (!(s.Text == null || s.Text == ""))
                    {
                        number.Margin = new Thickness(5, 0, 0, 1);
                        d.Children.Add(label);
                    }
                    d.Children.Add(number);
                    DockPanel.SetDock(d, Dock.Top);
                    number.ValueChanged += (_, e) => { s.Value = (double)e.NewValue; };
                    dock.Children.Add(d);

                    s.EnableToggled += (enable) =>
                    {
                        Dispatch(() => number.IsEnabled = enable);
                    };

                    s.ValueChanged += (v) => Dispatch(() =>
                    {
                        if (v < (double)number.Minimum)
                        {
                            v = (double)number.Minimum;
                        }
                        if (v > (double)number.Maximum)
                        {
                            v = (double)number.Maximum;
                        }
                        if (number.Value != (decimal)v)
                        {
                            number.Value = (decimal)v;
                        }
                    });

                    settingsControls.Add(number);
                    settingsMeta.Add(s);
                }
                if (sett is UINumberSlider)
                {
                    var    s   = sett as UINumberSlider;
                    double min = s.Minimum;
                    double max = s.Maximum;
                    if (s.Logarithmic)
                    {
                        min = Math.Log(min, 2);
                        max = Math.Log(max, 2);
                    }
                    var number = new ValueSlider()
                    {
                        Minimum = min, Maximum = max, TrueMin = (decimal)s.TrueMinimum, TrueMax = (decimal)s.TrueMaximum, DecimalPoints = s.DecialPoints, Step = (decimal)s.Step
                    };
                    if (s.Logarithmic)
                    {
                        number.nudToSlider = v => Math.Log(v, 2);
                        number.sliderToNud = v => Math.Pow(2, v);
                    }
                    number.Value    = s.Value;
                    number.MinWidth = 400;
                    var label = new Label()
                    {
                        Content = s.Text, FontSize = 16
                    };
                    var d = new DockPanel()
                    {
                        HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, s.Padding)
                    };
                    if (!(s.Text == null || s.Text == ""))
                    {
                        number.Margin = new Thickness(5, 0, 0, 1);
                        d.Children.Add(label);
                    }
                    d.Children.Add(number);
                    DockPanel.SetDock(d, Dock.Top);
                    number.ValueChanged += (_, e) => { s.Value = e.NewValue; };
                    dock.Children.Add(d);

                    s.EnableToggled += (enable) =>
                    {
                        Dispatch(() => number.IsEnabled = enable);
                    };

                    s.ValueChanged += (v) => Dispatch(() =>
                    {
                        v = Math.Round(v, s.DecialPoints);
                        if (v < (double)number.TrueMin)
                        {
                            v = (double)number.TrueMin;
                        }
                        if (v > (double)number.TrueMax)
                        {
                            v = (double)number.TrueMax;
                        }
                        if (number.Value != v)
                        {
                            number.Value = v;
                        }
                    });

                    settingsControls.Add(number);
                    settingsMeta.Add(s);
                }
                if (sett is UIDropdown)
                {
                    var s    = sett as UIDropdown;
                    var drop = new ComboBox()
                    {
                        FontSize = 16
                    };
                    var label = new Label()
                    {
                        Content = s.Text, FontSize = 16
                    };
                    foreach (var o in s.Options)
                    {
                        drop.Items.Add(new ComboBoxItem()
                        {
                            Content = o, FontSize = 16
                        });
                    }
                    var d = new DockPanel()
                    {
                        HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, s.Padding)
                    };
                    if (!(s.Text == null || s.Text == ""))
                    {
                        drop.Margin = new Thickness(5, 0, 0, 0);
                        d.Children.Add(label);
                    }
                    d.Children.Add(drop);
                    DockPanel.SetDock(d, Dock.Top);
                    drop.SelectionChanged += (_, e) =>
                    {
                        var combo = (ComboBox)e.Source;
                        s.Index = combo.SelectedIndex;
                        s.Value = s.Options[combo.SelectedIndex];
                    };
                    drop.SelectedIndex = s.Index;
                    dock.Children.Add(d);

                    s.EnableToggled += (enable) =>
                    {
                        Dispatch(() => drop.IsEnabled = enable);
                    };

                    s.IndexChanged += (i) => Dispatch(() =>
                    {
                        if (drop.SelectedIndex != i)
                        {
                            drop.SelectedIndex = i;
                        }
                    });

                    settingsControls.Add(drop);
                    settingsMeta.Add(s);
                }
                if (sett is UICheckbox)
                {
                    var s     = sett as UICheckbox;
                    var check = new BetterCheckbox()
                    {
                        FontSize = 16, Text = s.Text
                    };
                    DockPanel.SetDock(check, Dock.Top);
                    check.CheckToggled += (_, e) =>
                    {
                        s.Checked = e.NewValue;
                    };
                    check.Margin    = new Thickness(0, 0, 0, s.Padding);
                    check.IsChecked = s.Checked;
                    dock.Children.Add(check);

                    s.EnableToggled += (enable) =>
                    {
                        Dispatch(() => check.IsEnabled = enable);
                    };

                    s.ValueChanged += (c) => Dispatch(() =>
                    {
                        if (check.IsChecked != c)
                        {
                            check.IsChecked = c;
                        }
                    });

                    settingsControls.Add(check);
                    settingsMeta.Add(s);
                }
                if (sett is UITabs)
                {
                    var s    = sett as UITabs;
                    var tabs = new TabControl();
                    foreach (var k in s.Tabs.Keys)
                    {
                        var item = new TabItem()
                        {
                            Header = k
                        };
                        var d = new DockPanel()
                        {
                            Margin = new Thickness(10, 10, 10, 0)
                        };
                        d.LastChildFill = false;
                        var c = new Grid();
                        c.Children.Add(d);
                        item.Content = c;
                        PopulateSettingsDock(s.Tabs[k], d);
                        tabs.Items.Add(item);
                    }
                    dock.Children.Add(tabs);
                    dock.LastChildFill = true;
                    break;
                }
            }
        }