2
0

ViewMouse.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System;
  2. namespace Terminal.Gui;
  3. public partial class View {
  4. /// <summary>
  5. /// Gets or sets a value indicating whether this <see cref="View"/> wants mouse position reports.
  6. /// </summary>
  7. /// <value><see langword="true"/> if want mouse position reports; otherwise, <see langword="false"/>.</value>
  8. public virtual bool WantMousePositionReports { get; set; }
  9. /// <summary>
  10. /// Gets or sets a value indicating whether this <see cref="View"/> want continuous button pressed event.
  11. /// </summary>
  12. public virtual bool WantContinuousButtonPressed { get; set; }
  13. /// <summary>
  14. /// Event fired when the view receives the mouse event for the first time.
  15. /// </summary>
  16. public event EventHandler<MouseEventEventArgs> MouseEnter;
  17. /// <summary>
  18. /// Event fired when the view receives a mouse event for the last time.
  19. /// </summary>
  20. public event EventHandler<MouseEventEventArgs> MouseLeave;
  21. /// <summary>
  22. /// Event fired when a mouse event is generated.
  23. /// </summary>
  24. public event EventHandler<MouseEventEventArgs> MouseClick;
  25. /// <inheritdoc/>
  26. public override bool OnMouseEnter (MouseEvent mouseEvent)
  27. {
  28. if (!Enabled) {
  29. return true;
  30. }
  31. if (!CanBeVisible (this)) {
  32. return false;
  33. }
  34. var args = new MouseEventEventArgs (mouseEvent);
  35. MouseEnter?.Invoke (this, args);
  36. return args.Handled || base.OnMouseEnter (mouseEvent);
  37. }
  38. /// <inheritdoc/>
  39. public override bool OnMouseLeave (MouseEvent mouseEvent)
  40. {
  41. if (!Enabled) {
  42. return true;
  43. }
  44. if (!CanBeVisible (this)) {
  45. return false;
  46. }
  47. var args = new MouseEventEventArgs (mouseEvent);
  48. MouseLeave?.Invoke (this, args);
  49. return args.Handled || base.OnMouseLeave (mouseEvent);
  50. }
  51. /// <summary>
  52. /// Method invoked when a mouse event is generated
  53. /// </summary>
  54. /// <param name="mouseEvent"></param>
  55. /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
  56. public virtual bool OnMouseEvent (MouseEvent mouseEvent)
  57. {
  58. if (!Enabled) {
  59. return true;
  60. }
  61. if (!CanBeVisible (this)) {
  62. return false;
  63. }
  64. var args = new MouseEventEventArgs (mouseEvent);
  65. if (MouseEvent (mouseEvent)) {
  66. return true;
  67. }
  68. if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
  69. if (CanFocus && !HasFocus && SuperView != null) {
  70. SuperView.SetFocus (this);
  71. SetNeedsDisplay ();
  72. }
  73. return OnMouseClick (args);
  74. }
  75. if (mouseEvent.Flags == MouseFlags.Button2Clicked) {
  76. return OnMouseClick (args);
  77. }
  78. if (mouseEvent.Flags == MouseFlags.Button3Clicked) {
  79. return OnMouseClick (args);
  80. }
  81. if (mouseEvent.Flags == MouseFlags.Button4Clicked) {
  82. return OnMouseClick (args);
  83. }
  84. return false;
  85. }
  86. /// <summary>
  87. /// Invokes the MouseClick event.
  88. /// </summary>
  89. protected bool OnMouseClick (MouseEventEventArgs args)
  90. {
  91. if (!Enabled) {
  92. return true;
  93. }
  94. MouseClick?.Invoke (this, args);
  95. return args.Handled;
  96. }
  97. }