Keys.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System.Collections.Generic;
  2. using Terminal.Gui;
  3. namespace UICatalog.Scenarios;
  4. [ScenarioMetadata (Name: "Keys", Description: "Shows keyboard input handling.")]
  5. [ScenarioCategory ("Mouse and Keyboard")]
  6. public class Keys : Scenario {
  7. public override void Setup ()
  8. {
  9. List<string> keyPressedList = new List<string> ();
  10. List<string> invokingKeyBindingsList = new List<string> ();
  11. var editLabel = new Label ("Type text here:") {
  12. X = 0,
  13. Y = 0,
  14. };
  15. Win.Add (editLabel);
  16. var edit = new TextField ("") {
  17. X = Pos.Right (editLabel) + 1,
  18. Y = Pos.Top (editLabel),
  19. Width = Dim.Fill (2),
  20. };
  21. Win.Add (edit);
  22. edit.KeyDown += (s, a) => {
  23. keyPressedList.Add (a.ToString ());
  24. };
  25. edit.InvokingKeyBindings += (s, a) => {
  26. if (edit.KeyBindings.TryGet (a, out var binding)) {
  27. invokingKeyBindingsList.Add ($"{a}: {string.Join (",", binding.Commands)}");
  28. }
  29. };
  30. // Last KeyPress: ______
  31. var keyPressedLabel = new Label ("Last TextView.KeyPressed:") {
  32. X = Pos.Left (editLabel),
  33. Y = Pos.Top (editLabel) + 1,
  34. };
  35. Win.Add (keyPressedLabel);
  36. var labelTextViewKeypress = new Label ("") {
  37. X = Pos.Right (keyPressedLabel) + 1,
  38. Y = Pos.Top (keyPressedLabel),
  39. TextAlignment = Terminal.Gui.TextAlignment.Centered,
  40. ColorScheme = Colors.ColorSchemes ["Error"],
  41. AutoSize = true
  42. };
  43. Win.Add (labelTextViewKeypress);
  44. edit.KeyDown += (s, e) => labelTextViewKeypress.Text = e.ToString ();
  45. keyPressedLabel = new Label ("Last Application.KeyDown:") {
  46. X = Pos.Left (keyPressedLabel),
  47. Y = Pos.Bottom (keyPressedLabel),
  48. };
  49. Win.Add (keyPressedLabel);
  50. var labelAppKeypress = new Label ("") {
  51. X = Pos.Right (keyPressedLabel) + 1,
  52. Y = Pos.Top (keyPressedLabel),
  53. TextAlignment = Terminal.Gui.TextAlignment.Centered,
  54. ColorScheme = Colors.ColorSchemes ["Error"],
  55. AutoSize = true
  56. };
  57. Win.Add (labelAppKeypress);
  58. Application.KeyDown += (s, e) => labelAppKeypress.Text = e.ToString ();
  59. // Key stroke log:
  60. var keyLogLabel = new Label ("Application Key Events:") {
  61. X = Pos.Left (editLabel),
  62. Y = Pos.Top (editLabel) + 4,
  63. };
  64. Win.Add (keyLogLabel);
  65. var maxKeyString = Key.CursorRight.WithAlt.WithCtrl.WithShift.ToString ().Length;
  66. var yOffset = 1;
  67. var keyEventlist = new List<string> ();
  68. var keyEventListView = new ListView (keyEventlist) {
  69. X = 0,
  70. Y = Pos.Top (keyLogLabel) + yOffset,
  71. Width = "Key Down:".Length + maxKeyString,
  72. Height = Dim.Fill (),
  73. };
  74. keyEventListView.ColorScheme = Colors.ColorSchemes ["TopLevel"];
  75. Win.Add (keyEventListView);
  76. // OnKeyPressed
  77. var onKeyPressedLabel = new Label ("TextView KeyDown:") {
  78. X = Pos.Right (keyEventListView) + 1,
  79. Y = Pos.Top (editLabel) + 4,
  80. };
  81. Win.Add (onKeyPressedLabel);
  82. yOffset = 1;
  83. var onKeyPressedListView = new ListView (keyPressedList) {
  84. X = Pos.Left (onKeyPressedLabel),
  85. Y = Pos.Top (onKeyPressedLabel) + yOffset,
  86. Width = maxKeyString,
  87. Height = Dim.Fill (),
  88. };
  89. onKeyPressedListView.ColorScheme = Colors.ColorSchemes ["TopLevel"];
  90. Win.Add (onKeyPressedListView);
  91. // OnInvokeKeyBindings
  92. var onInvokingKeyBindingsLabel = new Label ("TextView InvokingKeyBindings:") {
  93. X = Pos.Right (onKeyPressedListView) + 1,
  94. Y = Pos.Top (editLabel) + 4,
  95. };
  96. Win.Add (onInvokingKeyBindingsLabel);
  97. var onInvokingKeyBindingsListView = new ListView (invokingKeyBindingsList) {
  98. X = Pos.Left (onInvokingKeyBindingsLabel),
  99. Y = Pos.Top (onInvokingKeyBindingsLabel) + yOffset,
  100. Width = Dim.Fill (1),
  101. Height = Dim.Fill (),
  102. };
  103. onInvokingKeyBindingsListView.ColorScheme = Colors.ColorSchemes ["TopLevel"];
  104. Win.Add (onInvokingKeyBindingsListView);
  105. //Application.KeyDown += (s, a) => KeyDownPressUp (a, "Down");
  106. Application.KeyDown += (s, a) => KeyDownPressUp (a, "Down");
  107. Application.KeyUp += (s, a) => KeyDownPressUp (a, "Up");
  108. void KeyDownPressUp (Key args, string updown)
  109. {
  110. // BUGBUG: KeyEvent.ToString is badly broken
  111. var msg = $"Key{updown,-7}: {args}";
  112. keyEventlist.Add (msg);
  113. keyEventListView.MoveDown ();
  114. onKeyPressedListView.MoveDown ();
  115. onInvokingKeyBindingsListView.MoveDown ();
  116. }
  117. }
  118. }