mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
Way too big a committ.... but I got carried away.
- Started MouseEventEventArgs -> MouseEvent transition - for OnMouseEvent. Partially fixes #3029. - Refactored Appliation.OnMouseEvent and View.OnMouseEvent to match design guidelines. - Re-impleented highlight, enabling extensibility (see Border). - Beefed up unit tests
This commit is contained in:
@@ -27,7 +27,7 @@ public class MouseTests (ITestOutputHelper output)
|
||||
testView.SetFocus ();
|
||||
}
|
||||
|
||||
testView.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
|
||||
testView.NewMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
|
||||
Assert.True (superView.HasFocus);
|
||||
Assert.Equal (expectedHasFocus, testView.HasFocus);
|
||||
}
|
||||
@@ -73,9 +73,9 @@ public class MouseTests (ITestOutputHelper output)
|
||||
Application.Begin (top);
|
||||
|
||||
Assert.Equal (new Point (4, 4), testView.Frame.Location);
|
||||
Application.OnMouseEvent (new (new () { X = xy, Y = xy, Flags = MouseFlags.Button1Pressed }));
|
||||
Application.OnMouseEvent (new () { X = xy, Y = xy, Flags = MouseFlags.Button1Pressed });
|
||||
|
||||
Application.OnMouseEvent (new (new () { X = xy + 1, Y = xy + 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition }));
|
||||
Application.OnMouseEvent (new () { X = xy + 1, Y = xy + 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
|
||||
|
||||
Assert.Equal (expectedMoved, new Point (5, 5) == testView.Frame.Location);
|
||||
}
|
||||
@@ -89,7 +89,7 @@ public class MouseTests (ITestOutputHelper output)
|
||||
var view = new View ();
|
||||
view.MouseEvent += (s, e) => mouseFlagsFromEvent = e.MouseEvent.Flags;
|
||||
|
||||
view.OnMouseEvent (new MouseEvent () { Flags = mouseFlags });
|
||||
view.NewMouseEvent (new MouseEvent () { Flags = mouseFlags });
|
||||
Assert.Equal (mouseFlagsFromEvent, expectedMouseFlagsFromEvent);
|
||||
}
|
||||
|
||||
@@ -280,9 +280,32 @@ public class MouseTests (ITestOutputHelper output)
|
||||
Application.Shutdown ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NewMouseEvent_Invokes_MouseEvent_Properly ()
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Width = 1,
|
||||
Height = 1,
|
||||
};
|
||||
bool mouseEventInvoked = false;
|
||||
view.MouseEvent += (s, e) =>
|
||||
{
|
||||
mouseEventInvoked = true;
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
MouseEvent me = new ();
|
||||
view.NewMouseEvent (me);
|
||||
Assert.True (mouseEventInvoked);
|
||||
Assert.True (me.Handled);
|
||||
|
||||
view.Dispose ();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData (nameof (AllViews))]
|
||||
public void AllViews_OnMouseEvent_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
|
||||
public void AllViews_NewMouseEvent_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
|
||||
{
|
||||
if (view == null)
|
||||
{
|
||||
@@ -292,14 +315,14 @@ public class MouseTests (ITestOutputHelper output)
|
||||
|
||||
view.Enabled = false;
|
||||
var me = new MouseEvent ();
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.False (me.Handled);
|
||||
view.Dispose ();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData (nameof (AllViews))]
|
||||
public void AllViews_OnMouseClick_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
|
||||
public void AllViews_NewMouseEvent_Clicked_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
|
||||
{
|
||||
if (view == null)
|
||||
{
|
||||
@@ -312,7 +335,7 @@ public class MouseTests (ITestOutputHelper output)
|
||||
{
|
||||
Flags = MouseFlags.Button1Clicked
|
||||
};
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.False (me.Handled);
|
||||
view.Dispose ();
|
||||
}
|
||||
@@ -322,15 +345,14 @@ public class MouseTests (ITestOutputHelper output)
|
||||
[InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
|
||||
[InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
|
||||
[InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
|
||||
public void WantContinuousButtonPressed_False_Button1Press_Release_DoesNotClick (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
|
||||
public void WantContinuousButtonPressed_False_Button_Press_Release_DoesNotClick (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
|
||||
{
|
||||
var me = new MouseEvent ()
|
||||
{
|
||||
Flags = pressed
|
||||
};
|
||||
var me = new MouseEvent ();
|
||||
|
||||
var view = new View ()
|
||||
{
|
||||
Width = 1,
|
||||
Height = 1,
|
||||
WantContinuousButtonPressed = false
|
||||
};
|
||||
|
||||
@@ -338,22 +360,23 @@ public class MouseTests (ITestOutputHelper output)
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags = released;
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags =clicked;
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
|
||||
view.Dispose ();
|
||||
@@ -364,15 +387,14 @@ public class MouseTests (ITestOutputHelper output)
|
||||
[InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
|
||||
[InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
|
||||
[InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
|
||||
public void WantContinuousButtonPressed_True_Button1Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
|
||||
public void WantContinuousButtonPressed_True_Button_Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
|
||||
{
|
||||
var me = new MouseEvent ()
|
||||
{
|
||||
Flags = pressed
|
||||
};
|
||||
var me = new MouseEvent ();
|
||||
|
||||
var view = new View ()
|
||||
{
|
||||
Width = 1,
|
||||
Height = 1,
|
||||
WantContinuousButtonPressed = true
|
||||
};
|
||||
|
||||
@@ -380,66 +402,179 @@ public class MouseTests (ITestOutputHelper output)
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (2, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags = released;
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (2, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags = clicked;
|
||||
view.OnMouseEvent (me);
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (2, clickedCount);
|
||||
|
||||
view.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HighlightOnPress_False_No_Highlights ()
|
||||
public void WantContinuousButtonPressed_True_Move_InViewport_OutOfViewport_Keeps_Counting ()
|
||||
{
|
||||
var me = new MouseEvent ();
|
||||
|
||||
var view = new View ()
|
||||
{
|
||||
Width = 1,
|
||||
Height = 1,
|
||||
WantContinuousButtonPressed = true
|
||||
};
|
||||
|
||||
var clickedCount = 0;
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
|
||||
// Start in Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.X = 0;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
// Move out of Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.X = 1;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (2, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
// Move into Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.X = 0;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (3, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
view.Dispose ();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false, 0, 0)]
|
||||
[InlineData (true, 1, 1)]
|
||||
public void HighlightOnPress_Fires_Events_And_Highlights (bool highlightOnPress, int expectedEnabling, int expectedDisabling)
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
HighlightOnPress = false
|
||||
HighlightOnPress = highlightOnPress,
|
||||
Height = 1,
|
||||
Width = 1
|
||||
};
|
||||
|
||||
int enablingHighlight = 0;
|
||||
int disablingHighlight = 0;
|
||||
view.EnablingHighlight += View_EnablingHighlight;
|
||||
view.DisablingHighlight += View_DisablingHighlight;
|
||||
view.ColorScheme = new ColorScheme (new Attribute (ColorName.Red, ColorName.Blue));
|
||||
ColorScheme originalColorScheme = view.ColorScheme;
|
||||
|
||||
var me = new MouseEvent ()
|
||||
{
|
||||
Flags = MouseFlags.Button1Pressed
|
||||
};
|
||||
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, });
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
if (highlightOnPress)
|
||||
{
|
||||
Assert.NotEqual (originalColorScheme, view.ColorScheme);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal (originalColorScheme, view.ColorScheme);
|
||||
}
|
||||
|
||||
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, });
|
||||
Assert.Equal (originalColorScheme, view.ColorScheme);
|
||||
Assert.Equal (expectedEnabling, enablingHighlight);
|
||||
Assert.Equal (expectedDisabling, disablingHighlight);
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
return;
|
||||
|
||||
void View_DisablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
disablingHighlight++;
|
||||
}
|
||||
void View_EnablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
enablingHighlight++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void HighlightOnPress_False_Highlights ()
|
||||
[Theory]
|
||||
[InlineData (0)]
|
||||
[InlineData (1)]
|
||||
[InlineData (10)]
|
||||
public void HighlightOnPress_Move_Keeps_Highlight (int x)
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
HighlightOnPress = true
|
||||
HighlightOnPress = true,
|
||||
Height = 1,
|
||||
Width = 1
|
||||
};
|
||||
view.ColorScheme = new ColorScheme (new Attribute (ColorName.Red, ColorName.Blue));
|
||||
ColorScheme originalColorScheme = view.ColorScheme;
|
||||
int enablingHighlight = 0;
|
||||
int disablingHighlight = 0;
|
||||
view.EnablingHighlight += View_EnablingHighlight;
|
||||
view.DisablingHighlight += View_DisablingHighlight;
|
||||
bool inViewport = view.Bounds.Contains (x, 0);
|
||||
|
||||
var me = new MouseEvent ()
|
||||
// Start at 0,0 ; in viewport
|
||||
view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
|
||||
Assert.Equal (1, enablingHighlight);
|
||||
Assert.Equal (0, disablingHighlight);
|
||||
|
||||
// Move to x,0
|
||||
view.NewMouseEvent (new () { X = x, Flags = MouseFlags.Button1Pressed });
|
||||
|
||||
if (inViewport)
|
||||
{
|
||||
Flags = MouseFlags.Button1Pressed
|
||||
};
|
||||
Assert.Equal (2, enablingHighlight);
|
||||
Assert.Equal (0, disablingHighlight);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal (1, enablingHighlight);
|
||||
Assert.Equal (1, disablingHighlight);
|
||||
}
|
||||
|
||||
view.OnMouseEvent (me);
|
||||
Assert.NotEqual (originalColorScheme, view.ColorScheme);
|
||||
// Move backto 0,0 ; in viewport
|
||||
view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
|
||||
if (inViewport)
|
||||
{
|
||||
Assert.Equal (3, enablingHighlight);
|
||||
Assert.Equal (0, disablingHighlight);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal (2, enablingHighlight);
|
||||
Assert.Equal (1, disablingHighlight);
|
||||
}
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
return;
|
||||
|
||||
void View_DisablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
disablingHighlight++;
|
||||
}
|
||||
void View_EnablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
enablingHighlight++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ public class NavigationTests
|
||||
|
||||
view.NewKeyDownEvent (Key.Space);
|
||||
Assert.True (wasClicked);
|
||||
view.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
view.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.True (view.Enabled);
|
||||
Assert.True (view.CanFocus);
|
||||
@@ -461,7 +461,7 @@ public class NavigationTests
|
||||
view.Enabled = false;
|
||||
view.NewKeyDownEvent (Key.Space);
|
||||
Assert.False (wasClicked);
|
||||
view.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
view.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.False (view.Enabled);
|
||||
Assert.True (view.CanFocus);
|
||||
@@ -491,7 +491,7 @@ public class NavigationTests
|
||||
|
||||
win.NewKeyDownEvent (Key.Enter);
|
||||
Assert.True (wasClicked);
|
||||
button.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
button.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.True (button.Enabled);
|
||||
Assert.True (button.CanFocus);
|
||||
@@ -503,7 +503,7 @@ public class NavigationTests
|
||||
win.Enabled = false;
|
||||
button.NewKeyDownEvent (Key.Enter);
|
||||
Assert.False (wasClicked);
|
||||
button.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
button.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.False (button.Enabled);
|
||||
Assert.True (button.CanFocus);
|
||||
|
||||
@@ -865,7 +865,7 @@ At 0,0
|
||||
|
||||
//Assert.False (r.OnKeyDown (new KeyEventArgs () { Key = Key.Unknown }));
|
||||
Assert.False (r.OnKeyUp (new Key { KeyCode = KeyCode.Null }));
|
||||
Assert.False (r.OnMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
|
||||
Assert.False (r.NewMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
|
||||
Assert.False (r.OnMouseEnter (new MouseEvent { Flags = MouseFlags.AllEvents }));
|
||||
Assert.False (r.OnMouseLeave (new MouseEvent { Flags = MouseFlags.AllEvents }));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user