Improve mouse and search item selection

This commit is contained in:
Peter Kirmeier 2023-05-05 22:19:00 +02:00
parent 9dede1c762
commit 56476e095d
2 changed files with 23 additions and 42 deletions

View file

@ -182,23 +182,16 @@ namespace SystemTrayMenu.Handler
}
}
internal void SearchTextChanging()
{
ClearIsSelectedByKey();
}
internal void SearchTextChanged(Menu menu, bool isSearchStringEmpty)
{
if (isSearchStringEmpty)
{
ClearIsSelectedByKey();
}
else
ClearIsSelectedByKey();
if (!isSearchStringEmpty)
{
ListView dgv = menu.GetDataGridView();
if (dgv.Items.Count > 0)
{
Select(menu, (ListViewItemData)dgv.Items[0], true);
MouseSelect(menu, (ListViewItemData)dgv.Items[0]);
}
}
}
@ -208,28 +201,14 @@ namespace SystemTrayMenu.Handler
ClearIsSelectedByKey(focussedMenu, focussedRow);
}
internal void Select(Menu menu, ListViewItemData itemData, bool refreshview)
internal void MouseSelect(Menu menu, ListViewItemData itemData)
{
if (itemData != focussedRow || menu != focussedMenu)
{
ClearIsSelectedByKey();
}
InUse = false;
ClearIsSelectedByKey();
focussedMenu = menu;
focussedRow = itemData;
itemData.data.IsSelected = true;
if (refreshview)
{
ListView dgv = menu.GetDataGridView();
if (dgv.SelectedItems.Contains(itemData))
{
dgv.SelectedItems.Remove(itemData);
}
dgv.SelectedItems.Add(itemData);
}
Select(menu.GetDataGridView(), itemData);
}
private static void ClearIsSelectedByKey(Menu? menu, ListViewItemData? itemData)
@ -440,6 +419,7 @@ namespace SystemTrayMenu.Handler
if (itemData != focussedRow)
{
Select(dgv, itemData);
dgv.ScrollIntoView(itemData);
found = true;
break;
}
@ -466,6 +446,7 @@ namespace SystemTrayMenu.Handler
if (itemData != focussedRow)
{
Select(dgv, itemData);
dgv.ScrollIntoView(itemData);
found = true;
break;
}
@ -479,8 +460,15 @@ namespace SystemTrayMenu.Handler
{
focussedRow = itemData;
itemData.data.IsSelected = true;
// TODO: Refresh ListViewItems - optimize out
// ([remove and] add item to procove selection changed handler)
if (dgv.SelectedItems.Contains(itemData))
{
dgv.SelectedItems.Remove(itemData);
}
dgv.SelectedItems.Add(itemData);
dgv.ScrollIntoView(itemData);
}
}
}

View file

@ -96,7 +96,7 @@ namespace SystemTrayMenu.Business
}
}
waitToOpenMenu.MouseEnterOk += (menu, itemData) => MouseEnterOk(menu, itemData, false);
waitToOpenMenu.MouseEnterOk += (menu, itemData) => MouseEnterOk(menu, itemData);
waitToOpenMenu.CloseMenu += CloseMenu;
void CloseMenu(int level)
{
@ -464,7 +464,6 @@ namespace SystemTrayMenu.Business
void Menu_SearchTextChanging()
{
searchTextChanging = true;
keyboardInput.SearchTextChanging();
waitToOpenMenu.MouseActive = false;
}
@ -529,7 +528,7 @@ namespace SystemTrayMenu.Business
menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender);
menu.CellMouseEnter += waitToOpenMenu.MouseEnter;
menu.CellMouseLeave += waitToOpenMenu.MouseLeave;
menu.CellMouseDown += (menu, itemData) => MouseEnterOk(menu, itemData, true);
menu.CellMouseDown += (menu, itemData) => MouseEnterOk(menu, itemData);
menu.CellOpenOnClick += waitToOpenMenu.ClickOpensInstantly;
menu.ClosePressed += MenusFadeOut;
@ -582,17 +581,11 @@ namespace SystemTrayMenu.Business
}
}
private void MouseEnterOk(Menu menu, ListViewItemData itemData, bool refreshView)
private void MouseEnterOk(Menu menu, ListViewItemData itemData)
{
if (IsMainUsable)
{
if (keyboardInput.InUse)
{
keyboardInput.ClearIsSelectedByKey();
keyboardInput.InUse = false;
}
keyboardInput.Select(menu, itemData, refreshView);
keyboardInput.MouseSelect(menu, itemData);
}
}