mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
* Remove continous press code from Application * WIP prototype code to handle continuous press as subcomponent of View * Prototype with Button * Implement CWP * Move to seperate classes and prevent double entry to Start * Fix repeat clicking when moving mouse by removing phantom click code (old implementation of WantContinuousButtonPressed) * Remove initial tick because it results in double activation e.g. button firing twice immediately as mouse is pressed down. * Refactor DatePicker lamdas * WIP investigate subcomponents instead of statics * Add IMouseGrabHandler to IApplication * Make mouse grabbing non static activity * Make MouseHeldDown suppress when null fields e.g. app not initialized in tests * Update test and remove dependency on Application * Fix other mouse click and hold tests * Code cleanup * Update class diagram * Fix bad xml doc references * Fix timed events not getting passed through in v2 applications * Make timed events nullable for tests that dont create an Application * Remove strange blocking test * WIP remove all idles and replace with zero timeouts * Fix build of tests * Fix unit tests * Add wakeup call back in * Comment out incredibly complicated test and fix others * Fix test * test fix * Make Post execute immediately if already on UI thread * Re enable test and simplify Invoke to just execute if in UI thread (up front) * Remove xml doc references to idles * Remove more references to idles * Make Screen initialization threadsafe * Add more exciting timeouts * WIP add tests * fix log * fix test * make continuous key press use smoth acceleration * Rename _lock to _lockScreen * Remove section on idles, they are not a thing anymore - and they kinda never were. * Add nullable enable * Add xml comment * Fix namings and cleanup code * xmldoc fix * Rename LockAndRunTimers to just RunTimers * Rename AddTimeout and RemoveTimeout (and event) to just Add/Remove * Update description of MainLoop * Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * Again? Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * Revert Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * When mouse is released from MouseHeldDown reset host MouseState * Fix namespaces in class diagram * Apply @BDisp suggested fix * Fix class diagrams * Add lock * Make TimeSpan.Zero definetly run * Fix duplicate entry in package props --------- Co-authored-by: Tig <tig@users.noreply.github.com>
This commit is contained in:
@@ -160,7 +160,7 @@ public class ShadowStyleTests (ITestOutputHelper output)
|
||||
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, Position = new (0, 0) });
|
||||
Assert.Equal (origThickness, view.Margin.Thickness);
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using UnitTests;
|
||||
using Moq;
|
||||
using UnitTests;
|
||||
|
||||
namespace Terminal.Gui.ViewMouseTests;
|
||||
|
||||
@@ -95,7 +96,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -125,7 +126,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -155,7 +156,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -166,7 +167,6 @@ public class MouseTests : TestsAllViews
|
||||
[InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released)]
|
||||
public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Button_Press_Release_Clicks (MouseFlags pressed, MouseFlags released)
|
||||
{
|
||||
Application.Init (new FakeDriver ());
|
||||
var me = new MouseEventArgs ();
|
||||
|
||||
var view = new View
|
||||
@@ -177,28 +177,43 @@ public class MouseTests : TestsAllViews
|
||||
WantMousePositionReports = true
|
||||
};
|
||||
|
||||
// Setup components for mouse held down
|
||||
var timed = new TimedEvents ();
|
||||
var grab = new MouseGrabHandler ();
|
||||
view.MouseHeldDown = new MouseHeldDown (view, timed, grab);
|
||||
|
||||
// Register callback for what to do when the mouse is held down
|
||||
var clickedCount = 0;
|
||||
view.MouseHeldDown.MouseIsHeldDownTick += (_, _) => clickedCount++;
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
// Mouse is currently not held down so should be no timers running
|
||||
Assert.Empty(timed.Timeouts);
|
||||
|
||||
// When mouse is held down
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
me.Handled = false;
|
||||
// A timer should begin
|
||||
var t = Assert.Single (timed.Timeouts);
|
||||
|
||||
// Invoke the timer
|
||||
t.Value.Callback.Invoke ();
|
||||
|
||||
// Event should have been raised
|
||||
Assert.Equal (1, clickedCount);
|
||||
Assert.NotEmpty(timed.Timeouts);
|
||||
|
||||
// When mouse is released
|
||||
me.Flags = released;
|
||||
view.NewMouseEvent (me);
|
||||
|
||||
// timer should stop
|
||||
Assert.Empty (timed.Timeouts);
|
||||
Assert.Equal (1, clickedCount);
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
@@ -212,7 +227,6 @@ public class MouseTests : TestsAllViews
|
||||
MouseFlags clicked
|
||||
)
|
||||
{
|
||||
Application.Init (new FakeDriver ());
|
||||
var me = new MouseEventArgs ();
|
||||
|
||||
var view = new View
|
||||
@@ -223,39 +237,49 @@ public class MouseTests : TestsAllViews
|
||||
WantMousePositionReports = true
|
||||
};
|
||||
|
||||
var clickedCount = 0;
|
||||
// Setup components for mouse held down
|
||||
var timed = new TimedEvents ();
|
||||
var grab = new MouseGrabHandler ();
|
||||
view.MouseHeldDown = new MouseHeldDown (view, timed, grab);
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
// Register callback for what to do when the mouse is held down
|
||||
var clickedCount = 0;
|
||||
view.MouseHeldDown.MouseIsHeldDownTick += (_, _) => clickedCount++;
|
||||
|
||||
Assert.Empty (timed.Timeouts);
|
||||
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
Assert.NotEmpty(timed.Timeouts);
|
||||
Assert.Single (timed.Timeouts).Value.Callback.Invoke ();
|
||||
|
||||
me.Flags = pressed;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
Assert.NotEmpty (timed.Timeouts);
|
||||
|
||||
me.Flags = released;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
Assert.Empty (timed.Timeouts);
|
||||
|
||||
me.Flags = clicked;
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Move_InViewport_OutOfViewport_Keeps_Counting ()
|
||||
{
|
||||
Application.Init (new FakeDriver ());
|
||||
var me = new MouseEventArgs ();
|
||||
|
||||
var view = new View
|
||||
@@ -266,9 +290,14 @@ public class MouseTests : TestsAllViews
|
||||
WantMousePositionReports = true
|
||||
};
|
||||
|
||||
var clickedCount = 0;
|
||||
// Setup components for mouse held down
|
||||
var timed = new TimedEvents ();
|
||||
var grab = new MouseGrabHandler ();
|
||||
view.MouseHeldDown = new MouseHeldDown (view, timed, grab);
|
||||
|
||||
view.MouseClick += (s, e) => clickedCount++;
|
||||
// Register callback for what to do when the mouse is held down
|
||||
var clickedCount = 0;
|
||||
view.MouseHeldDown.MouseIsHeldDownTick += (_, _) => clickedCount++;
|
||||
|
||||
// Start in Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
@@ -277,17 +306,30 @@ public class MouseTests : TestsAllViews
|
||||
Assert.Equal (0, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
// Mouse is held down so timer should be ticking
|
||||
Assert.NotEmpty (timed.Timeouts);
|
||||
Assert.Equal (clickedCount,0);
|
||||
|
||||
// Don't wait, just force it to expire
|
||||
Assert.Single (timed.Timeouts).Value.Callback.Invoke ();
|
||||
Assert.Equal (clickedCount, 1);
|
||||
|
||||
// Move out of Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.Position = me.Position with { X = 1 };
|
||||
view.NewMouseEvent (me);
|
||||
Assert.Equal (1, clickedCount);
|
||||
|
||||
Assert.Single (timed.Timeouts).Value.Callback.Invoke ();
|
||||
Assert.Equal (clickedCount, 2);
|
||||
|
||||
me.Handled = false;
|
||||
|
||||
// Move into Viewport
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.Position = me.Position with { X = 0 };
|
||||
view.NewMouseEvent (me);
|
||||
|
||||
Assert.NotEmpty (timed.Timeouts);
|
||||
Assert.Equal (2, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
@@ -295,13 +337,13 @@ public class MouseTests : TestsAllViews
|
||||
me.Flags = MouseFlags.Button1Pressed;
|
||||
me.Position = me.Position with { X = 0 };
|
||||
view.NewMouseEvent (me);
|
||||
|
||||
Assert.Single (timed.Timeouts).Value.Callback.Invoke ();
|
||||
|
||||
Assert.Equal (3, clickedCount);
|
||||
me.Handled = false;
|
||||
|
||||
view.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
//[Theory]
|
||||
@@ -335,7 +377,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
// testView.Dispose ();
|
||||
|
||||
// // Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// // Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
// Application.ResetState (true);
|
||||
|
||||
//}
|
||||
@@ -400,7 +442,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
testView.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -462,7 +504,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
testView.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -525,7 +567,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
testView.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
|
||||
@@ -589,7 +631,7 @@ public class MouseTests : TestsAllViews
|
||||
|
||||
testView.Dispose ();
|
||||
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabView to be set
|
||||
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
||||
Application.ResetState (true);
|
||||
}
|
||||
private class MouseEventTestView : View
|
||||
|
||||
Reference in New Issue
Block a user