Mouse events menu (#401)

* Fixes an issue in the sln file that despite not having been changed, git reports as changed.

* Adding some settings for crlf and user specific.

* Prevent button clicked event if the point of the pressed and released don't match. Also decreases the delay for the triple click.

* Changes the menu button clicked event to button pressed to improve mouse clicks.

* Removed the action that was running all the time after the first running.
This commit is contained in:
BDisp
2020-04-20 20:26:32 +01:00
committed by GitHub
parent 4522097c02
commit 8a6c2a9fc1
4 changed files with 44 additions and 28 deletions

View File

@@ -6,6 +6,7 @@ csharp_new_line_before_open_brace = methods,local_functions
csharp_new_line_before_else = false
csharp_new_line_before_catch = false
csharp_new_line_before_finally = false
end_of_line = crlf
csharp_indent_case_contents = true
csharp_indent_switch_labels = false

5
.gitignore vendored
View File

@@ -1,8 +1,9 @@
bin
obj
*~
~$*
*.userprefs
*~
packages
.vs
*.csproj.user
# User-specific files
*.user

View File

@@ -610,6 +610,7 @@ namespace Terminal.Gui {
WindowsConsole.ButtonState? LastMouseButtonPressed = null;
bool IsButtonReleased = false;
bool IsButtonDoubleClicked = false;
Point point;
MouseEvent ToDriverMouse (WindowsConsole.MouseEventRecord mouseEvent)
{
@@ -617,8 +618,8 @@ namespace Terminal.Gui {
if (IsButtonDoubleClicked) {
Task.Run (async () => {
await Task.Delay (300);
_ = new Action (() => IsButtonDoubleClicked = false);
await Task.Delay (100);
IsButtonDoubleClicked = false;
});
}
@@ -649,8 +650,15 @@ namespace Terminal.Gui {
break;
}
if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved)
if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) {
mouseFlag |= MouseFlags.ReportMousePosition;
point = new Point ();
} else {
point = new Point () {
X = mouseEvent.MousePosition.X,
Y = mouseEvent.MousePosition.Y
};
}
LastMouseButtonPressed = mouseEvent.ButtonState;
} else if (mouseEvent.EventFlags == 0 && LastMouseButtonPressed != null && !IsButtonReleased &&
!IsButtonDoubleClicked) {
@@ -670,18 +678,24 @@ namespace Terminal.Gui {
IsButtonReleased = true;
} else if ((mouseEvent.EventFlags == 0 || mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) &&
IsButtonReleased) {
switch (LastMouseButtonPressed) {
case WindowsConsole.ButtonState.Button1Pressed:
mouseFlag = MouseFlags.Button1Clicked;
break;
var p = new Point () {
X = mouseEvent.MousePosition.X,
Y = mouseEvent.MousePosition.Y
};
if (p == point) {
switch (LastMouseButtonPressed) {
case WindowsConsole.ButtonState.Button1Pressed:
mouseFlag = MouseFlags.Button1Clicked;
break;
case WindowsConsole.ButtonState.Button2Pressed:
mouseFlag = MouseFlags.Button2Clicked;
break;
case WindowsConsole.ButtonState.Button2Pressed:
mouseFlag = MouseFlags.Button2Clicked;
break;
case WindowsConsole.ButtonState.RightmostButtonPressed:
mouseFlag = MouseFlags.Button4Clicked;
break;
case WindowsConsole.ButtonState.RightmostButtonPressed:
mouseFlag = MouseFlags.Button4Clicked;
break;
}
}
LastMouseButtonPressed = null;
IsButtonReleased = false;

View File

@@ -432,7 +432,7 @@ namespace Terminal.Gui {
}
host.handled = false;
bool disabled;
if (me.Flags == MouseFlags.Button1Clicked || me.Flags == MouseFlags.Button1Released) {
if (me.Flags == MouseFlags.Button1Pressed) {
disabled = false;
if (me.Y < 1)
return true;
@@ -525,7 +525,7 @@ namespace Terminal.Gui {
Width = Dim.Fill ();
Height = 1;
Menus = menus;
CanFocus = true;
//CanFocus = true;
selected = -1;
selectedSub = -1;
ColorScheme = Colors.Menu;
@@ -984,13 +984,13 @@ namespace Terminal.Gui {
}
handled = false;
if (me.Flags == MouseFlags.Button1Clicked ||
if (me.Flags == MouseFlags.Button1Pressed ||
(me.Flags == MouseFlags.ReportMousePosition && selected > -1)) {
int pos = 1;
int cx = me.X;
for (int i = 0; i < Menus.Length; i++) {
if (cx > pos && me.X < pos + 1 + Menus [i].TitleLength) {
if (selected == i && me.Flags == MouseFlags.Button1Clicked && !isMenuClosed) {
if (selected == i && me.Flags == MouseFlags.Button1Pressed && !isMenuClosed) {
Application.UngrabMouse ();
if (Menus [i].IsTopLevel) {
var menu = new Menu (this, i, 0, Menus [i]);
@@ -998,7 +998,7 @@ namespace Terminal.Gui {
} else {
CloseMenu ();
}
} else if (me.Flags == MouseFlags.Button1Clicked && isMenuClosed) {
} else if (me.Flags == MouseFlags.Button1Pressed && isMenuClosed) {
if (Menus [i].IsTopLevel) {
var menu = new Menu (this, i, 0, Menus [i]);
menu.Run (Menus [i].Action);
@@ -1033,7 +1033,7 @@ namespace Terminal.Gui {
Application.GrabMouse (me.View);
me.View.MouseEvent (me);
}
} else if (!(me.View is MenuBar || me.View is Menu) && me.Flags.HasFlag (MouseFlags.Button1Clicked)) {
} else if (!(me.View is MenuBar || me.View is Menu) && me.Flags.HasFlag (MouseFlags.Button1Pressed)) {
Application.UngrabMouse ();
CloseAllMenus ();
handled = false;
@@ -1042,22 +1042,22 @@ namespace Terminal.Gui {
handled = false;
return false;
}
} else if (isMenuClosed && me.Flags.HasFlag (MouseFlags.Button1Clicked)) {
} else if (isMenuClosed && me.Flags.HasFlag (MouseFlags.Button1Pressed)) {
Application.GrabMouse (current);
} else {
handled = false;
return false;
}
//if (me.View != this && me.Flags != MouseFlags.Button1Clicked)
//if (me.View != this && me.Flags != MouseFlags.Button1Pressed)
// return true;
//else if (me.View != this && me.Flags == MouseFlags.Button1Clicked) {
//else if (me.View != this && me.Flags == MouseFlags.Button1Pressed) {
// Application.UngrabMouse ();
// host.CloseAllMenus ();
// return true;
//}
//if (!(me.View is MenuBar) && !(me.View is Menu) && me.Flags != MouseFlags.Button1Clicked)
//if (!(me.View is MenuBar) && !(me.View is Menu) && me.Flags != MouseFlags.Button1Pressed)
// return false;
//if (Application.mouseGrabView != null) {
@@ -1066,11 +1066,11 @@ namespace Terminal.Gui {
// me.Y -= me.OfY;
// me.View.MouseEvent (me);
// return true;
// } else if (!(me.View is MenuBar || me.View is Menu) && me.Flags == MouseFlags.Button1Clicked) {
// } else if (!(me.View is MenuBar || me.View is Menu) && me.Flags == MouseFlags.Button1Pressed) {
// Application.UngrabMouse ();
// CloseAllMenus ();
// }
//} else if (!isMenuClosed && selected == -1 && me.Flags == MouseFlags.Button1Clicked) {
//} else if (!isMenuClosed && selected == -1 && me.Flags == MouseFlags.Button1Pressed) {
// Application.GrabMouse (this);
// return true;
//}
@@ -1082,7 +1082,7 @@ namespace Terminal.Gui {
// } else if (me.View != current && me.View is MenuBar && me.View is Menu) {
// Application.UngrabMouse ();
// Application.GrabMouse (me.View);
// } else if (me.Flags == MouseFlags.Button1Clicked) {
// } else if (me.Flags == MouseFlags.Button1Pressed) {
// Application.UngrabMouse ();
// CloseMenu ();
// }