mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-07-01 20:40:22 +12:00
Adjusted naming and variables for menu selection with keys
Remove obsolete mouse events (non active code)
This commit is contained in:
parent
189e45099c
commit
97185b1989
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue