ViewMouse.cs 2.8 KB

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