BorderEditor.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Terminal.Gui;
  5. namespace UICatalog.Scenarios;
  6. public class BorderEditor : AdornmentEditor
  7. {
  8. private CheckBox _ckbTitle;
  9. private RadioGroup _rbBorderStyle;
  10. public BorderEditor ()
  11. {
  12. Title = "_Border";
  13. Initialized += BorderEditor_Initialized;
  14. AdornmentChanged += BorderEditor_AdornmentChanged;
  15. }
  16. private void BorderEditor_AdornmentChanged (object sender, EventArgs e)
  17. {
  18. _ckbTitle.Checked = ((Border)AdornmentToEdit).ShowTitle;
  19. _rbBorderStyle.SelectedItem = (int)((Border)AdornmentToEdit).LineStyle;
  20. }
  21. private void BorderEditor_Initialized (object sender, EventArgs e)
  22. {
  23. List<LineStyle> borderStyleEnum = Enum.GetValues (typeof (LineStyle)).Cast<LineStyle> ().ToList ();
  24. _rbBorderStyle = new RadioGroup
  25. {
  26. X = 0,
  27. Y = Pos.Bottom (Subviews [^1]),
  28. Width = Dim.Width (Subviews [^2]) + Dim.Width (Subviews [^1]) - 1,
  29. SelectedItem = (int)(((Border)AdornmentToEdit)?.LineStyle ?? LineStyle.None),
  30. BorderStyle = LineStyle.Single,
  31. Title = "Border St_yle",
  32. SuperViewRendersLineCanvas = true,
  33. Enabled = AdornmentToEdit is { },
  34. RadioLabels = borderStyleEnum.Select (e => e.ToString ()).ToArray ()
  35. };
  36. Add (_rbBorderStyle);
  37. _rbBorderStyle.SelectedItemChanged += OnRbBorderStyleOnSelectedItemChanged;
  38. _ckbTitle = new CheckBox
  39. {
  40. X = 0,
  41. Y = Pos.Bottom (_rbBorderStyle),
  42. Checked = true,
  43. SuperViewRendersLineCanvas = true,
  44. Text = "Show Title",
  45. Enabled = AdornmentToEdit is { }
  46. };
  47. _ckbTitle.Toggled += OnCkbTitleOnToggled;
  48. Add (_ckbTitle);
  49. return;
  50. void OnRbBorderStyleOnSelectedItemChanged (object s, SelectedItemChangedArgs e)
  51. {
  52. LineStyle prevBorderStyle = AdornmentToEdit.BorderStyle;
  53. ((Border)AdornmentToEdit).LineStyle = (LineStyle)e.SelectedItem;
  54. if (((Border)AdornmentToEdit).LineStyle == LineStyle.None)
  55. {
  56. ((Border)AdornmentToEdit).Thickness = new (0);
  57. }
  58. else if (prevBorderStyle == LineStyle.None && ((Border)AdornmentToEdit).LineStyle != LineStyle.None)
  59. {
  60. ((Border)AdornmentToEdit).Thickness = new (1);
  61. }
  62. ((Border)AdornmentToEdit).SetNeedsDisplay ();
  63. LayoutSubviews ();
  64. }
  65. void OnCkbTitleOnToggled (object sender, StateEventArgs<bool?> args) { ((Border)AdornmentToEdit).ShowTitle = args.NewValue!.Value; }
  66. }
  67. }