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); }
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; } } }