RuneWidthGreaterThanOne.cs 6.1 KB

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