ArrangementEditor.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #nullable enable
  2. namespace UICatalog.Scenarios;
  3. /// <summary>
  4. /// Provides an editor UI for the Margin, Border, and Padding of a View.
  5. /// </summary>
  6. public sealed class ArrangementEditor : EditorBase
  7. {
  8. public ArrangementEditor ()
  9. {
  10. Title = "ArrangementEditor";
  11. TabStop = TabBehavior.TabGroup;
  12. Initialized += ArrangementEditor_Initialized;
  13. Add (_arrangementSelector);
  14. }
  15. private readonly FlagSelector<ViewArrangement> _arrangementSelector = new ()
  16. {
  17. Orientation = Orientation.Vertical
  18. };
  19. protected override void OnViewToEditChanged ()
  20. {
  21. _arrangementSelector.Enabled = ViewToEdit is not Adornment;
  22. _arrangementSelector.ValueChanged -= ArrangementFlagsOnValueChanged;
  23. // Set the appropriate options in the slider based on _viewToEdit.Arrangement
  24. if (ViewToEdit is { })
  25. {
  26. _arrangementSelector.Value = ViewToEdit.Arrangement;
  27. }
  28. _arrangementSelector.ValueChanged += ArrangementFlagsOnValueChanged;
  29. }
  30. private void ArrangementFlagsOnValueChanged (object? sender, EventArgs<ViewArrangement?> e)
  31. {
  32. if (ViewToEdit is { } && e.Value is { })
  33. {
  34. ViewToEdit.Arrangement = (ViewArrangement)e.Value;
  35. if (ViewToEdit.Arrangement.HasFlag (ViewArrangement.Overlapped))
  36. {
  37. ViewToEdit.ShadowStyle = ShadowStyle.Transparent;
  38. ViewToEdit.SchemeName = "Runnable";
  39. }
  40. else
  41. {
  42. ViewToEdit.ShadowStyle = ShadowStyle.None;
  43. ViewToEdit.SchemeName = ViewToEdit!.SuperView!.SchemeName;
  44. }
  45. ViewToEdit.BorderStyle = ViewToEdit.Arrangement.HasFlag (ViewArrangement.Movable) ? LineStyle.Double : LineStyle.Single;
  46. }
  47. }
  48. private void ArrangementEditor_Initialized (object? sender, EventArgs e) { _arrangementSelector.ValueChanged += ArrangementFlagsOnValueChanged; }
  49. }