Adjusted naming and variables for menu selection with keys

Remove obsolete mouse events (non active code)
This commit is contained in:
Peter Kirmeier 2023-05-05 20:01:49 +02:00
parent 189e45099c
commit 97185b1989
4 changed files with 51 additions and 133 deletions

View file

@ -251,23 +251,20 @@ namespace SystemTrayMenu.Handler
{
Menu? menuFromSelected;
Menu? menuBefore;
ListView? dgvBefore;
ListViewItemData? rowBefore = focussedRow;
bool toClear = false;
bool isSelected = focussedRow?.data.IsSelected ?? false;
bool doClearOldSelection = false;
bool wasSelected = focussedRow?.data.IsSelected ?? false;
if (isSelected)
if (wasSelected)
{
menuFromSelected = focussedRow?.data.SubMenu;
menuBefore = focussedMenu;
dgvBefore = menuBefore?.GetDataGridView();
}
else
{
ResetSelectedByKey();
menuFromSelected = null;
menuBefore = null;
dgvBefore = null;
}
switch (key)
@ -294,50 +291,50 @@ namespace SystemTrayMenu.Handler
break;
case Key.Up:
if ((modifiers == ModifierKeys.None) &&
dgvBefore != null &&
(TrySelectPrevious(dgvBefore, dgvBefore.Items.IndexOf(rowBefore)) ||
TrySelectPrevious(dgvBefore, dgvBefore.Items.Count - 1)))
menuBefore != null &&
(TrySelectPrevious(menuBefore, menuBefore.GetDataGridView().Items.IndexOf(rowBefore)) ||
TrySelectPrevious(menuBefore, menuBefore.GetDataGridView().Items.Count - 1)))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
doClearOldSelection = wasSelected;
}
break;
case Key.Down:
if ((modifiers == ModifierKeys.None) &&
dgvBefore != null &&
(TrySelectNext(dgvBefore, dgvBefore.Items.IndexOf(rowBefore)) ||
TrySelectNext(dgvBefore, 0)))
menuBefore != null &&
(TrySelectNext(menuBefore, menuBefore.GetDataGridView().Items.IndexOf(rowBefore)) ||
TrySelectNext(menuBefore, 0)))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
doClearOldSelection = wasSelected;
}
break;
case Key.Home:
if ((modifiers == ModifierKeys.None) &&
dgvBefore != null &&
TrySelectNext(dgvBefore, 0))
menuBefore != null &&
TrySelectNext(menuBefore, 0))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
doClearOldSelection = wasSelected;
}
break;
case Key.End:
if ((modifiers == ModifierKeys.None) &&
dgvBefore != null &&
TrySelectPrevious(dgvBefore, dgvBefore.Items.Count - 1))
menuBefore != null &&
TrySelectPrevious(menuBefore, menuBefore.GetDataGridView().Items.Count - 1))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
doClearOldSelection = wasSelected;
}
break;
case Key.Left:
case Key.Right:
if (modifiers == ModifierKeys.None &&
dgvBefore != null &&
menuBefore != null &&
focussedMenu != null)
{
// True, when next is left and key is left = true OR next is right (=not left) and key is right (not left)
@ -350,22 +347,18 @@ namespace SystemTrayMenu.Handler
if (nextMenuInKeyDirection || prevMenuAgainstKeyDirection)
{
// Next is in key direction or prev is opposite of key direction ==> TrySelect sub/next menu
if (isSelected)
// Next is in key direction or prev is opposite of key direction ==> Select sub/next menu
if (wasSelected)
{
if (menuFromSelected != null &&
menuFromSelected == focussedMenu?.SubMenu)
{
ListView dgv = menuFromSelected.GetDataGridView();
if (dgv != null && dgv.Items.Count > 0)
focussedMenu = menuFromSelected;
focussedRow = null;
if (TrySelectNext(menuFromSelected, 0))
{
focussedMenu = menuFromSelected;
focussedRow = null;
if (TrySelectNext(dgv, 0))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
}
RaiseRowSelectionChanged(menuBefore, rowBefore);
doClearOldSelection = wasSelected;
}
}
}
@ -379,28 +372,24 @@ namespace SystemTrayMenu.Handler
focussedRow = null;
Menu? lastMenu = focussedMenu;
if (lastMenu != null)
if (lastMenu != null && TrySelectNext(lastMenu, 0))
{
ListView dgv = lastMenu.GetDataGridView();
if (TrySelectNext(dgv, 0))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
}
RaiseRowSelectionChanged(menuBefore, rowBefore);
doClearOldSelection = wasSelected;
}
}
}
else if (focussedMenu?.ParentMenu != null)
{
// Next is in opposite key direction and prev is in key direction ==> TrySelect parent/prev menu
// Next is in opposite key direction and prev is in key direction ==> Select parent/prev menu
focussedMenu = focussedMenu.ParentMenu;
focussedRow = null;
ListView dgv = focussedMenu.GetDataGridView();
if (TrySelectNext(dgv, dgv.Items.IndexOf(dgv.SelectedItems.Count > 0 ? dgv.SelectedItems[0] : null)) ||
TrySelectNext(dgv, 0))
if (TrySelectNext(focussedMenu, dgv.Items.IndexOf(dgv.SelectedItems.Count > 0 ? dgv.SelectedItems[0] : null)) ||
TrySelectNext(focussedMenu, 0))
{
RaiseRowSelectionChanged(menuBefore, rowBefore);
toClear = true;
doClearOldSelection = wasSelected;
}
}
}
@ -413,7 +402,7 @@ namespace SystemTrayMenu.Handler
{
RowDeselected?.Invoke(menuBefore, rowBefore);
ResetSelectedByKey();
toClear = true;
doClearOldSelection = wasSelected;
ClosePressed?.Invoke();
}
@ -422,7 +411,7 @@ namespace SystemTrayMenu.Handler
break;
}
if (isSelected && toClear)
if (doClearOldSelection)
{
ClearIsSelectedByKey(menuBefore, rowBefore);
}
@ -439,15 +428,18 @@ namespace SystemTrayMenu.Handler
}
}
private bool TrySelectNext(ListView dgv, int indexStart)
private bool TrySelectNext(Menu menu, int indexStart)
{
bool found = false;
if (indexStart >= 0)
{
ListView dgv = menu.GetDataGridView();
for (uint i = (uint)indexStart; i < dgv.Items.Count; i++)
{
if (TrySelect(dgv, (ListViewItemData)dgv.Items[(int)i]))
ListViewItemData itemData = (ListViewItemData)dgv.Items[(int)i];
if (itemData != focussedRow)
{
Select(dgv, itemData);
found = true;
break;
}
@ -457,11 +449,12 @@ namespace SystemTrayMenu.Handler
return found;
}
private bool TrySelectPrevious(ListView dgv, int indexStart)
private bool TrySelectPrevious(Menu menu, int indexStart)
{
bool found = false;
if (indexStart > 0)
{
ListView dgv = menu.GetDataGridView();
if (dgv.Items.Count <= indexStart)
{
indexStart = dgv.Items.Count - 1;
@ -469,8 +462,10 @@ namespace SystemTrayMenu.Handler
for (int i = indexStart; i > -1; i--)
{
if (TrySelect(dgv, (ListViewItemData)dgv.Items[i]))
ListViewItemData itemData = (ListViewItemData)dgv.Items[i];
if (itemData != focussedRow)
{
Select(dgv, itemData);
found = true;
break;
}
@ -480,25 +475,12 @@ namespace SystemTrayMenu.Handler
return found;
}
private bool TrySelect(ListView dgv, ListViewItemData itemData)
private void Select(ListView dgv, ListViewItemData itemData)
{
bool found = false;
if (itemData != focussedRow)
{
focussedRow = itemData;
itemData.data.IsSelected = true;
if (dgv.SelectedItems.Contains(itemData))
{
dgv.SelectedItems.Remove(itemData);
}
dgv.SelectedItems.Add(itemData);
dgv.ScrollIntoView(itemData);
found = true;
}
return found;
focussedRow = itemData;
itemData.data.IsSelected = true;
dgv.SelectedItems.Add(itemData);
dgv.ScrollIntoView(itemData);
}
}
}

View file

@ -12,7 +12,6 @@ namespace SystemTrayMenu.Business
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using Microsoft.Win32;
@ -536,9 +535,6 @@ namespace SystemTrayMenu.Business
ListView dgv = menu.GetDataGridView();
dgv.SelectionChanged += Dgv_SelectionChanged;
#if TODO // Misc MouseEvents
dgv.MouseMove += waitToOpenMenu.MouseMove;
#endif
if (menu.Level == 0)
{
@ -600,10 +596,7 @@ namespace SystemTrayMenu.Business
}
}
private void Dgv_SelectionChanged(object sender, EventArgs e)
{
RefreshSelection((ListView)sender);
}
private void Dgv_SelectionChanged(object sender, EventArgs e) => RefreshSelection((ListView)sender);
private void RefreshSelection(ListView dgv)
{

View file

@ -5,9 +5,6 @@
namespace SystemTrayMenu.Handler
{
using System;
using System.Collections;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
using SystemTrayMenu.DataClasses;
using SystemTrayMenu.Utilities;
@ -20,16 +17,7 @@ namespace SystemTrayMenu.Handler
private readonly DispatcherTimer timerStartLoad = new();
private ListView? dgv;
private ListViewItemData? dgvItemData;
#if TODO // Misc MouseEvents
private ListView? dgvTmp;
private ListViewItemData rowItemDataTmp;
#endif
private bool alreadyOpened;
#if TODO // Misc MouseEvents
private int mouseMoveEvents;
private DateTime dateTimeLastMouseMoveEvent = DateTime.Now;
#endif
private bool checkForMouseActive = true;
internal WaitToLoadMenu()
@ -64,13 +52,6 @@ namespace SystemTrayMenu.Handler
SetData(menu.GetDataGridView(), itemData);
timerStartLoad.Start();
}
#if TODO // Misc MouseEvents
else
{
dgvTmp = dgv;
rowItemDataTmp = itemData;
}
#endif
}
internal void RowSelected(Menu menu, ListViewItemData itemData)
@ -124,35 +105,6 @@ namespace SystemTrayMenu.Handler
CallOpenMenuNow();
}
#if TODO // Misc MouseEvents
internal void MouseMove(object sender, MouseEventArgs e)
{
if (!MouseActive)
{
if (mouseMoveEvents > 6)
{
MouseActive = true;
if (dgvTmp != null)
{
MouseEnter(dgvTmp, rowItemDataTmp);
}
mouseMoveEvents = 0;
}
else if (DateTime.Now - dateTimeLastMouseMoveEvent <
new TimeSpan(0, 0, 0, 0, 200))
{
mouseMoveEvents++;
}
else
{
dateTimeLastMouseMoveEvent = DateTime.Now;
mouseMoveEvents = 0;
}
}
}
#endif
private void WaitStartLoad_Tick(object? sender, EventArgs e)
{
timerStartLoad.Stop();
@ -195,13 +147,10 @@ namespace SystemTrayMenu.Handler
}
alreadyOpened = false;
#if TODO // Misc MouseEvents
dgvTmp = null;
#endif
this.dgv = dgv;
dgvItemData = itemData;
dgvItemData.data.IsSelected = true;
dgv.SelectedItem = dgvItemData;
}

View file

@ -263,12 +263,6 @@ namespace SystemTrayMenu.UserInterface
internal event Action? MenuScrolled;
#if TODO // Misc MouseEvents
internal new event Action MouseEnter;
internal new event Action MouseLeave;
#endif
internal event Action<Menu, Key, ModifierKeys>? CmdKeyProcessed;
internal event Action? SearchTextChanging;