Pass global ToolManager to IToolApi impl via ctor

This commit is contained in:
YoshiRulz 2020-11-26 22:53:27 +10:00
parent 794c4b5b84
commit 2c086702c9
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
4 changed files with 25 additions and 15 deletions

View File

@ -26,6 +26,8 @@ namespace BizHawk.Client.EmuHawk
private static readonly Type[] _ctorParamTypesC = { typeof(Action<string>), typeof(IMainFormForApi), typeof(DisplayManager), typeof(InputManager), typeof(Config), typeof(IEmulator), typeof(IGameInfo) };
private static readonly Type[] _ctorParamTypesTools = { typeof(ToolManager) };
/// <remarks>TODO do we need to keep references to these because of GC weirdness? --yoshi</remarks>
private static ApiContainer? _container;
@ -37,6 +39,7 @@ namespace BizHawk.Client.EmuHawk
IMainFormForApi mainForm,
DisplayManager displayManager,
InputManager inputManager,
ToolManager toolManager,
Config config,
IEmulator emulator,
IGameInfo game)
@ -48,6 +51,7 @@ namespace BizHawk.Client.EmuHawk
t.GetConstructor(_ctorParamTypesC)?.Invoke(new object[] { logCallback, mainForm, displayManager, inputManager, config, emulator, game })
?? t.GetConstructor(_ctorParamTypesB)?.Invoke(new object[] { logCallback, mainForm })
?? t.GetConstructor(_ctorParamTypesA)?.Invoke(new object[] { logCallback })
?? t.GetConstructor(_ctorParamTypesTools)?.Invoke(new object[] { toolManager })
?? Activator.CreateInstance(t)
)
);
@ -60,11 +64,12 @@ namespace BizHawk.Client.EmuHawk
IMainFormForApi mainForm,
DisplayManager displayManager,
InputManager inputManager,
ToolManager toolManager,
Config config,
IEmulator emulator,
IGameInfo game)
{
_container = Register(serviceProvider, Console.WriteLine, mainForm, displayManager, inputManager, config, emulator, game);
_container = Register(serviceProvider, Console.WriteLine, mainForm, displayManager, inputManager, toolManager, config, emulator, game);
ClientApi.EmuClient = _container.EmuClient;
return new BasicApiProvider(_container);
}
@ -75,9 +80,10 @@ namespace BizHawk.Client.EmuHawk
IMainFormForApi mainForm,
DisplayManager displayManager,
InputManager inputManager,
ToolManager toolManager,
Config config,
IEmulator emulator,
IGameInfo game
) => _luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, config, emulator, game);
) => _luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, toolManager, config, emulator, game);
}
}

View File

@ -9,13 +9,17 @@ namespace BizHawk.Client.EmuHawk
{
public sealed class ToolApi : IToolApi
{
public IEnumerable<Type> AvailableTools => GlobalWin.Tools.AvailableTools.ToList(); // defensive copy in case ToolManager's implementation changes
private readonly ToolManager _toolManager;
public IEnumerable<Type> AvailableTools => _toolManager.AvailableTools.ToList(); // defensive copy in case ToolManager's implementation changes
public ToolApi(ToolManager toolManager) => _toolManager = toolManager;
public Type GetTool(string name)
{
var toolType = Util.GetTypeByName(name).FirstOrDefault(x => typeof(IToolForm).IsAssignableFrom(x) && !x.IsInterface);
if (toolType != null) GlobalWin.Tools.Load(toolType);
return GlobalWin.Tools.AvailableTools.FirstOrDefault(tool => tool.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
if (toolType != null) _toolManager.Load(toolType);
return _toolManager.AvailableTools.FirstOrDefault(tool => tool.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
}
public object CreateInstance(string name)
@ -24,18 +28,18 @@ namespace BizHawk.Client.EmuHawk
return found != null ? Activator.CreateInstance(found) : null;
}
public void OpenCheats() => GlobalWin.Tools.Load<Cheats>();
public void OpenCheats() => _toolManager.Load<Cheats>();
public void OpenHexEditor() => GlobalWin.Tools.Load<HexEditor>();
public void OpenHexEditor() => _toolManager.Load<HexEditor>();
public void OpenRamWatch() => GlobalWin.Tools.LoadRamWatch(loadDialog: true);
public void OpenRamWatch() => _toolManager.LoadRamWatch(loadDialog: true);
public void OpenRamSearch() => GlobalWin.Tools.Load<RamSearch>();
public void OpenRamSearch() => _toolManager.Load<RamSearch>();
public void OpenTasStudio() => GlobalWin.Tools.Load<TAStudio>();
public void OpenTasStudio() => _toolManager.Load<TAStudio>();
public void OpenToolBox() => GlobalWin.Tools.Load<ToolBox>();
public void OpenToolBox() => _toolManager.Load<ToolBox>();
public void OpenTraceLogger() => GlobalWin.Tools.Load<TraceLogger>();
public void OpenTraceLogger() => _toolManager.Load<TraceLogger>();
}
}

View File

@ -49,7 +49,7 @@ namespace BizHawk.Client.EmuHawk
LuaWait = new AutoResetEvent(false);
Docs.Clear();
var apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, mainForm, displayManager, inputManager, config, emulator, game);
var apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, mainForm, displayManager, inputManager, GlobalWin.Tools, config, emulator, game);
// Register lua libraries
foreach (var lib in Client.Common.ReflectionCache.Types.Concat(EmuHawk.ReflectionCache.Types)

View File

@ -54,7 +54,7 @@ namespace BizHawk.Client.EmuHawk
_emulator = emulator;
_movieSession = movieSession;
_game = game;
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, GlobalWin.DisplayManager, _inputManager, _config, _emulator, _game);
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, GlobalWin.DisplayManager, _inputManager, this, _config, _emulator, _game);
}
/// <summary>
@ -505,7 +505,7 @@ namespace BizHawk.Client.EmuHawk
{
_emulator = emulator;
_game = game;
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, GlobalWin.DisplayManager, _inputManager, _config, _emulator, _game);
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, GlobalWin.DisplayManager, _inputManager, this, _config, _emulator, _game);
// If Cheat tool is loaded, restarting will restart the list too anyway
if (!Has<Cheats>())
{