mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-09-30 09:06:32 +13:00
Minor refactoring and add gamepad button 1 as additional enter button
This commit is contained in:
parent
ab0758788c
commit
b93e1fb345
2 changed files with 42 additions and 28 deletions
|
@ -7,12 +7,12 @@ namespace SystemTrayMenu.Handler
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using SystemTrayMenu.DataClasses;
|
||||
using SystemTrayMenu.Helpers;
|
||||
using SystemTrayMenu.Utilities;
|
||||
using static SystemTrayMenu.UserInterface.Menu;
|
||||
using ListView = System.Windows.Controls.ListView;
|
||||
using Menu = SystemTrayMenu.UserInterface.Menu;
|
||||
|
||||
internal class KeyboardInput : IDisposable
|
||||
|
@ -38,8 +38,6 @@ namespace SystemTrayMenu.Handler
|
|||
|
||||
internal event Action<ListView, ListViewItemData>? EnterPressed;
|
||||
|
||||
internal event Action? Cleared;
|
||||
|
||||
internal bool InUse { get; set; }
|
||||
|
||||
public void Dispose()
|
||||
|
@ -245,26 +243,25 @@ namespace SystemTrayMenu.Handler
|
|||
|
||||
private bool IsAnyMenuSelectedByKey(
|
||||
ref ListView? dgv,
|
||||
ref Menu? menuFromSelected,
|
||||
ref string textselected)
|
||||
ref Menu? subMenu,
|
||||
ref string textSelected)
|
||||
{
|
||||
Menu? menu = menus[iMenuKey];
|
||||
bool isStillSelected = false;
|
||||
if (menu != null &&
|
||||
iRowKey > -1)
|
||||
if (menu != null && iRowKey > -1)
|
||||
{
|
||||
dgv = menu.GetDataGridView();
|
||||
if (dgv != null)
|
||||
{
|
||||
if (dgv.Items.Count > iRowKey)
|
||||
{
|
||||
Menu.ListViewItemData itemData = (Menu.ListViewItemData)dgv.Items[iRowKey];
|
||||
ListViewItemData itemData = (ListViewItemData)dgv.Items[iRowKey];
|
||||
RowData rowData = itemData.data;
|
||||
if (rowData.IsSelected)
|
||||
{
|
||||
isStillSelected = true;
|
||||
menuFromSelected = rowData.SubMenu;
|
||||
textselected = itemData.ColumnText;
|
||||
subMenu = rowData.SubMenu;
|
||||
textSelected = itemData.ColumnText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -427,8 +424,7 @@ namespace SystemTrayMenu.Handler
|
|||
(key == Key.F4 && modifiers == ModifierKeys.Alt))
|
||||
{
|
||||
RowDeselected?.Invoke(iRowBefore, dgvBefore);
|
||||
iMenuKey = 0;
|
||||
iRowKey = -1;
|
||||
ResetSelectedByKey();
|
||||
toClear = true;
|
||||
ClosePressed?.Invoke();
|
||||
|
||||
|
@ -478,9 +474,10 @@ namespace SystemTrayMenu.Handler
|
|||
{
|
||||
if (iMenuKey > 0)
|
||||
{
|
||||
if (menus[iMenuKey - 1] != null)
|
||||
int iMenuKeyPrev = iMenuKey - 1;
|
||||
if (menus[iMenuKeyPrev] != null)
|
||||
{
|
||||
iMenuKey -= 1;
|
||||
iMenuKey = iMenuKeyPrev;
|
||||
iRowKey = -1;
|
||||
menu = menus[iMenuKey];
|
||||
dgv = menu?.GetDataGridView();
|
||||
|
@ -499,25 +496,23 @@ namespace SystemTrayMenu.Handler
|
|||
else
|
||||
{
|
||||
RowDeselected?.Invoke(iRowBefore, dgvBefore);
|
||||
iMenuKey = 0;
|
||||
iRowKey = -1;
|
||||
ResetSelectedByKey();
|
||||
toClear = true;
|
||||
Cleared?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
private void SelectNextMenu(int iRowBefore, ref ListView? dgv, ListView dgvBefore, Menu? menuFromSelected, bool isStillSelected, ref bool toClear)
|
||||
{
|
||||
int iMenuKeyNext = iMenuKey + 1;
|
||||
if (isStillSelected)
|
||||
{
|
||||
int iMenuKeyNext = iMenuKey + 1;
|
||||
if (menuFromSelected != null &&
|
||||
menuFromSelected == menus[iMenuKeyNext])
|
||||
{
|
||||
dgv = menuFromSelected?.GetDataGridView();
|
||||
if (dgv != null && dgv.Items.Count > 0)
|
||||
{
|
||||
iMenuKey += 1;
|
||||
iMenuKey = iMenuKeyNext;
|
||||
iRowKey = -1;
|
||||
if (SelectMatched(dgv, iRowKey) ||
|
||||
SelectMatched(dgv, 0))
|
||||
|
@ -598,7 +593,7 @@ namespace SystemTrayMenu.Handler
|
|||
dgv != null &&
|
||||
dgv.Items.Count > i)
|
||||
{
|
||||
Menu.ListViewItemData itemData = (Menu.ListViewItemData)dgv.Items[i];
|
||||
ListViewItemData itemData = (ListViewItemData)dgv.Items[i];
|
||||
RowData rowData = itemData.data;
|
||||
if (itemData.ColumnText.StartsWith(keyInput, true, CultureInfo.InvariantCulture))
|
||||
{
|
||||
|
@ -643,4 +638,4 @@ namespace SystemTrayMenu.Handler
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,9 @@ namespace SystemTrayMenu.Helpers
|
|||
public class JoystickHelper : IDisposable
|
||||
{
|
||||
private readonly Dispatcher dispatchter = Dispatcher.CurrentDispatcher;
|
||||
#if COLLECTUSAGES
|
||||
private readonly System.Collections.Generic.Dictionary<Usage, int> usagesCollection = new();
|
||||
#endif
|
||||
private readonly System.Timers.Timer pollGamepad = new();
|
||||
private HidDevice? connectedDevice;
|
||||
|
||||
|
@ -102,6 +105,7 @@ namespace SystemTrayMenu.Helpers
|
|||
|
||||
try
|
||||
{
|
||||
bool wasPressedButton1 = false;
|
||||
bool wasPressedButton2 = false;
|
||||
bool wasPressedPadUp = false;
|
||||
bool wasPressedPadDown = false;
|
||||
|
@ -121,16 +125,31 @@ namespace SystemTrayMenu.Helpers
|
|||
var dataValue = inputParser.GetValue(index);
|
||||
foreach (uint usage in dataValue.Usages)
|
||||
{
|
||||
int logicalValue = dataValue.GetLogicalValue();
|
||||
#if COLLECTUSAGES
|
||||
if (!usagesCollection.ContainsKey((Usage)usage))
|
||||
{
|
||||
usagesCollection.Add((Usage)usage, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
usagesCollection[(Usage)usage]++;
|
||||
}
|
||||
#endif
|
||||
|
||||
// See page 14 and referenced subsections, e.g. Generic Desktop Controls
|
||||
// https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
|
||||
switch ((Usage)usage)
|
||||
{
|
||||
case Usage.Button2: wasPressedButton2 = dataValue.GetLogicalValue() != 0; break;
|
||||
case Usage.GenericDesktopDPadUp: wasPressedPadUp = dataValue.GetLogicalValue() != 0; break;
|
||||
case Usage.GenericDesktopDPadDown: wasPressedPadDown = dataValue.GetLogicalValue() != 0; break;
|
||||
case Usage.GenericDesktopDPadLeft: wasPressedPadLeft = dataValue.GetLogicalValue() != 0; break;
|
||||
case Usage.GenericDesktopDPadRight: wasPressedPadRight = dataValue.GetLogicalValue() != 0; break;
|
||||
case Usage.Button1: wasPressedButton1 = logicalValue != 0; break;
|
||||
case Usage.Button2: wasPressedButton2 = logicalValue != 0; break;
|
||||
case Usage.GenericDesktopDPadUp: wasPressedPadUp = logicalValue != 0; break;
|
||||
case Usage.GenericDesktopDPadDown: wasPressedPadDown = logicalValue != 0; break;
|
||||
case Usage.GenericDesktopDPadLeft: wasPressedPadLeft = logicalValue != 0; break;
|
||||
case Usage.GenericDesktopDPadRight: wasPressedPadRight = logicalValue != 0; break;
|
||||
case Usage.GenericDesktopHatSwitch:
|
||||
{
|
||||
switch (dataValue.GetLogicalValue())
|
||||
switch (logicalValue)
|
||||
{
|
||||
case 0: wasPressedPadUp = true; break;
|
||||
case 2: wasPressedPadRight = true; break;
|
||||
|
@ -150,7 +169,7 @@ namespace SystemTrayMenu.Helpers
|
|||
{
|
||||
firstPoll = false;
|
||||
}
|
||||
else if (wasPressedButton2)
|
||||
else if (wasPressedButton1 || wasPressedButton2)
|
||||
{
|
||||
dispatchter.Invoke(() => KeyPressed?.Invoke(Key.Enter, ModifierKeys.None));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue