Resolve TODO re: frontend hotkey config
breaks config backcompat
This commit is contained in:
parent
335be13fd8
commit
ca71bb2faf
src
BizHawk.Client.Common/config
BizHawk.Client.EmuHawk
BizHawk.Tests/Client.Common/config
|
@ -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<string, HotkeyInfo> AllHotkeys;
|
||||
|
||||
[Newtonsoft.Json.JsonObject]
|
||||
public class BindingCollection : IEnumerable<Binding>
|
||||
{
|
||||
public List<Binding> Bindings { get; }
|
||||
public static readonly IReadOnlyList<string> Groupings;
|
||||
|
||||
[Newtonsoft.Json.JsonConstructor]
|
||||
public BindingCollection(List<Binding> bindings)
|
||||
static HotkeyInfo()
|
||||
{
|
||||
Bindings = bindings;
|
||||
var dict = new Dictionary<string, HotkeyInfo>();
|
||||
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 "<not bound>")
|
||||
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<string, string> dict)
|
||||
{
|
||||
Bindings = new List<Binding>();
|
||||
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<Binding> 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<Binding> _defaultValues;
|
||||
|
||||
public static List<Binding> DefaultValues
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_defaultValues == null)
|
||||
{
|
||||
_defaultValues = new List<Binding>
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<string, string> HotkeyBindings { get; set; } = new();
|
||||
|
||||
// Analog Hotkey values
|
||||
public int AnalogLargeChange { get; set; } = 10;
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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<LogWindow>();
|
||||
|
@ -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<TraceLogger>();
|
||||
CodeDataLoggerMenuItem.Enabled = Tools.IsAvailable<CDL>();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<InputCompositeWidget> 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);
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<Type, string> KnownGoodFromBizHawk = new Dictionary<Type, string>
|
||||
{
|
||||
[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}",
|
||||
|
|
Loading…
Reference in New Issue