diff --git a/src/BizHawk.Client.Common/config/Binding.cs b/src/BizHawk.Client.Common/config/Binding.cs index 3544eee051..be24a04dbb 100644 --- a/src/BizHawk.Client.Common/config/Binding.cs +++ b/src/BizHawk.Client.Common/config/Binding.cs @@ -1,272 +1,209 @@ -using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -// TODO [LARP] - It's pointless and annoying to store such a big structure filled with static information -// use this instead -// public class UserBinding -// { -// public string DisplayName; -// public string Bindings; -// } -// ...also. We should consider using something other than DisplayName for keying, maybe make a KEYNAME distinct from displayname. -// displayname is OK for now though. +using BizHawk.Common; +using BizHawk.Common.CollectionExtensions; + namespace BizHawk.Client.Common { - public class Binding + public class HotkeyInfo { - public string DisplayName { get; set; } - public string Bindings { get; set; } - public string DefaultBinding { get; set; } - public string TabGroup { get; set; } - public string ToolTip { get; set; } - public int Ordinal { get; set; } - } + public static readonly IReadOnlyDictionary AllHotkeys; - [Newtonsoft.Json.JsonObject] - public class BindingCollection : IEnumerable - { - public List Bindings { get; } + public static readonly IReadOnlyList Groupings; - [Newtonsoft.Json.JsonConstructor] - public BindingCollection(List bindings) + static HotkeyInfo() { - Bindings = bindings; + var dict = new Dictionary(); + var i = 0; +#if true + void Bind(string tabGroup, string displayName, string defaultBinding = "", string toolTip = "") + => dict.Add(displayName, new(tabGroup: tabGroup, i++, displayName: displayName, toolTip: toolTip, defaultBinding: defaultBinding)); +#else //TODO switch to a sort key more resilient than the DisplayName, like with this example (need to update `Config.HotkeyBindings["A Hotkey"]` usages across codebase; please switch it to a `Config.GetHotkeyBindings` method so it can return "") + void Bind(string tabGroup, string displayName, string defaultBinding = "", string toolTip = "") + => dict.Add($"{tabGroup}__{displayName}".Replace(" ", ""), new(tabGroup: tabGroup, i++, displayName: displayName, toolTip: toolTip, defaultBinding: defaultBinding)); +#endif + + Bind("General", "Frame Advance", "F"); + Bind("General", "Rewind", "Shift+R"); + Bind("General", "Pause", "Pause"); + Bind("General", "Fast Forward", "Tab"); + Bind("General", "Turbo", "Shift+Tab"); + Bind("General", "Toggle Throttle"); + Bind("General", "Soft Reset"); + Bind("General", "Hard Reset"); + Bind("General", "Autofire"); + Bind("General", "Autohold"); + Bind("General", "Clear Autohold"); + Bind("General", "Screenshot", "F12"); + Bind("General", "Full Screen", "Alt+Enter"); + Bind("General", "Open ROM", "Ctrl+O"); + Bind("General", "Close ROM", "Ctrl+W"); + Bind("General", "Load Last ROM"); + Bind("General", "Flush SaveRAM", "Ctrl+S"); + Bind("General", "Display FPS"); + Bind("General", "Frame Counter"); + Bind("General", "Lag Counter"); + Bind("General", "Input Display"); + Bind("General", "Toggle BG Input"); + Bind("General", "Toggle Menu"); + Bind("General", "Volume Up"); + Bind("General", "Volume Down"); + Bind("General", "Record A/V"); + Bind("General", "Stop A/V"); + Bind("General", "Larger Window", "Alt+Up"); + Bind("General", "Smaller Window", "Alt+Down"); + Bind("General", "Increase Speed", "Equals"); + Bind("General", "Decrease Speed", "Minus"); + Bind("General", "Reset Speed", "Shift+Equals"); + Bind("General", "Reboot Core", "Ctrl+R"); + Bind("General", "Toggle Sound"); + Bind("General", "Exit Program"); + Bind("General", "Screen Raw to Clipboard", "Ctrl+C"); + Bind("General", "Screen Client to Clipboard", "Ctrl+Shift+C"); + Bind("General", "Toggle Skip Lag Frame"); + Bind("General", "Toggle Key Priority"); + Bind("General", "Frame Inch"); + + Bind("Save States", "Save State 1", "Shift+F1"); + Bind("Save States", "Save State 2", "Shift+F2"); + Bind("Save States", "Save State 3", "Shift+F3"); + Bind("Save States", "Save State 4", "Shift+F4"); + Bind("Save States", "Save State 5", "Shift+F5"); + Bind("Save States", "Save State 6", "Shift+F6"); + Bind("Save States", "Save State 7", "Shift+F7"); + Bind("Save States", "Save State 8", "Shift+F8"); + Bind("Save States", "Save State 9", "Shift+F9"); + Bind("Save States", "Save State 0", "Shift+F10"); + Bind("Save States", "Load State 1", "F1"); + Bind("Save States", "Load State 2", "F2"); + Bind("Save States", "Load State 3", "F3"); + Bind("Save States", "Load State 4", "F4"); + Bind("Save States", "Load State 5", "F5"); + Bind("Save States", "Load State 6", "F6"); + Bind("Save States", "Load State 7", "F7"); + Bind("Save States", "Load State 8", "F8"); + Bind("Save States", "Load State 9", "F9"); + Bind("Save States", "Load State 0", "F10"); + Bind("Save States", "Select State 1", "Number1"); + Bind("Save States", "Select State 2", "Number2"); + Bind("Save States", "Select State 3", "Number3"); + Bind("Save States", "Select State 4", "Number4"); + Bind("Save States", "Select State 5", "Number5"); + Bind("Save States", "Select State 6", "Number6"); + Bind("Save States", "Select State 7", "Number7"); + Bind("Save States", "Select State 8", "Number8"); + Bind("Save States", "Select State 9", "Number9"); + Bind("Save States", "Select State 0", "Number0"); + Bind("Save States", "Quick Load", "P"); + Bind("Save States", "Quick Save", "I"); + Bind("Save States", "Save Named State"); + Bind("Save States", "Load Named State"); + Bind("Save States", "Previous Slot"); + Bind("Save States", "Next Slot"); + + Bind("Movie", "Toggle read-only", "Q"); + Bind("Movie", "Play Movie"); + Bind("Movie", "Record Movie"); + Bind("Movie", "Stop Movie"); + Bind("Movie", "Play from beginning"); + Bind("Movie", "Save Movie"); + + Bind("Tools", "RAM Watch"); + Bind("Tools", "RAM Search"); + Bind("Tools", "Hex Editor"); + Bind("Tools", "Trace Logger"); + Bind("Tools", "Lua Console"); + Bind("Tools", "Cheats"); + Bind("Tools", "TAStudio"); + Bind("Tools", "ToolBox", "Shift+T"); + Bind("Tools", "Virtual Pad"); + + Bind("RAM Search", "New Search"); + Bind("RAM Search", "Do Search"); + Bind("RAM Search", "Previous Compare To"); + Bind("RAM Search", "Next Compare To"); + Bind("RAM Search", "Previous Operator"); + Bind("RAM Search", "Next Operator"); + + Bind("TAStudio", "Add Branch", "Alt+Insert"); + Bind("TAStudio", "Delete Branch", "Alt+Delete"); + Bind("TAStudio", "Show Cursor"); + Bind("TAStudio", "Toggle Follow Cursor", "Shift+F"); + Bind("TAStudio", "Toggle Auto-Restore", "Shift+R"); + Bind("TAStudio", "Toggle Turbo Seek", "Shift+S"); + Bind("TAStudio", "Undo", "Ctrl+Z"); // TODO: these are getting not unique enough + Bind("TAStudio", "Redo", "Ctrl+Y"); + Bind("TAStudio", "Sel. bet. Markers", "Ctrl+A"); + Bind("TAStudio", "Select All", "Ctrl+Shift+A"); + Bind("TAStudio", "Reselect Clip.", "Ctrl+B"); + Bind("TAStudio", "Clear Frames", "Delete"); + Bind("TAStudio", "Insert Frame", "Insert"); + Bind("TAStudio", "Insert # Frames", "Ctrl+Shift+Insert"); + Bind("TAStudio", "Delete Frames", "Ctrl+Delete"); + Bind("TAStudio", "Clone Frames", "Ctrl+Insert"); + Bind("TAStudio", "Analog Increment", "Up"); + Bind("TAStudio", "Analog Decrement", "Down"); + Bind("TAStudio", "Analog Incr. by 10", "Shift+Up"); + Bind("TAStudio", "Analog Decr. by 10", "Shift+Down"); + Bind("TAStudio", "Analog Maximum", "Right"); + Bind("TAStudio", "Analog Minimum", "Left"); + + Bind("SNES", "Toggle BG 1"); + Bind("SNES", "Toggle BG 2"); + Bind("SNES", "Toggle BG 3"); + Bind("SNES", "Toggle BG 4"); + Bind("SNES", "Toggle OBJ 1"); + Bind("SNES", "Toggle OBJ 2"); + Bind("SNES", "Toggle OBJ 3"); + Bind("SNES", "Toggle OBJ 4"); + + Bind("GB", "GB Toggle BG"); + Bind("GB", "GB Toggle Obj"); + Bind("GB", "GB Toggle Window"); + + Bind("Analog", "Y Up Small", toolTip: "For Virtual Pad"); + Bind("Analog", "Y Up Large", toolTip: "For Virtual Pad"); + Bind("Analog", "Y Down Small", toolTip: "For Virtual Pad"); + Bind("Analog", "Y Down Large", toolTip: "For Virtual Pad"); + Bind("Analog", "X Up Small", toolTip: "For Virtual Pad"); + Bind("Analog", "X Up Large", toolTip: "For Virtual Pad"); + Bind("Analog", "X Down Small", toolTip: "For Virtual Pad"); + Bind("Analog", "X Down Large", toolTip: "For Virtual Pad"); + + Bind("Tools", "Toggle All Cheats"); + + Bind("NDS", "Next Screen Layout"); + Bind("NDS", "Previous Screen Layout"); + Bind("NDS", "Screen Rotate"); + + AllHotkeys = dict; + Groupings = dict.Values.Select(static info => info.TabGroup).Distinct().ToList(); } - public BindingCollection() + public static void ResolveWithDefaults(IDictionary dict) { - Bindings = new List(); - Bindings.AddRange(DefaultValues); + foreach (var (k, v) in AllHotkeys) if (!dict.ContainsKey(k)) dict[k] = v.DefaultBinding; // add missing + dict.RemoveAll(static kvp => !AllHotkeys.ContainsKey(kvp.Key)); // remove extraneous } - public void Add(Binding b) + public readonly string DefaultBinding; + + public readonly string DisplayName; + + public readonly int Ordinal; + + public readonly string TabGroup; + + public readonly string ToolTip; + + private HotkeyInfo(string tabGroup, int ordinal, string displayName, string toolTip, string defaultBinding) { - Bindings.Add(b); - } - - public IEnumerator GetEnumerator() - { - return Bindings.GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public Binding this[string index] => Bindings.FirstOrDefault(b => b.DisplayName == index) ?? new Binding(); - - private static Binding Bind(string tabGroup, string displayName, string bindings = "", string defaultBinding = "", string toolTip = "") - { - if (string.IsNullOrEmpty(defaultBinding)) - { - defaultBinding = bindings; - } - - return new Binding { DisplayName = displayName, Bindings = bindings, TabGroup = tabGroup, DefaultBinding = defaultBinding, ToolTip = toolTip }; - } - - public void ResolveWithDefaults() - { - // TODO - this method is potentially disastrously O(N^2) slow due to linear search nested in loop - - // Add missing entries - foreach (Binding defaultBinding in DefaultValues) - { - var binding = Bindings.FirstOrDefault(b => b.DisplayName == defaultBinding.DisplayName); - if (binding == null) - { - Bindings.Add(defaultBinding); - } - else - { - // patch entries with updated settings (necessary because of TODO LARP - binding.DisplayName = defaultBinding.DisplayName; - binding.DefaultBinding = defaultBinding.DefaultBinding; - binding.TabGroup = defaultBinding.TabGroup; - binding.ToolTip = defaultBinding.ToolTip; - binding.Ordinal = defaultBinding.Ordinal; - } - } - - // Remove entries that no longer exist in defaults - Bindings.RemoveAll(entry => DefaultValues.All(b => b.DisplayName != entry.DisplayName)); - } - - private static List _defaultValues; - - public static List DefaultValues - { - get - { - if (_defaultValues == null) - { - _defaultValues = new List - { - Bind("General", "Frame Advance", "F"), - Bind("General", "Rewind", "Shift+R"), - Bind("General", "Pause", "Pause"), - Bind("General", "Fast Forward", "Tab"), - Bind("General", "Turbo", "Shift+Tab"), - Bind("General", "Toggle Throttle"), - Bind("General", "Soft Reset"), - Bind("General", "Hard Reset"), - Bind("General", "Autofire"), - Bind("General", "Autohold"), - Bind("General", "Clear Autohold"), - Bind("General", "Screenshot", "F12"), - Bind("General", "Full Screen", "Alt+Enter"), - Bind("General", "Open ROM", "Ctrl+O"), - Bind("General", "Close ROM", "Ctrl+W"), - Bind("General", "Load Last ROM"), - Bind("General", "Flush SaveRAM", "Ctrl+S"), - Bind("General", "Display FPS"), - Bind("General", "Frame Counter"), - Bind("General", "Lag Counter"), - Bind("General", "Input Display"), - Bind("General", "Toggle BG Input"), - Bind("General", "Toggle Menu"), - Bind("General", "Volume Up"), - Bind("General", "Volume Down"), - Bind("General", "Record A/V"), - Bind("General", "Stop A/V"), - Bind("General", "Larger Window", "Alt+Up"), - Bind("General", "Smaller Window", "Alt+Down"), - Bind("General", "Increase Speed", "Equals"), - Bind("General", "Decrease Speed", "Minus"), - Bind("General", "Reset Speed", "Shift+Equals"), - Bind("General", "Reboot Core", "Ctrl+R"), - Bind("General", "Toggle Sound"), - Bind("General", "Exit Program"), - Bind("General", "Screen Raw to Clipboard", "Ctrl+C"), - Bind("General", "Screen Client to Clipboard", "Ctrl+Shift+C"), - Bind("General", "Toggle Skip Lag Frame"), - Bind("General", "Toggle Key Priority"), - Bind("General", "Frame Inch"), - - Bind("Save States", "Save State 1", "Shift+F1"), - Bind("Save States", "Save State 2", "Shift+F2"), - Bind("Save States", "Save State 3", "Shift+F3"), - Bind("Save States", "Save State 4", "Shift+F4"), - Bind("Save States", "Save State 5", "Shift+F5"), - Bind("Save States", "Save State 6", "Shift+F6"), - Bind("Save States", "Save State 7", "Shift+F7"), - Bind("Save States", "Save State 8", "Shift+F8"), - Bind("Save States", "Save State 9", "Shift+F9"), - Bind("Save States", "Save State 0", "Shift+F10"), - Bind("Save States", "Load State 1", "F1"), - Bind("Save States", "Load State 2", "F2"), - Bind("Save States", "Load State 3", "F3"), - Bind("Save States", "Load State 4", "F4"), - Bind("Save States", "Load State 5", "F5"), - Bind("Save States", "Load State 6", "F6"), - Bind("Save States", "Load State 7", "F7"), - Bind("Save States", "Load State 8", "F8"), - Bind("Save States", "Load State 9", "F9"), - Bind("Save States", "Load State 0", "F10"), - Bind("Save States", "Select State 1", "Number1"), - Bind("Save States", "Select State 2", "Number2"), - Bind("Save States", "Select State 3", "Number3"), - Bind("Save States", "Select State 4", "Number4"), - Bind("Save States", "Select State 5", "Number5"), - Bind("Save States", "Select State 6", "Number6"), - Bind("Save States", "Select State 7", "Number7"), - Bind("Save States", "Select State 8", "Number8"), - Bind("Save States", "Select State 9", "Number9"), - Bind("Save States", "Select State 0", "Number0"), - Bind("Save States", "Quick Load", "P"), - Bind("Save States", "Quick Save", "I"), - Bind("Save States", "Save Named State"), - Bind("Save States", "Load Named State"), - Bind("Save States", "Previous Slot"), - Bind("Save States", "Next Slot"), - - Bind("Movie", "Toggle read-only", "Q"), - Bind("Movie", "Play Movie"), - Bind("Movie", "Record Movie"), - Bind("Movie", "Stop Movie"), - Bind("Movie", "Play from beginning"), - Bind("Movie", "Save Movie"), - - Bind("Tools", "RAM Watch"), - Bind("Tools", "RAM Search"), - Bind("Tools", "Hex Editor"), - Bind("Tools", "Trace Logger"), - Bind("Tools", "Lua Console"), - Bind("Tools", "Cheats"), - Bind("Tools", "TAStudio"), - Bind("Tools", "ToolBox", "Shift+T"), - Bind("Tools", "Virtual Pad"), - - Bind("RAM Search", "New Search"), - Bind("RAM Search", "Do Search"), - Bind("RAM Search", "Previous Compare To"), - Bind("RAM Search", "Next Compare To"), - Bind("RAM Search", "Previous Operator"), - Bind("RAM Search", "Next Operator"), - - Bind("TAStudio", "Add Branch", "Alt+Insert"), - Bind("TAStudio", "Delete Branch", "Alt+Delete"), - Bind("TAStudio", "Show Cursor"), - Bind("TAStudio", "Toggle Follow Cursor", "Shift+F"), - Bind("TAStudio", "Toggle Auto-Restore", "Shift+R"), - Bind("TAStudio", "Toggle Turbo Seek", "Shift+S"), - Bind("TAStudio", "Undo", "Ctrl+Z"), // TODO: these are getting not unique enough - Bind("TAStudio", "Redo", "Ctrl+Y"), - Bind("TAStudio", "Sel. bet. Markers", "Ctrl+A"), - Bind("TAStudio", "Select All", "Ctrl+Shift+A"), - Bind("TAStudio", "Reselect Clip.", "Ctrl+B"), - Bind("TAStudio", "Clear Frames", "Delete"), - Bind("TAStudio", "Insert Frame", "Insert"), - Bind("TAStudio", "Insert # Frames", "Ctrl+Shift+Insert"), - Bind("TAStudio", "Delete Frames", "Ctrl+Delete"), - Bind("TAStudio", "Clone Frames", "Ctrl+Insert"), - Bind("TAStudio", "Analog Increment", "Up"), - Bind("TAStudio", "Analog Decrement", "Down"), - Bind("TAStudio", "Analog Incr. by 10", "Shift+Up"), - Bind("TAStudio", "Analog Decr. by 10", "Shift+Down"), - Bind("TAStudio", "Analog Maximum", "Right"), - Bind("TAStudio", "Analog Minimum", "Left"), - - Bind("SNES", "Toggle BG 1"), - Bind("SNES", "Toggle BG 2"), - Bind("SNES", "Toggle BG 3"), - Bind("SNES", "Toggle BG 4"), - Bind("SNES", "Toggle OBJ 1"), - Bind("SNES", "Toggle OBJ 2"), - Bind("SNES", "Toggle OBJ 3"), - Bind("SNES", "Toggle OBJ 4"), - - Bind("GB", "GB Toggle BG"), - Bind("GB", "GB Toggle Obj"), - Bind("GB", "GB Toggle Window"), - - Bind("Analog", "Y Up Small", toolTip: "For Virtual Pad"), - Bind("Analog", "Y Up Large", toolTip: "For Virtual Pad"), - Bind("Analog", "Y Down Small", toolTip: "For Virtual Pad"), - Bind("Analog", "Y Down Large", toolTip: "For Virtual Pad"), - Bind("Analog", "X Up Small", toolTip: "For Virtual Pad"), - Bind("Analog", "X Up Large", toolTip: "For Virtual Pad"), - Bind("Analog", "X Down Small", toolTip: "For Virtual Pad"), - Bind("Analog", "X Down Large", toolTip: "For Virtual Pad"), - - Bind("Tools", "Toggle All Cheats"), - - Bind("NDS", "Next Screen Layout"), - Bind("NDS", "Previous Screen Layout"), - Bind("NDS", "Screen Rotate"), - }; - - // set ordinals based on order in list - for (int i = 0; i < _defaultValues.Count; i++) - { - _defaultValues[i].Ordinal = i; - } - } // if (s_DefaultValues == null) - - return _defaultValues; - } + DefaultBinding = defaultBinding; + DisplayName = displayName; + Ordinal = ordinal; + TabGroup = tabGroup; + ToolTip = toolTip; } } } diff --git a/src/BizHawk.Client.Common/config/Config.cs b/src/BizHawk.Client.Common/config/Config.cs index 57b66a0fe4..034dbd7d69 100644 --- a/src/BizHawk.Client.Common/config/Config.cs +++ b/src/BizHawk.Client.Common/config/Config.cs @@ -62,7 +62,7 @@ namespace BizHawk.Client.Common public void ResolveDefaults() { PathEntries.ResolveWithDefaults(); - HotkeyBindings.ResolveWithDefaults(); + HotkeyInfo.ResolveWithDefaults(HotkeyBindings); PathEntries.RefreshTempPath(); } @@ -300,7 +300,7 @@ namespace BizHawk.Client.Common public bool PlayMovieIncludeSubDir { get; set; } public bool PlayMovieMatchHash { get; set; } = true; - public BindingCollection HotkeyBindings { get; set; } = new BindingCollection(); + public Dictionary HotkeyBindings { get; set; } = new(); // Analog Hotkey values public int AnalogLargeChange { get; set; } = 10; diff --git a/src/BizHawk.Client.Common/config/ConfigExtensions.cs b/src/BizHawk.Client.Common/config/ConfigExtensions.cs index 65da878185..7c633d7473 100644 --- a/src/BizHawk.Client.Common/config/ConfigExtensions.cs +++ b/src/BizHawk.Client.Common/config/ConfigExtensions.cs @@ -145,7 +145,7 @@ namespace BizHawk.Client.Common { string ReplMulti(string multiBind) => multiBind.TransformFields(',', bind => bind.TransformFields('+', button => replMap.TryGetValue(button, out var repl) ? repl : button)); - foreach (var hotkeyBinding in config.HotkeyBindings.Bindings) hotkeyBinding.Bindings = ReplMulti(hotkeyBinding.Bindings); + foreach (var k in config.HotkeyBindings.Keys.ToList()) config.HotkeyBindings[k] = ReplMulti(config.HotkeyBindings[k]); foreach (var bindCollection in new[] { config.AllTrollers, config.AllTrollersAutoFire }) // analog and feedback binds can only be bound to (host) gamepads, not keyboard { foreach (var k in bindCollection.Keys.ToArray()) bindCollection[k] = bindCollection[k].ToDictionary(static kvp => kvp.Key, kvp => ReplMulti(kvp.Value)); diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index 4da4c14c14..bad3ae087b 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -43,8 +43,8 @@ namespace BizHawk.Client.EmuHawk SaveSlotSubMenu.Enabled = Emulator.HasSavestates(); - OpenRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Open ROM"].Bindings; - CloseRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Close ROM"].Bindings; + OpenRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Open ROM"]; + CloseRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Close ROM"]; MovieSubMenu.Enabled = CloseRomMenuItem.Enabled = @@ -85,32 +85,32 @@ namespace BizHawk.Client.EmuHawk SetSlotFont(SaveState9MenuItem, 9); SetSlotFont(SaveState0MenuItem, 0); - SaveState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 1"].Bindings; - SaveState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 2"].Bindings; - SaveState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 3"].Bindings; - SaveState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 4"].Bindings; - SaveState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 5"].Bindings; - SaveState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 6"].Bindings; - SaveState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 7"].Bindings; - SaveState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 8"].Bindings; - SaveState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 9"].Bindings; - SaveState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 0"].Bindings; - SaveNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Named State"].Bindings; + SaveState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 1"]; + SaveState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 2"]; + SaveState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 3"]; + SaveState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 4"]; + SaveState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 5"]; + SaveState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 6"]; + SaveState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 7"]; + SaveState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 8"]; + SaveState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 9"]; + SaveState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 0"]; + SaveNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Named State"]; } private void LoadStateSubMenu_DropDownOpened(object sender, EventArgs e) { - LoadState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 1"].Bindings; - LoadState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 2"].Bindings; - LoadState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 3"].Bindings; - LoadState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 4"].Bindings; - LoadState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 5"].Bindings; - LoadState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 6"].Bindings; - LoadState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 7"].Bindings; - LoadState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 8"].Bindings; - LoadState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 9"].Bindings; - LoadState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 0"].Bindings; - LoadNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load Named State"].Bindings; + LoadState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 1"]; + LoadState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 2"]; + LoadState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 3"]; + LoadState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 4"]; + LoadState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 5"]; + LoadState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 6"]; + LoadState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 7"]; + LoadState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 8"]; + LoadState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 9"]; + LoadState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 0"]; + LoadNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load Named State"]; AutoloadLastSlotMenuItem.Checked = Config.AutoLoadLastSaveSlot; @@ -128,20 +128,20 @@ namespace BizHawk.Client.EmuHawk private void SaveSlotSubMenu_DropDownOpened(object sender, EventArgs e) { - SelectSlot1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 1"].Bindings; - SelectSlot2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 2"].Bindings; - SelectSlot3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 3"].Bindings; - SelectSlot4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 4"].Bindings; - SelectSlot5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 5"].Bindings; - SelectSlot6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 6"].Bindings; - SelectSlot7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 7"].Bindings; - SelectSlot8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 8"].Bindings; - SelectSlot9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 9"].Bindings; - SelectSlot0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 0"].Bindings; - PreviousSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Previous Slot"].Bindings; - NextSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Next Slot"].Bindings; - SaveToCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Save"].Bindings; - LoadCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Load"].Bindings; + SelectSlot1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 1"]; + SelectSlot2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 2"]; + SelectSlot3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 3"]; + SelectSlot4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 4"]; + SelectSlot5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 5"]; + SelectSlot6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 6"]; + SelectSlot7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 7"]; + SelectSlot8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 8"]; + SelectSlot9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 9"]; + SelectSlot0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 0"]; + PreviousSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Previous Slot"]; + NextSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Next Slot"]; + SaveToCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Save"]; + LoadCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Load"]; SelectSlot1MenuItem.Checked = Config.SaveSlot == 1; SelectSlot2MenuItem.Checked = Config.SaveSlot == 2; @@ -157,7 +157,7 @@ namespace BizHawk.Client.EmuHawk private void SaveRamSubMenu_DropDownOpened(object sender, EventArgs e) { - FlushSaveRAMMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Flush SaveRAM"].Bindings; + FlushSaveRAMMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Flush SaveRAM"]; } private void MovieSubMenu_DropDownOpened(object sender, EventArgs e) @@ -172,12 +172,12 @@ namespace BizHawk.Client.EmuHawk AutomaticallyBackupMoviesMenuItem.Checked = Config.Movies.EnableBackupMovies; FullMovieLoadstatesMenuItem.Checked = Config.Movies.VBAStyleMovieLoadState; - ReadonlyMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Toggle read-only"].Bindings; - RecordMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record Movie"].Bindings; - PlayMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play Movie"].Bindings; - StopMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop Movie"].Bindings; - PlayFromBeginningMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play from beginning"].Bindings; - SaveMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Movie"].Bindings; + ReadonlyMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Toggle read-only"]; + RecordMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record Movie"]; + PlayMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play Movie"]; + StopMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop Movie"]; + PlayFromBeginningMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play from beginning"]; + SaveMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Movie"]; PlayMovieMenuItem.Enabled = ImportMoviesMenuItem.Enabled @@ -215,8 +215,8 @@ namespace BizHawk.Client.EmuHawk private void AVSubMenu_DropDownOpened(object sender, EventArgs e) { - ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record A/V"].Bindings; - StopAVIMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop A/V"].Bindings; + ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record A/V"]; + StopAVIMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop A/V"]; CaptureOSDMenuItem.Checked = Config.AviCaptureOsd; CaptureLuaMenuItem.Checked = Config.AviCaptureLua || Config.AviCaptureOsd; // or with osd is for better compatibility with old config files @@ -237,9 +237,9 @@ namespace BizHawk.Client.EmuHawk private void ScreenshotSubMenu_DropDownOpening(object sender, EventArgs e) { ScreenshotCaptureOSDMenuItem1.Checked = Config.ScreenshotCaptureOsd; - ScreenshotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screenshot"].Bindings; - ScreenshotClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ScreenshotToClipboard"].Bindings; - ScreenshotClientClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screen Client to Clipboard"].Bindings; + ScreenshotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screenshot"]; + ScreenshotClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ScreenshotToClipboard"]; + ScreenshotClientClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screen Client to Clipboard"]; } private void OpenRomMenuItem_Click(object sender, EventArgs e) @@ -619,10 +619,10 @@ namespace BizHawk.Client.EmuHawk HardResetMenuItem.Enabled = Emulator.ControllerDefinition.BoolButtons.Contains("Power") && !MovieSession.Movie.IsPlaying(); - PauseMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Pause"].Bindings; - RebootCoreMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reboot Core"].Bindings; - SoftResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Soft Reset"].Bindings; - HardResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hard Reset"].Bindings; + PauseMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Pause"]; + RebootCoreMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reboot Core"]; + SoftResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Soft Reset"]; + HardResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hard Reset"]; } private void PauseMenuItem_Click(object sender, EventArgs e) @@ -660,11 +660,11 @@ namespace BizHawk.Client.EmuHawk DisplayRerecordCountMenuItem.Checked = Config.DisplayRerecordCount; DisplaySubtitlesMenuItem.Checked = Config.DisplaySubtitles; - DisplayFPSMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Display FPS"].Bindings; - DisplayFrameCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Frame Counter"].Bindings; - DisplayLagCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lag Counter"].Bindings; - DisplayInputMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Input Display"].Bindings; - SwitchToFullscreenMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Full Screen"].Bindings; + DisplayFPSMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Display FPS"]; + DisplayFrameCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Frame Counter"]; + DisplayLagCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lag Counter"]; + DisplayInputMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Input Display"]; + SwitchToFullscreenMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Full Screen"]; DisplayStatusBarMenuItem.Checked = Config.DispChromeStatusBarWindowed; DisplayLogWindowMenuItem.Checked = Tools.IsLoaded(); @@ -1143,15 +1143,15 @@ namespace BizHawk.Client.EmuHawk private void ToolsSubMenu_DropDownOpened(object sender, EventArgs e) { - ToolBoxMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ToolBox"].Bindings; - RamWatchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Watch"].Bindings; - RamSearchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Search"].Bindings; - HexEditorMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hex Editor"].Bindings; - LuaConsoleMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lua Console"].Bindings; - CheatsMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Cheats"].Bindings; - TAStudioMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["TAStudio"].Bindings; - VirtualPadMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Virtual Pad"].Bindings; - TraceLoggerMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Trace Logger"].Bindings; + ToolBoxMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ToolBox"]; + RamWatchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Watch"]; + RamSearchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Search"]; + HexEditorMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hex Editor"]; + LuaConsoleMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lua Console"]; + CheatsMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Cheats"]; + TAStudioMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["TAStudio"]; + VirtualPadMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Virtual Pad"]; + TraceLoggerMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Trace Logger"]; TraceLoggerMenuItem.Enabled = Tools.IsAvailable(); CodeDataLoggerMenuItem.Enabled = Tools.IsAvailable(); diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index dd12a91bc9..d7d24c71df 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -2093,13 +2093,10 @@ namespace BizHawk.Client.EmuHawk { Controller controls = new(new ControllerDefinition("Emulator Frontend Controls") { - BoolButtons = Config.HotkeyBindings.Select(static x => x.DisplayName).ToList(), + BoolButtons = Config.HotkeyBindings.Keys.ToList(), }.MakeImmutable()); - foreach (var b in Config.HotkeyBindings) - { - controls.BindMulti(b.DisplayName, b.Bindings); - } + foreach (var (k, v) in Config.HotkeyBindings) controls.BindMulti(k, v); InputManager.ClientControls = controls; InputManager.ControllerInputCoalescer = new(); // ctor initialises values for host haptics diff --git a/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs b/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs index e49c4ec041..44a57e5055 100644 --- a/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Windows.Forms; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -35,7 +36,7 @@ namespace BizHawk.Client.EmuHawk private void HotkeyConfig_Load(object sender, EventArgs e) { var source = new AutoCompleteStringCollection(); - source.AddRange(_config.HotkeyBindings.Select(x => x.DisplayName).ToArray()); + source.AddRange(HotkeyInfo.AllHotkeys.Keys.ToArray()); SearchBox.AutoCompleteCustomSource = source; SearchBox.AutoCompleteSource = AutoCompleteSource.CustomSource; @@ -70,12 +71,7 @@ namespace BizHawk.Client.EmuHawk private void Save() { _config.HotkeyConfigAutoTab = AutoTabCheckBox.Checked; - - foreach (var w in InputWidgets) - { - var b = _config.HotkeyBindings.First(x => x.DisplayName == w.WidgetName); - b.Bindings = w.Bindings; - } + foreach (var w in InputWidgets) _config.HotkeyBindings[w.WidgetName] = w.Bindings; } private IEnumerable InputWidgets => @@ -86,13 +82,11 @@ namespace BizHawk.Client.EmuHawk HotkeyTabControl.SuspendLayout(); HotkeyTabControl.TabPages.Clear(); - // Buckets - var tabs = _config.HotkeyBindings.Select(x => x.TabGroup).Distinct(); - - foreach (var tab in tabs) + foreach (var tab in HotkeyInfo.Groupings) { var tb = new TabPage { Name = tab, Text = tab }; - var bindings = _config.HotkeyBindings.Where(n => n.TabGroup == tab).OrderBy(n => n.Ordinal).ThenBy(n => n.DisplayName); + var bindings = HotkeyInfo.AllHotkeys.Where(kvp => kvp.Value.TabGroup == tab) + .OrderBy(static kvp => kvp.Value.Ordinal).ThenBy(static kvp => kvp.Value.DisplayName); int x = UIHelper.ScaleX(6); int y = UIHelper.ScaleY(14); int iwOffsetX = UIHelper.ScaleX(110); @@ -101,7 +95,7 @@ namespace BizHawk.Client.EmuHawk tb.SuspendLayout(); - foreach (var b in bindings) + foreach (var (k, b) in bindings) { var l = new Label { @@ -115,13 +109,13 @@ namespace BizHawk.Client.EmuHawk Location = new Point(x + iwOffsetX, y + iwOffsetY), AutoTab = AutoTabCheckBox.Checked, Width = iwWidth, - WidgetName = b.DisplayName + WidgetName = k }; w.SetupTooltip(toolTip1, b.ToolTip); toolTip1.SetToolTip(l, b.ToolTip); - w.Bindings = b.Bindings; + w.Bindings = _config.HotkeyBindings[k]; tb.Controls.Add(l); tb.Controls.Add(w); @@ -153,14 +147,7 @@ namespace BizHawk.Client.EmuHawk private void Defaults() { - foreach (var w in InputWidgets) - { - var b = _config.HotkeyBindings.FirstOrDefault(x => x.DisplayName == w.WidgetName); - if (b != null) - { - w.Bindings = b.DefaultBinding; - } - } + foreach (var w in InputWidgets) w.Bindings = HotkeyInfo.AllHotkeys[w.WidgetName].DefaultBinding; } private void ClearAll(bool currentTabOnly) @@ -210,12 +197,12 @@ namespace BizHawk.Client.EmuHawk { if (e.IsPressed(Keys.Enter) || e.IsPressed(Keys.Tab)) { - var b = _config.HotkeyBindings.FirstOrDefault(x => string.Compare(x.DisplayName, SearchBox.Text, true) == 0); + var k = HotkeyInfo.AllHotkeys.FirstOrDefault(kvp => string.Compare(kvp.Value.DisplayName, SearchBox.Text, true) is 0).Key; // Found - if (b != null) + if (k is not null) { - var w = InputWidgets.FirstOrDefault(x => x.WidgetName == b.DisplayName); + var w = InputWidgets.FirstOrDefault(x => x.WidgetName == k); if (w != null) { HotkeyTabControl.SelectTab((TabPage)w.Parent); diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index 9c5823a714..6c619e420a 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -528,9 +528,8 @@ namespace BizHawk.Client.EmuHawk public void NonExistentBranchMessage(int slot) { - string binding = Tastudio.Config.HotkeyBindings.First(x => x.DisplayName == "Add Branch").Bindings; Tastudio.MainForm.AddOnScreenMessage($"Branch {slot + 1} does not exist"); - Tastudio.MainForm.AddOnScreenMessage($"Use {binding} to add branches"); + Tastudio.MainForm.AddOnScreenMessage($"Use {Tastudio.Config!.HotkeyBindings["Add Branch"]} to add branches"); } public void UpdateValues() diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index ae293f0f0c..5c2050b00c 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -349,16 +349,16 @@ namespace BizHawk.Client.EmuHawk StateHistoryIntegrityCheckMenuItem.Visible = VersionInfo.DeveloperBuild; - UndoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Undo"].Bindings; - RedoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Redo"].Bindings; - SelectBetweenMarkersMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select between Markers"].Bindings; - SelectAllMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select All"].Bindings; - ReselectClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reselect Clip."].Bindings; - ClearFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"].Bindings; - InsertFrameMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"].Bindings; - InsertNumFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"].Bindings; - DeleteFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"].Bindings; - CloneFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"].Bindings; + UndoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Undo"]; + RedoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Redo"]; + SelectBetweenMarkersMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select between Markers"]; + SelectAllMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select All"]; + ReselectClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reselect Clip."]; + ClearFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"]; + InsertFrameMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"]; + InsertNumFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"]; + DeleteFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"]; + CloneFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"]; } private void UndoMenuItem_Click(object sender, EventArgs e) @@ -1418,12 +1418,12 @@ namespace BizHawk.Client.EmuHawk CancelSeekContextMenuItem.Enabled = MainForm.PauseOnFrame.HasValue; BranchContextMenuItem.Visible = TasView.CurrentCell?.RowIndex == Emulator.Frame; - SelectBetweenMarkersContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Sel. bet. Markers"].Bindings; - InsertNumFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"].Bindings; - ClearContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"].Bindings; - InsertFrameContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"].Bindings; - DeleteFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"].Bindings; - CloneContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"].Bindings; + SelectBetweenMarkersContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Sel. bet. Markers"]; + InsertNumFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"]; + ClearContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"]; + InsertFrameContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"]; + DeleteFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"]; + CloneContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"]; } private void CancelSeekContextMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Tests/Client.Common/config/SerializationStabilityTests.cs b/src/BizHawk.Tests/Client.Common/config/SerializationStabilityTests.cs index da22188142..75dc95e026 100644 --- a/src/BizHawk.Tests/Client.Common/config/SerializationStabilityTests.cs +++ b/src/BizHawk.Tests/Client.Common/config/SerializationStabilityTests.cs @@ -14,8 +14,6 @@ namespace BizHawk.Tests.Client.Common.config [TestClass] public sealed class SerializationStabilityTests { - private const string BINDING_SER = @"{""DisplayName"":""Frame Advance"",""Bindings"":""F"",""DefaultBinding"":""F"",""TabGroup"":""General"",""ToolTip"":"""",""Ordinal"":0}"; - private const string PATHENTRY_SER = @"{""Type"":""Movies"",""Path"":""./Movies"",""System"":""Global_NULL""}"; private const string RECENT_SER = @"{""recentlist"":[],""MAX_RECENT_FILES"":8,""AutoLoad"":false,""Frozen"":false}"; @@ -43,8 +41,6 @@ namespace BizHawk.Tests.Client.Common.config private static readonly IReadOnlyDictionary KnownGoodFromBizHawk = new Dictionary { [typeof(AnalogBind)] = @"{""Value"":""X1 LeftThumbX Axis"",""Mult"":0.8,""Deadzone"":0.1}", - [typeof(Binding)] = BINDING_SER, - [typeof(BindingCollection)] = $@"{{""Bindings"":[{BINDING_SER}]}}", [typeof(CheatConfig)] = $@"{{""DisableOnLoad"":false,""LoadFileByGame"":true,""AutoSaveOnClose"":true,""Recent"":{RECENT_SER}}}", [typeof(FeedbackBind)] = @"{""Channels"":""Left+Right"",""GamepadPrefix"":""X1 "",""Prescale"":1.0}", [typeof(MessagePosition)] = @"{""X"":0,""Y"":0,""Anchor"":0}",