BorderEditor.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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.State = ((Border)AdornmentToEdit).ShowTitle ? CheckState.Checked : CheckState.UnChecked;
  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. // BUGBUG: Hack until dimauto is working properly
  28. Y = Pos.Bottom (Subviews [^1]),
  29. Width = Dim.Width (Subviews [^2]) + Dim.Width (Subviews [^1]) - 1,
  30. SelectedItem = (int)(((Border)AdornmentToEdit)?.LineStyle ?? LineStyle.None),
  31. BorderStyle = LineStyle.Single,
  32. Title = "Border St_yle",
  33. SuperViewRendersLineCanvas = true,
  34. Enabled = AdornmentToEdit is { },
  35. RadioLabels = borderStyleEnum.Select (e => e.ToString ()).ToArray ()
  36. };
  37. Add (_rbBorderStyle);
  38. _rbBorderStyle.SelectedItemChanged += OnRbBorderStyleOnSelectedItemChanged;
  39. _ckbTitle = new CheckBox
  40. {
  41. X = 0,
  42. Y = Pos.Bottom (_rbBorderStyle),
  43. State = CheckState.Checked,
  44. SuperViewRendersLineCanvas = true,
  45. Text = "Show Title",
  46. Enabled = AdornmentToEdit is { }
  47. };
  48. _ckbTitle.Toggle += OnCkbTitleOnToggle;
  49. Add (_ckbTitle);
  50. return;
  51. void OnRbBorderStyleOnSelectedItemChanged (object s, SelectedItemChangedArgs e)
  52. {
  53. LineStyle prevBorderStyle = AdornmentToEdit.BorderStyle;
  54. ((Border)AdornmentToEdit).LineStyle = (LineStyle)e.SelectedItem;
  55. if (((Border)AdornmentToEdit).LineStyle == LineStyle.None)
  56. {
  57. ((Border)AdornmentToEdit).Thickness = new (0);
  58. }
  59. else if (prevBorderStyle == LineStyle.None && ((Border)AdornmentToEdit).LineStyle != LineStyle.None)
  60. {
  61. ((Border)AdornmentToEdit).Thickness = new (1);
  62. }
  63. ((Border)AdornmentToEdit).SetNeedsDisplay ();
  64. LayoutSubviews ();
  65. }
  66. void OnCkbTitleOnToggle (object sender, CancelEventArgs<CheckState> args) { ((Border)AdornmentToEdit).ShowTitle = args.NewValue == CheckState.Checked; }
  67. }
  68. }