aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Helpers
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Ava/UI/Helpers')
-rw-r--r--src/Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs28
-rw-r--r--src/Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs157
2 files changed, 39 insertions, 146 deletions
diff --git a/src/Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs b/src/Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs
index 54e0918a..7e8ba734 100644
--- a/src/Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs
+++ b/src/Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs
@@ -1,8 +1,11 @@
+using Avalonia.Controls;
using Avalonia.Controls.Primitives;
+using Avalonia.LogicalTree;
using Avalonia.Threading;
using Ryujinx.Input;
using Ryujinx.Input.Assigner;
using System;
+using System.Linq;
using System.Threading.Tasks;
namespace Ryujinx.Ava.UI.Helpers
@@ -12,12 +15,12 @@ namespace Ryujinx.Ava.UI.Helpers
internal class ButtonAssignedEventArgs : EventArgs
{
public ToggleButton Button { get; }
- public ButtonValue? ButtonValue { get; }
+ public bool IsAssigned { get; }
- public ButtonAssignedEventArgs(ToggleButton button, ButtonValue? buttonValue)
+ public ButtonAssignedEventArgs(ToggleButton button, bool isAssigned)
{
Button = button;
- ButtonValue = buttonValue;
+ IsAssigned = isAssigned;
}
}
@@ -75,11 +78,15 @@ namespace Ryujinx.Ava.UI.Helpers
await Dispatcher.UIThread.InvokeAsync(() =>
{
- ButtonValue? pressedButton = assigner.GetPressedButton();
+ string pressedButton = assigner.GetPressedButton();
if (_shouldUnbind)
{
- pressedButton = null;
+ SetButtonText(ToggledButton, "Unbound");
+ }
+ else if (pressedButton != "")
+ {
+ SetButtonText(ToggledButton, pressedButton);
}
_shouldUnbind = false;
@@ -87,8 +94,17 @@ namespace Ryujinx.Ava.UI.Helpers
ToggledButton.IsChecked = false;
- ButtonAssigned?.Invoke(this, new ButtonAssignedEventArgs(ToggledButton, pressedButton));
+ ButtonAssigned?.Invoke(this, new ButtonAssignedEventArgs(ToggledButton, pressedButton != null));
+
+ static void SetButtonText(ToggleButton button, string text)
+ {
+ ILogical textBlock = button.GetLogicalDescendants().First(x => x is TextBlock);
+ if (textBlock != null && textBlock is TextBlock block)
+ {
+ block.Text = text;
+ }
+ }
});
}
diff --git a/src/Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs b/src/Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs
index 1c4aa7b2..028ed6bf 100644
--- a/src/Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs
+++ b/src/Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs
@@ -1,9 +1,7 @@
using Avalonia.Data.Converters;
-using Ryujinx.Ava.Common.Locale;
using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.Configuration.Hid.Controller;
using System;
-using System.Collections.Generic;
using System.Globalization;
namespace Ryujinx.Ava.UI.Helpers
@@ -12,158 +10,37 @@ namespace Ryujinx.Ava.UI.Helpers
{
public static KeyValueConverter Instance = new();
- private static readonly Dictionary<Key, LocaleKeys> _keysMap = new()
- {
- { Key.Unknown, LocaleKeys.KeyUnknown },
- { Key.ShiftLeft, LocaleKeys.KeyShiftLeft },
- { Key.ShiftRight, LocaleKeys.KeyShiftRight },
- { Key.ControlLeft, LocaleKeys.KeyControlLeft },
- { Key.ControlRight, LocaleKeys.KeyControlRight },
- { Key.AltLeft, OperatingSystem.IsMacOS() ? LocaleKeys.KeyOptLeft : LocaleKeys.KeyAltLeft },
- { Key.AltRight, OperatingSystem.IsMacOS() ? LocaleKeys.KeyOptRight : LocaleKeys.KeyAltRight },
- { Key.WinLeft, OperatingSystem.IsMacOS() ? LocaleKeys.KeyCmdLeft : LocaleKeys.KeyWinLeft },
- { Key.WinRight, OperatingSystem.IsMacOS() ? LocaleKeys.KeyCmdRight : LocaleKeys.KeyWinRight },
- { Key.Up, LocaleKeys.KeyUp },
- { Key.Down, LocaleKeys.KeyDown },
- { Key.Left, LocaleKeys.KeyLeft },
- { Key.Right, LocaleKeys.KeyRight },
- { Key.Enter, LocaleKeys.KeyEnter },
- { Key.Escape, LocaleKeys.KeyEscape },
- { Key.Space, LocaleKeys.KeySpace },
- { Key.Tab, LocaleKeys.KeyTab },
- { Key.BackSpace, LocaleKeys.KeyBackSpace },
- { Key.Insert, LocaleKeys.KeyInsert },
- { Key.Delete, LocaleKeys.KeyDelete },
- { Key.PageUp, LocaleKeys.KeyPageUp },
- { Key.PageDown, LocaleKeys.KeyPageDown },
- { Key.Home, LocaleKeys.KeyHome },
- { Key.End, LocaleKeys.KeyEnd },
- { Key.CapsLock, LocaleKeys.KeyCapsLock },
- { Key.ScrollLock, LocaleKeys.KeyScrollLock },
- { Key.PrintScreen, LocaleKeys.KeyPrintScreen },
- { Key.Pause, LocaleKeys.KeyPause },
- { Key.NumLock, LocaleKeys.KeyNumLock },
- { Key.Clear, LocaleKeys.KeyClear },
- { Key.Keypad0, LocaleKeys.KeyKeypad0 },
- { Key.Keypad1, LocaleKeys.KeyKeypad1 },
- { Key.Keypad2, LocaleKeys.KeyKeypad2 },
- { Key.Keypad3, LocaleKeys.KeyKeypad3 },
- { Key.Keypad4, LocaleKeys.KeyKeypad4 },
- { Key.Keypad5, LocaleKeys.KeyKeypad5 },
- { Key.Keypad6, LocaleKeys.KeyKeypad6 },
- { Key.Keypad7, LocaleKeys.KeyKeypad7 },
- { Key.Keypad8, LocaleKeys.KeyKeypad8 },
- { Key.Keypad9, LocaleKeys.KeyKeypad9 },
- { Key.KeypadDivide, LocaleKeys.KeyKeypadDivide },
- { Key.KeypadMultiply, LocaleKeys.KeyKeypadMultiply },
- { Key.KeypadSubtract, LocaleKeys.KeyKeypadSubtract },
- { Key.KeypadAdd, LocaleKeys.KeyKeypadAdd },
- { Key.KeypadDecimal, LocaleKeys.KeyKeypadDecimal },
- { Key.KeypadEnter, LocaleKeys.KeyKeypadEnter },
- { Key.Number0, LocaleKeys.KeyNumber0 },
- { Key.Number1, LocaleKeys.KeyNumber1 },
- { Key.Number2, LocaleKeys.KeyNumber2 },
- { Key.Number3, LocaleKeys.KeyNumber3 },
- { Key.Number4, LocaleKeys.KeyNumber4 },
- { Key.Number5, LocaleKeys.KeyNumber5 },
- { Key.Number6, LocaleKeys.KeyNumber6 },
- { Key.Number7, LocaleKeys.KeyNumber7 },
- { Key.Number8, LocaleKeys.KeyNumber8 },
- { Key.Number9, LocaleKeys.KeyNumber9 },
- { Key.Tilde, LocaleKeys.KeyTilde },
- { Key.Grave, LocaleKeys.KeyGrave },
- { Key.Minus, LocaleKeys.KeyMinus },
- { Key.Plus, LocaleKeys.KeyPlus },
- { Key.BracketLeft, LocaleKeys.KeyBracketLeft },
- { Key.BracketRight, LocaleKeys.KeyBracketRight },
- { Key.Semicolon, LocaleKeys.KeySemicolon },
- { Key.Quote, LocaleKeys.KeyQuote },
- { Key.Comma, LocaleKeys.KeyComma },
- { Key.Period, LocaleKeys.KeyPeriod },
- { Key.Slash, LocaleKeys.KeySlash },
- { Key.BackSlash, LocaleKeys.KeyBackSlash },
- { Key.Unbound, LocaleKeys.KeyUnbound },
- };
-
- private static readonly Dictionary<GamepadInputId, LocaleKeys> _gamepadInputIdMap = new()
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- { GamepadInputId.LeftStick, LocaleKeys.GamepadLeftStick },
- { GamepadInputId.RightStick, LocaleKeys.GamepadRightStick },
- { GamepadInputId.LeftShoulder, LocaleKeys.GamepadLeftShoulder },
- { GamepadInputId.RightShoulder, LocaleKeys.GamepadRightShoulder },
- { GamepadInputId.LeftTrigger, LocaleKeys.GamepadLeftTrigger },
- { GamepadInputId.RightTrigger, LocaleKeys.GamepadRightTrigger },
- { GamepadInputId.DpadUp, LocaleKeys.GamepadDpadUp},
- { GamepadInputId.DpadDown, LocaleKeys.GamepadDpadDown},
- { GamepadInputId.DpadLeft, LocaleKeys.GamepadDpadLeft},
- { GamepadInputId.DpadRight, LocaleKeys.GamepadDpadRight},
- { GamepadInputId.Minus, LocaleKeys.GamepadMinus},
- { GamepadInputId.Plus, LocaleKeys.GamepadPlus},
- { GamepadInputId.Guide, LocaleKeys.GamepadGuide},
- { GamepadInputId.Misc1, LocaleKeys.GamepadMisc1},
- { GamepadInputId.Paddle1, LocaleKeys.GamepadPaddle1},
- { GamepadInputId.Paddle2, LocaleKeys.GamepadPaddle2},
- { GamepadInputId.Paddle3, LocaleKeys.GamepadPaddle3},
- { GamepadInputId.Paddle4, LocaleKeys.GamepadPaddle4},
- { GamepadInputId.Touchpad, LocaleKeys.GamepadTouchpad},
- { GamepadInputId.SingleLeftTrigger0, LocaleKeys.GamepadSingleLeftTrigger0},
- { GamepadInputId.SingleRightTrigger0, LocaleKeys.GamepadSingleRightTrigger0},
- { GamepadInputId.SingleLeftTrigger1, LocaleKeys.GamepadSingleLeftTrigger1},
- { GamepadInputId.SingleRightTrigger1, LocaleKeys.GamepadSingleRightTrigger1},
- { GamepadInputId.Unbound, LocaleKeys.KeyUnbound},
- };
+ if (value == null)
+ {
+ return null;
+ }
- private static readonly Dictionary<StickInputId, LocaleKeys> _stickInputIdMap = new()
- {
- { StickInputId.Left, LocaleKeys.StickLeft},
- { StickInputId.Right, LocaleKeys.StickRight},
- { StickInputId.Unbound, LocaleKeys.KeyUnbound},
- };
+ return value.ToString();
+ }
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
- string keyString = "";
+ object key = null;
- if (value is Key key)
+ if (value != null)
{
- if (_keysMap.TryGetValue(key, out LocaleKeys localeKey))
+ if (targetType == typeof(Key))
{
- keyString = LocaleManager.Instance[localeKey];
+ key = Enum.Parse<Key>(value.ToString());
}
- else
+ else if (targetType == typeof(GamepadInputId))
{
- keyString = key.ToString();
+ key = Enum.Parse<GamepadInputId>(value.ToString());
}
- }
- else if (value is GamepadInputId gamepadInputId)
- {
- if (_gamepadInputIdMap.TryGetValue(gamepadInputId, out LocaleKeys localeKey))
+ else if (targetType == typeof(StickInputId))
{
- keyString = LocaleManager.Instance[localeKey];
- }
- else
- {
- keyString = gamepadInputId.ToString();
+ key = Enum.Parse<StickInputId>(value.ToString());
}
}
- else if (value is StickInputId stickInputId)
- {
- if (_stickInputIdMap.TryGetValue(stickInputId, out LocaleKeys localeKey))
- {
- keyString = LocaleManager.Instance[localeKey];
- }
- else
- {
- keyString = stickInputId.ToString();
- }
- }
-
- return keyString;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotSupportedException();
+ return key;
}
}
}