From 6ebfed5f78efa23fd0bd2c5dbad5221fa723133b Mon Sep 17 00:00:00 2001 From: Peter Kirmeier Date: Mon, 24 Apr 2023 22:38:36 +0200 Subject: [PATCH] Simplified some mouse and open events --- Business/KeyboardInput.cs | 11 ++----- Business/Menus.cs | 43 ++++++++----------------- Business/WaitToLoadMenu.cs | 16 +++++----- DataClasses/RowData.cs | 64 +++++++++++++------------------------- Helpers/DgvMouseRow.cs | 2 +- UserInterface/Menu.xaml.cs | 28 ++++++++++++++--- 6 files changed, 67 insertions(+), 97 deletions(-) diff --git a/Business/KeyboardInput.cs b/Business/KeyboardInput.cs index 18b4d6d..05d71f5 100644 --- a/Business/KeyboardInput.cs +++ b/Business/KeyboardInput.cs @@ -319,15 +319,8 @@ namespace SystemTrayMenu.Handler RowData trigger = ((Menu.ListViewItemData)dgv.Items[iRowKey]).data; if (trigger.IsMenuOpen || !trigger.ContainsMenu) { - trigger.MouseClick(null, out bool toCloseByMouseClick); -#if TODO // Misc MouseEvents - trigger.DoubleClick( - new MouseButtonEventArgs(MouseButtons.Left, 0, 0, 0, 0), - out bool toCloseByDoubleClick); -#else - bool toCloseByDoubleClick = false; -#endif - if (toCloseByMouseClick || toCloseByDoubleClick) + trigger.OpenItem(out bool doCloseAfterOpen); + if (doCloseAfterOpen) { ClosePressed?.Invoke(); } diff --git a/Business/Menus.cs b/Business/Menus.cs index d14fbb1..4dc89f5 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -43,7 +43,9 @@ namespace SystemTrayMenu.Business private OpenCloseState openCloseState = OpenCloseState.Default; private TaskbarPosition taskbarPosition = new WindowsTaskbar().Position; private bool searchTextChanging; +#if TODO // Misc MouseEvents private int lastMouseDownRowIndex = -1; +#endif private bool showMenuAfterMainPreload; private bool hideSubmenuDuringRefreshSearch; @@ -603,7 +605,8 @@ namespace SystemTrayMenu.Business menu.CellMouseLeave += dgvMouseRow.CellMouseLeave; menu.CellMouseDown += Dgv_MouseDown; menu.CellMouseUp += Dgv_MouseUp; - menu.CellMouseClick += Dgv_MouseClick; + menu.CellOpenOnClick += Dgv_OpenItemOnClick; + menu.ClosePressed += MenusFadeOut; ListView? dgv = menu.GetDataGridView(); if (dgv != null) @@ -666,24 +669,23 @@ namespace SystemTrayMenu.Business } } - private void Dgv_MouseDown(object sender, int index, MouseButtonEventArgs e) + private void Dgv_MouseDown(ListView dgv, int index, MouseButtonEventArgs e) { - ListView dgv = (ListView)sender; - MouseEnterOk(dgv, index, true); - // TODO WPF: Move directly into ListViewItem_PreviewMouseDown ? - ((Menu.ListViewItemData)dgv.Items[index]).data.MouseDown(dgv, e); - +#if TODO // Misc MouseEvents if (e.LeftButton == MouseButtonState.Pressed) { lastMouseDownRowIndex = index; } +#endif } private void Dgv_MouseUp(object sender, int index, MouseButtonEventArgs e) { +#if TODO // Misc MouseEvents lastMouseDownRowIndex = -1; +#endif } private void MouseEnterOk(ListView dgv, int rowIndex) @@ -726,31 +728,12 @@ namespace SystemTrayMenu.Business } #endif - private void Dgv_MouseClick(ListView sender, int index, MouseButtonEventArgs e) + private void Dgv_OpenItemOnClick(ListView sender, ListViewItem item) { - bool doClose = false; - - if (e.ClickCount == 1) - { - lastMouseDownRowIndex = -1; - - ((Menu.ListViewItemData)sender.Items[index]).data.MouseClick(e, out doClose); - - waitToOpenMenu.ClickOpensInstantly(sender, index); - } - else if (e.ClickCount == 2) - { - lastMouseDownRowIndex = -1; - - ((Menu.ListViewItemData)sender.Items[index]).data.DoubleClick(e, out doClose); - } - - if (doClose) - { - MenusFadeOut(); - } - +#if TODO // Misc MouseEvents lastMouseDownRowIndex = -1; +#endif + waitToOpenMenu.ClickOpensInstantly(sender, item); } private void Dgv_SelectionChanged(object sender, EventArgs e) diff --git a/Business/WaitToLoadMenu.cs b/Business/WaitToLoadMenu.cs index ecbbfed..b0499cf 100644 --- a/Business/WaitToLoadMenu.cs +++ b/Business/WaitToLoadMenu.cs @@ -5,6 +5,7 @@ namespace SystemTrayMenu.Handler { using System; + using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; using SystemTrayMenu.DataClasses; @@ -100,16 +101,13 @@ namespace SystemTrayMenu.Handler MouseActive = false; } - internal void ClickOpensInstantly(ListView dgv, int rowIndex) + internal void ClickOpensInstantly(ListView dgv, ListViewItem item) { - if (dgv.Items.Count > rowIndex) - { - timerStartLoad.Stop(); - SetData(dgv, rowIndex); - MouseActive = true; - checkForMouseActive = false; - CallOpenMenuNow(); - } + timerStartLoad.Stop(); + SetData(dgv, dgv.IndexOfSenderItem(item)); + MouseActive = true; + checkForMouseActive = false; + CallOpenMenuNow(); } internal void EnterOpensInstantly(ListView dgv, int rowIndex) diff --git a/DataClasses/RowData.cs b/DataClasses/RowData.cs index 9e268dd..aaf69bb 100644 --- a/DataClasses/RowData.cs +++ b/DataClasses/RowData.cs @@ -144,8 +144,6 @@ namespace SystemTrayMenu.DataClasses internal bool IconLoading { get; set; } - internal bool ProcessStarted { get; set; } - internal void ReadIcon(bool updateIconInBackground) { if (IsFolder || IsLinkToFolder) @@ -227,57 +225,37 @@ namespace SystemTrayMenu.DataClasses } } - internal void MouseClick(MouseEventArgs? e, out bool toCloseByDoubleClick) + internal void OpenItem(out bool doCloseAfterOpen, int clickCount = -1) { IsClicking = false; - toCloseByDoubleClick = false; - if (Properties.Settings.Default.OpenItemWithOneClick) - { - OpenItem(e, ref toCloseByDoubleClick); - } + doCloseAfterOpen = false; - if (Properties.Settings.Default.OpenDirectoryWithOneClick && Path != null && - ContainsMenu && (e == null || e.LeftButton == MouseButtonState.Pressed)) + if (clickCount == -1 || + (clickCount == 1 && Properties.Settings.Default.OpenItemWithOneClick) || + (clickCount == 2 && !Properties.Settings.Default.OpenItemWithOneClick)) { - Log.ProcessStart(Path); - if (!Properties.Settings.Default.StaysOpenWhenItemClicked) + if (!ContainsMenu && Path != null && ResolvedPath != null) { - toCloseByDoubleClick = true; + string? workingDirectory = System.IO.Path.GetDirectoryName(ResolvedPath); + Log.ProcessStart(Path, string.Empty, false, workingDirectory, true, ResolvedPath); + if (!Properties.Settings.Default.StaysOpenWhenItemClicked) + { + doCloseAfterOpen = true; + } } } - } - internal void DoubleClick(MouseButtonEventArgs e, out bool toCloseByDoubleClick) - { - IsClicking = false; - toCloseByDoubleClick = false; - if (!Properties.Settings.Default.OpenItemWithOneClick) + if (clickCount == -1 || + (clickCount == 1 && Properties.Settings.Default.OpenDirectoryWithOneClick) || + (clickCount == 2 && !Properties.Settings.Default.OpenDirectoryWithOneClick)) { - OpenItem(e, ref toCloseByDoubleClick); - } - - if (!Properties.Settings.Default.OpenDirectoryWithOneClick && Path != null && - ContainsMenu && (e == null || e.LeftButton == MouseButtonState.Pressed)) - { - Log.ProcessStart(Path); - if (!Properties.Settings.Default.StaysOpenWhenItemClicked) + if (Path != null && ContainsMenu) { - toCloseByDoubleClick = true; - } - } - } - - private void OpenItem(MouseEventArgs? e, ref bool toCloseByOpenItem) - { - if (!ContainsMenu && Path != null && ResolvedPath != null && - (e == null || e.LeftButton == MouseButtonState.Pressed)) - { - ProcessStarted = true; - string? workingDirectory = System.IO.Path.GetDirectoryName(ResolvedPath); - Log.ProcessStart(Path, string.Empty, false, workingDirectory, true, ResolvedPath); - if (!Properties.Settings.Default.StaysOpenWhenItemClicked) - { - toCloseByOpenItem = true; + Log.ProcessStart(Path); + if (!Properties.Settings.Default.StaysOpenWhenItemClicked) + { + doCloseAfterOpen = true; + } } } } diff --git a/Helpers/DgvMouseRow.cs b/Helpers/DgvMouseRow.cs index d30083f..332ea2d 100644 --- a/Helpers/DgvMouseRow.cs +++ b/Helpers/DgvMouseRow.cs @@ -56,7 +56,7 @@ namespace SystemTrayMenu.Helpers senderIndex = index; } - internal void CellMouseLeave(T sender, int index) + internal void CellMouseLeave() { timerRaiseRowMouseLeave.Start(); } diff --git a/UserInterface/Menu.xaml.cs b/UserInterface/Menu.xaml.cs index d0b31e5..ced82b4 100644 --- a/UserInterface/Menu.xaml.cs +++ b/UserInterface/Menu.xaml.cs @@ -300,13 +300,15 @@ namespace SystemTrayMenu.UserInterface internal event Action? CellMouseEnter; - internal event Action? CellMouseLeave; + internal event Action? CellMouseLeave; internal event Action? CellMouseDown; internal event Action? CellMouseUp; - internal event Action? CellMouseClick; + internal event Action? CellOpenOnClick; + + internal event Action? ClosePressed; internal event RoutedEventHandler FadeToTransparent { @@ -1242,12 +1244,16 @@ namespace SystemTrayMenu.UserInterface private void ListViewItem_MouseLeave(object sender, MouseEventArgs e) { - CellMouseLeave?.Invoke(dgv, dgv.IndexOfSenderItem((ListViewItem)sender)); + CellMouseLeave?.Invoke(); } private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) { - CellMouseDown?.Invoke(dgv, dgv.IndexOfSenderItem((ListViewItem)sender), e); + int index = dgv.IndexOfSenderItem((ListViewItem)sender); + + CellMouseDown?.Invoke(dgv, index, e); + + ((ListViewItemData)dgv.Items[index]).data.MouseDown(dgv, e); } private void ListViewItem_MouseUp(object sender, MouseButtonEventArgs e) @@ -1257,7 +1263,19 @@ namespace SystemTrayMenu.UserInterface private void ListViewxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { - CellMouseClick?.Invoke(dgv, dgv.IndexOfSenderItem((ListViewItem)sender), e); + ListViewItemData row = (ListViewItemData)((ListViewItem)sender).Content; + + row.data.OpenItem(out bool doClose, e.ClickCount); + + if (e.ClickCount == 1) + { + CellOpenOnClick?.Invoke(dgv, (ListViewItem)sender); + } + + if (doClose) + { + ClosePressed?.Invoke(); + } } ///