mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-29 17:28:01 +01:00
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:
@@ -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
5
.gitignore
vendored
@@ -1,8 +1,9 @@
|
||||
bin
|
||||
obj
|
||||
*~
|
||||
~$*
|
||||
*.userprefs
|
||||
*~
|
||||
packages
|
||||
.vs
|
||||
*.csproj.user
|
||||
# User-specific files
|
||||
*.user
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ();
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user