RuneWidthGreaterThanOne.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using System;
  2. using Terminal.Gui;
  3. namespace UICatalog.Scenarios;
  4. [ScenarioMetadata ("RuneWidthGreaterThanOne", "Test rune width greater than one")]
  5. [ScenarioCategory ("Controls")]
  6. [ScenarioCategory ("Text and Formatting")]
  7. [ScenarioCategory ("Tests")]
  8. public class RuneWidthGreaterThanOne : Scenario
  9. {
  10. private Button _button;
  11. private Label _label;
  12. private Label _labelR;
  13. private Label _labelV;
  14. private string _lastRunesUsed;
  15. private TextField _text;
  16. private Window _win;
  17. public override void Main ()
  18. {
  19. Application.Init ();
  20. Toplevel topLevel = new ();
  21. var menu = new MenuBar
  22. {
  23. Menus =
  24. [
  25. new MenuBarItem (
  26. "Padding",
  27. new MenuItem []
  28. {
  29. new (
  30. "With Padding",
  31. "",
  32. () => _win.Padding.Thickness =
  33. new Thickness (1)
  34. ),
  35. new (
  36. "Without Padding",
  37. "",
  38. () => _win.Padding.Thickness =
  39. new Thickness (0)
  40. )
  41. }
  42. ),
  43. new MenuBarItem (
  44. "BorderStyle",
  45. new MenuItem []
  46. {
  47. new (
  48. "Single",
  49. "",
  50. () => _win.BorderStyle = LineStyle.Single
  51. ),
  52. new (
  53. "None",
  54. "",
  55. () => _win.BorderStyle = LineStyle.None
  56. )
  57. }
  58. ),
  59. new MenuBarItem (
  60. "Runes length",
  61. new MenuItem []
  62. {
  63. new ("Wide", "", WideRunes),
  64. new ("Narrow", "", NarrowRunes),
  65. new ("Mixed", "", MixedRunes)
  66. }
  67. )
  68. ]
  69. };
  70. _label = new Label
  71. {
  72. X = Pos.Center (), Y = 1, ColorScheme = new ColorScheme { Normal = Colors.ColorSchemes ["Base"].Focus }
  73. };
  74. _text = new TextField { X = Pos.Center (), Y = 3, Width = 20 };
  75. _button = new Button { X = Pos.Center (), Y = 5 };
  76. _labelR = new Label { X = Pos.AnchorEnd (30), Y = 18 };
  77. _labelV = new Label
  78. {
  79. TextDirection = TextDirection.TopBottom_LeftRight, X = Pos.AnchorEnd (30), Y = Pos.Bottom (_labelR)
  80. };
  81. _win = new Window { X = 5, Y = 5, Width = Dim.Fill (22), Height = Dim.Fill (5) };
  82. _win.Add (_label, _text, _button, _labelR, _labelV);
  83. topLevel.Add (menu, _win);
  84. WideRunes ();
  85. //NarrowRunes ();
  86. //MixedRunes ();
  87. Application.Run (topLevel);
  88. topLevel.Dispose ();
  89. Application.Shutdown ();
  90. }
  91. private void MixedMessage (object sender, EventArgs e) { MessageBox.Query ("Say Hello 你", $"Hello {_text.Text}", "Ok"); }
  92. private void MixedRunes ()
  93. {
  94. UnsetClickedEvent ();
  95. _label.Text = "Enter your name 你:";
  96. _text.Text = "gui.cs 你:";
  97. _button.Text = "Say Hello 你";
  98. _button.Accept += MixedMessage;
  99. _labelR.X = Pos.AnchorEnd (21);
  100. _labelR.Y = 18;
  101. _labelR.Text = "This is a test text 你";
  102. _labelV.X = Pos.AnchorEnd (21);
  103. _labelV.Y = Pos.Bottom (_labelR);
  104. _labelV.Text = "This is a test text 你";
  105. _win.Title = "HACC Demo 你";
  106. _lastRunesUsed = "Mixed";
  107. Application.Refresh ();
  108. }
  109. private void NarrowMessage (object sender, EventArgs e) { MessageBox.Query ("Say Hello", $"Hello {_text.Text}", "Ok"); }
  110. private void NarrowRunes ()
  111. {
  112. UnsetClickedEvent ();
  113. _label.Text = "Enter your name:";
  114. _text.Text = "gui.cs";
  115. _button.Text = "Say Hello";
  116. _button.Accept += NarrowMessage;
  117. _labelR.X = Pos.AnchorEnd (19);
  118. _labelR.Y = 18;
  119. _labelR.Text = "This is a test text";
  120. _labelV.X = Pos.AnchorEnd (19);
  121. _labelV.Y = Pos.Bottom (_labelR);
  122. _labelV.Text = "This is a test text";
  123. _win.Title = "HACC Demo";
  124. _lastRunesUsed = "Narrow";
  125. Application.Refresh ();
  126. }
  127. private void UnsetClickedEvent ()
  128. {
  129. switch (_lastRunesUsed)
  130. {
  131. case "Narrow":
  132. _button.Accept -= NarrowMessage;
  133. break;
  134. case "Mixed":
  135. _button.Accept -= MixedMessage;
  136. break;
  137. case "Wide":
  138. _button.Accept -= WideMessage;
  139. break;
  140. }
  141. }
  142. private void WideMessage (object sender, EventArgs e) { MessageBox.Query ("こんにちはと言う", $"こんにちは {_text.Text}", "Ok"); }
  143. private void WideRunes ()
  144. {
  145. UnsetClickedEvent ();
  146. _label.Text = "あなたの名前を入力してください:";
  147. _text.Text = "ティラミス";
  148. _button.Text = "こんにちはと言う";
  149. _button.Accept += WideMessage;
  150. _labelR.X = Pos.AnchorEnd (29);
  151. _labelR.Y = 18;
  152. _labelR.Text = "あなたの名前を入力してください";
  153. _labelV.X = Pos.AnchorEnd (29);
  154. _labelV.Y = Pos.Bottom (_labelR);
  155. _labelV.Text = "あなたの名前を入力してください";
  156. _win.Title = "デモエムポンズ";
  157. _lastRunesUsed = "Wide";
  158. Application.Refresh ();
  159. }
  160. }