MessageBoxes.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Terminal.Gui;
  5. namespace UICatalog.Scenarios {
  6. [ScenarioMetadata (Name: "MessageBoxes", Description: "Demonstrates how to use the MessageBox class.")]
  7. [ScenarioCategory ("Controls")]
  8. [ScenarioCategory ("Dialogs")]
  9. public class MessageBoxes : Scenario {
  10. public override void Setup ()
  11. {
  12. var frame = new FrameView ("MessageBox Options") {
  13. X = Pos.Center (),
  14. Y = 1,
  15. Width = Dim.Percent (75),
  16. Height = 12
  17. };
  18. Win.Add (frame);
  19. var label = new Label ("Width:") {
  20. X = 0,
  21. Y = 0,
  22. Width = 15,
  23. Height = 1,
  24. TextAlignment = Terminal.Gui.TextAlignment.Right,
  25. };
  26. frame.Add (label);
  27. var widthEdit = new TextField ("0") {
  28. X = Pos.Right (label) + 1,
  29. Y = Pos.Top (label),
  30. Width = 5,
  31. Height = 1
  32. };
  33. frame.Add (widthEdit);
  34. label = new Label ("Height:") {
  35. X = 0,
  36. Y = Pos.Bottom (label),
  37. Width = Dim.Width (label),
  38. Height = 1,
  39. TextAlignment = Terminal.Gui.TextAlignment.Right,
  40. };
  41. frame.Add (label);
  42. var heightEdit = new TextField ("0") {
  43. X = Pos.Right (label) + 1,
  44. Y = Pos.Top (label),
  45. Width = 5,
  46. Height = 1
  47. };
  48. frame.Add (heightEdit);
  49. frame.Add (new Label ("If height & width are both 0,") {
  50. X = Pos.Right (widthEdit) + 2,
  51. Y = Pos.Top (widthEdit),
  52. });
  53. frame.Add (new Label ("the MessageBox will be sized automatically.") {
  54. X = Pos.Right (heightEdit) + 2,
  55. Y = Pos.Top (heightEdit),
  56. });
  57. label = new Label ("Title:") {
  58. X = 0,
  59. Y = Pos.Bottom (label),
  60. Width = Dim.Width (label),
  61. Height = 1,
  62. TextAlignment = Terminal.Gui.TextAlignment.Right,
  63. };
  64. frame.Add (label);
  65. var titleEdit = new TextField ("Title") {
  66. X = Pos.Right (label) + 1,
  67. Y = Pos.Top (label),
  68. Width = Dim.Fill (),
  69. Height = 1
  70. };
  71. frame.Add (titleEdit);
  72. label = new Label ("Message:") {
  73. X = 0,
  74. Y = Pos.Bottom (label),
  75. Width = Dim.Width (label),
  76. Height = 1,
  77. TextAlignment = Terminal.Gui.TextAlignment.Right,
  78. };
  79. frame.Add (label);
  80. var messageEdit = new TextView () {
  81. Text = "Message",
  82. X = Pos.Right (label) + 1,
  83. Y = Pos.Top (label),
  84. Width = Dim.Fill (),
  85. Height = 5,
  86. };
  87. frame.Add (messageEdit);
  88. label = new Label ("Num Buttons:") {
  89. X = 0,
  90. Y = Pos.Bottom (messageEdit),
  91. Width = Dim.Width (label),
  92. Height = 1,
  93. TextAlignment = Terminal.Gui.TextAlignment.Right,
  94. };
  95. frame.Add (label);
  96. var numButtonsEdit = new TextField ("3") {
  97. X = Pos.Right (label) + 1,
  98. Y = Pos.Top (label),
  99. Width = 5,
  100. Height = 1
  101. };
  102. frame.Add (numButtonsEdit);
  103. label = new Label ("Default Button:") {
  104. X = 0,
  105. Y = Pos.Bottom (label),
  106. Width = Dim.Width (label),
  107. Height = 1,
  108. TextAlignment = Terminal.Gui.TextAlignment.Right,
  109. };
  110. frame.Add (label);
  111. var defaultButtonEdit = new TextField ("0") {
  112. X = Pos.Right (label) + 1,
  113. Y = Pos.Top (label),
  114. Width = 5,
  115. Height = 1
  116. };
  117. frame.Add (defaultButtonEdit);
  118. label = new Label ("Style:") {
  119. X = 0,
  120. Y = Pos.Bottom (label),
  121. Width = Dim.Width (label),
  122. Height = 1,
  123. TextAlignment = Terminal.Gui.TextAlignment.Right,
  124. };
  125. frame.Add (label);
  126. var styleRadioGroup = new RadioGroup (new string [] { "_Query", "_Error" }) {
  127. X = Pos.Right (label) + 1,
  128. Y = Pos.Top (label),
  129. };
  130. frame.Add (styleRadioGroup);
  131. var ckbWrapMessage = new CheckBox ("Wrap Message", true) {
  132. X = Pos.Right (label) + 1,
  133. Y = Pos.Top (label) + 3
  134. };
  135. frame.Add (ckbWrapMessage);
  136. frame.ForceValidatePosDim = true;
  137. void Top_Loaded (object sender, EventArgs args)
  138. {
  139. frame.Height =
  140. widthEdit.Frame.Height +
  141. heightEdit.Frame.Height +
  142. titleEdit.Frame.Height +
  143. messageEdit.Frame.Height +
  144. numButtonsEdit.Frame.Height +
  145. defaultButtonEdit.Frame.Height +
  146. styleRadioGroup.Frame.Height +
  147. 2 +
  148. ckbWrapMessage.Frame.Height;
  149. Application.Top.Loaded -= Top_Loaded;
  150. }
  151. //Application.Top.Loaded += Top_Loaded;
  152. label = new Label ("Button Pressed:") {
  153. X = Pos.Center (),
  154. Y = Pos.Bottom (frame) + 4,
  155. Height = 1,
  156. TextAlignment = Terminal.Gui.TextAlignment.Right,
  157. };
  158. Win.Add (label);
  159. var buttonPressedLabel = new Label (" ") {
  160. X = Pos.Center (),
  161. Y = Pos.Bottom (frame) + 5,
  162. Width = 25,
  163. Height = 1,
  164. ColorScheme = Colors.Error,
  165. TextAlignment = Terminal.Gui.TextAlignment.Centered
  166. };
  167. //var btnText = new [] { "_Zero", "_One", "T_wo", "_Three", "_Four", "Fi_ve", "Si_x", "_Seven", "_Eight", "_Nine" };
  168. var showMessageBoxButton = new Button ("Show MessageBox") {
  169. X = Pos.Center (),
  170. Y = Pos.Bottom (frame) + 2,
  171. IsDefault = true,
  172. };
  173. showMessageBoxButton.Clicked += (s,e) => {
  174. try {
  175. int width = int.Parse (widthEdit.Text);
  176. int height = int.Parse (heightEdit.Text);
  177. int numButtons = int.Parse (numButtonsEdit.Text);
  178. int defaultButton = int.Parse (defaultButtonEdit.Text);
  179. var btns = new List<string> ();
  180. for (int i = 0; i < numButtons; i++) {
  181. //btns.Add(btnText[i % 10]);
  182. btns.Add (NumberToWords.Convert (i));
  183. }
  184. if (styleRadioGroup.SelectedItem == 0) {
  185. buttonPressedLabel.Text = $"{MessageBox.Query (width, height, titleEdit.Text, messageEdit.Text, defaultButton, (bool)ckbWrapMessage.Checked, btns.ToArray ())}";
  186. } else {
  187. buttonPressedLabel.Text = $"{MessageBox.ErrorQuery (width, height, titleEdit.Text, messageEdit.Text, defaultButton, (bool)ckbWrapMessage.Checked, btns.ToArray ())}";
  188. }
  189. } catch (FormatException) {
  190. buttonPressedLabel.Text = "Invalid Options";
  191. }
  192. };
  193. Win.Add (showMessageBoxButton);
  194. Win.Add (buttonPressedLabel);
  195. }
  196. }
  197. }