Skip to content

Commit 6a90328

Browse files
committed
Added Is<flag> helpers
1 parent 5590c28 commit 6a90328

File tree

7 files changed

+83
-68
lines changed

7 files changed

+83
-68
lines changed

Terminal.Gui/Application/Application.Mouse.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ internal static void RaiseMouseEvent (MouseEventArgs mouseEvent)
251251
}
252252
}
253253

254+
255+
#pragma warning disable CS1574 // XML comment has cref attribute that could not be resolved
254256
/// <summary>
255257
/// Raised when a mouse event occurs. Can be cancelled by setting <see cref="MouseEventArgs.Handled"/> to <see langword="true"/>.
256258
/// </summary>
@@ -269,6 +271,7 @@ internal static void RaiseMouseEvent (MouseEventArgs mouseEvent)
269271
/// </para>
270272
/// </remarks>
271273
public static event EventHandler<MouseEventArgs>? MouseEvent;
274+
#pragma warning restore CS1574 // XML comment has cref attribute that could not be resolved
272275

273276
internal static bool HandleMouseGrab (View? deepestViewUnderMouse, MouseEventArgs mouseEvent)
274277
{

Terminal.Gui/Input/MouseEventArgs.cs

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ namespace Terminal.Gui;
55

66
/// <summary>
77
/// Specifies the event arguments for <see cref="Terminal.Gui.MouseEventArgs"/>. This is a higher-level construct than
8-
/// the wrapped <see cref="Terminal.Gui.MouseEventArgs"/> class and is used for the events defined on <see cref="View"/> and subclasses
8+
/// the wrapped <see cref="Terminal.Gui.MouseEventArgs"/> class and is used for the events defined on
9+
/// <see cref="View"/> and subclasses
910
/// of View (e.g. <see cref="View.MouseEnter"/> and <see cref="View.MouseClick"/>).
1011
/// </summary>
1112
public class MouseEventArgs : HandledEventArgs
@@ -23,27 +24,76 @@ public class MouseEventArgs : HandledEventArgs
2324
/// <summary>The deepest View who's <see cref="View.Frame"/> contains <see cref="ScreenPosition"/>.</summary>
2425
public View? View { get; set; }
2526

26-
/// <summary>The position of the mouse in <see cref="View"/>'s Viewport-relative coordinates. Only valid if <see cref="View"/> is set.</summary>
27+
/// <summary>
28+
/// The position of the mouse in <see cref="View"/>'s Viewport-relative coordinates. Only valid if <see cref="View"/>
29+
/// is set.
30+
/// </summary>
2731
public Point Position { get; set; }
2832

29-
public bool IsButtonEvent
30-
{
31-
get
32-
{
33-
return Flags.HasFlag (MouseFlags.Button1Clicked)
34-
|| Flags.HasFlag (MouseFlags.Button2Clicked)
35-
|| Flags.HasFlag (MouseFlags.Button3Clicked)
36-
|| Flags.HasFlag (MouseFlags.Button4Clicked)
37-
|| Flags.HasFlag (MouseFlags.Button1DoubleClicked)
38-
|| Flags.HasFlag (MouseFlags.Button2DoubleClicked)
39-
|| Flags.HasFlag (MouseFlags.Button3DoubleClicked)
40-
|| Flags.HasFlag (MouseFlags.Button4DoubleClicked)
41-
|| Flags.HasFlag (MouseFlags.Button1TripleClicked)
42-
|| Flags.HasFlag (MouseFlags.Button2TripleClicked)
43-
|| Flags.HasFlag (MouseFlags.Button3TripleClicked)
44-
|| Flags.HasFlag (MouseFlags.Button4TripleClicked);
45-
}
46-
}
33+
/// <summary>
34+
/// Gets whether <see cref="Flags"/> contains any of the button pressed related flags.
35+
/// </summary>
36+
public bool IsPressed => Flags.HasFlag (MouseFlags.Button1Pressed)
37+
|| Flags.HasFlag (MouseFlags.Button2Pressed)
38+
|| Flags.HasFlag (MouseFlags.Button3Pressed)
39+
|| Flags.HasFlag (MouseFlags.Button4Pressed);
40+
41+
/// <summary>
42+
/// Gets whether <see cref="Flags"/> contains any of the button released related flags.
43+
/// </summary>
44+
public bool IsReleased => Flags.HasFlag (MouseFlags.Button1Released)
45+
|| Flags.HasFlag (MouseFlags.Button2Released)
46+
|| Flags.HasFlag (MouseFlags.Button3Released)
47+
|| Flags.HasFlag (MouseFlags.Button4Released);
48+
49+
/// <summary>
50+
/// Gets whether <see cref="Flags"/> contains any of the single-clicked related flags.
51+
/// </summary>
52+
public bool IsSingleClicked => Flags.HasFlag (MouseFlags.Button1Clicked)
53+
|| Flags.HasFlag (MouseFlags.Button2Clicked)
54+
|| Flags.HasFlag (MouseFlags.Button3Clicked)
55+
|| Flags.HasFlag (MouseFlags.Button4Clicked);
56+
57+
/// <summary>
58+
/// Gets whether <see cref="Flags"/> contains any of the double-clicked related flags.
59+
/// </summary>
60+
public bool IsDoubleClicked => Flags.HasFlag (MouseFlags.Button1DoubleClicked)
61+
|| Flags.HasFlag (MouseFlags.Button2DoubleClicked)
62+
|| Flags.HasFlag (MouseFlags.Button3DoubleClicked)
63+
|| Flags.HasFlag (MouseFlags.Button4DoubleClicked);
64+
65+
/// <summary>
66+
/// Gets whether <see cref="Flags"/> contains any of the triple-clicked related flags.
67+
/// </summary>
68+
public bool IsTripleClicked => Flags.HasFlag (MouseFlags.Button1TripleClicked)
69+
|| Flags.HasFlag (MouseFlags.Button2TripleClicked)
70+
|| Flags.HasFlag (MouseFlags.Button3TripleClicked)
71+
|| Flags.HasFlag (MouseFlags.Button4TripleClicked);
72+
73+
/// <summary>
74+
/// Gets whether <see cref="Flags"/> contains any of the mouse button clicked related flags.
75+
/// </summary>
76+
public bool IsSingleDoubleOrTripleClicked =>
77+
Flags.HasFlag (MouseFlags.Button1Clicked)
78+
|| Flags.HasFlag (MouseFlags.Button2Clicked)
79+
|| Flags.HasFlag (MouseFlags.Button3Clicked)
80+
|| Flags.HasFlag (MouseFlags.Button4Clicked)
81+
|| Flags.HasFlag (MouseFlags.Button1DoubleClicked)
82+
|| Flags.HasFlag (MouseFlags.Button2DoubleClicked)
83+
|| Flags.HasFlag (MouseFlags.Button3DoubleClicked)
84+
|| Flags.HasFlag (MouseFlags.Button4DoubleClicked)
85+
|| Flags.HasFlag (MouseFlags.Button1TripleClicked)
86+
|| Flags.HasFlag (MouseFlags.Button2TripleClicked)
87+
|| Flags.HasFlag (MouseFlags.Button3TripleClicked)
88+
|| Flags.HasFlag (MouseFlags.Button4TripleClicked);
89+
90+
/// <summary>
91+
/// Gets whether <see cref="Flags"/> contains any of the mouse wheel related flags.
92+
/// </summary>
93+
public bool IsWheel => Flags.HasFlag (MouseFlags.WheeledDown)
94+
|| Flags.HasFlag (MouseFlags.WheeledUp)
95+
|| Flags.HasFlag (MouseFlags.WheeledLeft)
96+
|| Flags.HasFlag (MouseFlags.WheeledRight);
4797

4898
/// <summary>Returns a <see cref="T:System.String"/> that represents the current <see cref="Terminal.Gui.MouseEventArgs"/>.</summary>
4999
/// <returns>A <see cref="T:System.String"/> that represents the current <see cref="Terminal.Gui.MouseEventArgs"/>.</returns>

Terminal.Gui/View/View.Mouse.cs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -269,19 +269,7 @@ protected virtual void OnMouseLeave () { }
269269
}
270270
}
271271

272-
if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked)
273-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
274-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked)
275-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked)
276-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
277-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button2DoubleClicked)
278-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button3DoubleClicked)
279-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button4DoubleClicked)
280-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button1TripleClicked)
281-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button2TripleClicked)
282-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button3TripleClicked)
283-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button4TripleClicked)
284-
)
272+
if (mouseEvent.IsSingleDoubleOrTripleClicked)
285273
{
286274
// If it's a click, and we didn't handle it, then we need to generate a click event
287275
// We get here if the view did not handle the mouse event via OnMouseEvent/MouseEvent and
@@ -418,11 +406,7 @@ internal bool WhenGrabbedHandleClicked (MouseEventArgs mouseEvent)
418406
{
419407
mouseEvent.Handled = false;
420408

421-
if (Application.MouseGrabView == this
422-
&& (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked)
423-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
424-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked)
425-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked)))
409+
if (Application.MouseGrabView == this && mouseEvent.IsSingleClicked)
426410
{
427411
// We're grabbed. Clicked event comes after the last Release. This is our signal to ungrab
428412
Application.UngrabMouse ();
@@ -457,10 +441,7 @@ internal bool WhenGrabbedHandleReleased (MouseEventArgs mouseEvent)
457441
{
458442
mouseEvent.Handled = false;
459443

460-
if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Released)
461-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button2Released)
462-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button3Released)
463-
|| mouseEvent.Flags.HasFlag (MouseFlags.Button4Released))
444+
if (mouseEvent.IsReleased)
464445
{
465446
if (Application.MouseGrabView == this)
466447
{

Terminal.Gui/Views/TabView.cs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -573,11 +573,7 @@ protected override bool OnMouseEvent (MouseEventArgs me)
573573
{
574574
Tab hit = me.View is Tab ? (Tab)me.View : null;
575575

576-
bool isClick = me.Flags.HasFlag (MouseFlags.Button1Clicked)
577-
|| me.Flags.HasFlag (MouseFlags.Button2Clicked)
578-
|| me.Flags.HasFlag (MouseFlags.Button3Clicked);
579-
580-
if (isClick)
576+
if (me.IsSingleClicked)
581577
{
582578
_host.OnTabClicked (new TabMouseEventArgs (hit, me));
583579

@@ -588,9 +584,7 @@ protected override bool OnMouseEvent (MouseEventArgs me)
588584
}
589585
}
590586

591-
if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
592-
&& !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
593-
&& !me.Flags.HasFlag (MouseFlags.Button1TripleClicked))
587+
if (!me.IsSingleDoubleOrTripleClicked)
594588
{
595589
return false;
596590
}
@@ -600,9 +594,7 @@ protected override bool OnMouseEvent (MouseEventArgs me)
600594
SetFocus ();
601595
}
602596

603-
if (me.Flags.HasFlag (MouseFlags.Button1Clicked)
604-
|| me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
605-
|| me.Flags.HasFlag (MouseFlags.Button1TripleClicked))
597+
if (me.IsSingleDoubleOrTripleClicked)
606598
{
607599
var scrollIndicatorHit = 0;
608600

Terminal.Gui/Views/TextField.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -800,9 +800,8 @@ public virtual void KillWordForwards ()
800800
/// <inheritdoc/>
801801
protected override bool OnMouseEvent (MouseEventArgs ev)
802802
{
803-
if (!ev.Flags.HasFlag (MouseFlags.Button1Pressed)
803+
if (ev is { IsPressed: false, IsReleased: false }
804804
&& !ev.Flags.HasFlag (MouseFlags.ReportMousePosition)
805-
&& !ev.Flags.HasFlag (MouseFlags.Button1Released)
806805
&& !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
807806
&& !ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)
808807
&& !ev.Flags.HasFlag (ContextMenu.MouseFlags))

Terminal.Gui/Views/TextView.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,16 +3276,10 @@ public void Load (List<List<Cell>> cellsList)
32763276
/// <inheritdoc/>
32773277
protected override bool OnMouseEvent (MouseEventArgs ev)
32783278
{
3279-
if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked)
3280-
&& !ev.Flags.HasFlag (MouseFlags.Button1Pressed)
3279+
if (ev is { IsSingleDoubleOrTripleClicked: false, IsPressed: false, IsReleased: false, IsWheel: false }
32813280
&& !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)
3282-
&& !ev.Flags.HasFlag (MouseFlags.Button1Released)
32833281
&& !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ButtonShift)
3284-
&& !ev.Flags.HasFlag (MouseFlags.WheeledDown)
3285-
&& !ev.Flags.HasFlag (MouseFlags.WheeledUp)
3286-
&& !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
32873282
&& !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked | MouseFlags.ButtonShift)
3288-
&& !ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)
32893283
&& !ev.Flags.HasFlag (ContextMenu!.MouseFlags))
32903284
{
32913285
return false;

Terminal.Gui/Views/TreeView/TreeView.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -993,12 +993,8 @@ public void GoToFirst ()
993993
protected override bool OnMouseEvent (MouseEventArgs me)
994994
{
995995
// If it is not an event we care about
996-
if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
997-
&& !me.Flags.HasFlag (ObjectActivationButton ?? MouseFlags.Button1DoubleClicked)
998-
&& !me.Flags.HasFlag (MouseFlags.WheeledDown)
999-
&& !me.Flags.HasFlag (MouseFlags.WheeledUp)
1000-
&& !me.Flags.HasFlag (MouseFlags.WheeledRight)
1001-
&& !me.Flags.HasFlag (MouseFlags.WheeledLeft))
996+
if (me is { IsSingleClicked: false, IsPressed: false, IsReleased: false, IsWheel: false }
997+
&& !me.Flags.HasFlag (ObjectActivationButton ?? MouseFlags.Button1DoubleClicked))
1002998
{
1003999
// do nothing
10041000
return false;

0 commit comments

Comments
 (0)