Mouse.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Collections.Generic;
  2. using Terminal.Gui;
  3. namespace UICatalog.Scenarios;
  4. [ScenarioMetadata ("Mouse", "Demonstrates how to capture mouse events")]
  5. [ScenarioCategory ("Mouse and Keyboard")]
  6. public class Mouse : Scenario
  7. {
  8. public override void Setup ()
  9. {
  10. Label ml;
  11. var count = 0;
  12. ml = new Label { X = 1, Y = 1, Text = "Mouse: " };
  13. List<string> rme = new ();
  14. Win.Add (ml);
  15. var logList = new ListView
  16. {
  17. X = Pos.AnchorEnd (41),
  18. Y = 0,
  19. Width = 41,
  20. Height = Dim.Fill (),
  21. ColorScheme = Colors.ColorSchemes ["TopLevel"],
  22. Source = new ListWrapper (rme)
  23. };
  24. Win.Add (logList);
  25. Application.MouseEvent += (sender, a) =>
  26. {
  27. ml.Text = $"Mouse: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count}";
  28. rme.Add ($"({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
  29. logList.MoveDown ();
  30. };
  31. Win.Add (new MouseDemo ()
  32. {
  33. X = 0,
  34. Y = 3,
  35. Width = 15,
  36. Height = 10,
  37. Text = "Mouse Demo",
  38. TextAlignment = TextAlignment.Centered,
  39. VerticalTextAlignment = VerticalTextAlignment.Middle,
  40. ColorScheme = Colors.ColorSchemes ["Dialog"],
  41. });
  42. }
  43. public class MouseDemo : View
  44. {
  45. private bool _button1PressedOnEnter = false;
  46. public MouseDemo ()
  47. {
  48. CanFocus = true;
  49. MouseEvent += (s, e) =>
  50. {
  51. if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
  52. {
  53. if (!_button1PressedOnEnter)
  54. {
  55. ColorScheme = Colors.ColorSchemes ["Toplevel"];
  56. }
  57. }
  58. if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Released))
  59. {
  60. ColorScheme = Colors.ColorSchemes ["Dialog"];
  61. _button1PressedOnEnter = false;
  62. }
  63. };
  64. MouseLeave += (s, e) =>
  65. {
  66. ColorScheme = Colors.ColorSchemes ["Dialog"];
  67. _button1PressedOnEnter = false;
  68. };
  69. MouseEnter += (s, e) =>
  70. {
  71. _button1PressedOnEnter = e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed);
  72. };
  73. }
  74. }
  75. }