diff --git a/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs b/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs index 050562f019..659f0762bc 100644 --- a/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs @@ -13,7 +13,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk { - public partial class GenVDPViewer : Form, IToolForm + public partial class GenVDPViewer : Form, IToolFormAutoConfig { [RequiredService] private GPGX Emu { get; set; } diff --git a/BizHawk.Client.EmuHawk/tools/IToolForm.cs b/BizHawk.Client.EmuHawk/tools/IToolForm.cs index cb781f6deb..3bb17e78f9 100644 --- a/BizHawk.Client.EmuHawk/tools/IToolForm.cs +++ b/BizHawk.Client.EmuHawk/tools/IToolForm.cs @@ -46,4 +46,11 @@ namespace BizHawk.Client.EmuHawk bool IsDisposed { get; } bool IsHandleCreated { get; } } + + /// + /// toolform that takes automatic common configuration infrastructure + /// + public interface IToolFormAutoConfig : IToolForm + { + } } diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 98dad50829..44af9243ef 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -69,7 +69,8 @@ namespace BizHawk.Client.EmuHawk Global.Config.CommonToolSettings[toolType.ToString()] = settings; } - AttachSettingHooks(newTool, settings); + if (newTool is IToolFormAutoConfig) + AttachSettingHooks(newTool as IToolFormAutoConfig, settings); newTool.Restart(); newTool.Show(); @@ -93,23 +94,45 @@ namespace BizHawk.Client.EmuHawk } } - private static void AttachSettingHooks(IToolForm tool, ToolDialogSettings settings) + private static void AttachSettingHooks(IToolFormAutoConfig tool, ToolDialogSettings settings) { - if (!(tool is GenVDPViewer)) - return; var form = (Form)tool; - var menu = new ToolStripMenuItem("Tool Settings (FIX ME)"); + ToolStripItemCollection dest = null; + foreach (Control c in form.Controls) + { + if (c is MenuStrip) + { + var ms = c as MenuStrip; + foreach (ToolStripMenuItem submenu in ms.Items) + { + if (submenu.Text.Contains("Settings")) + { + dest = submenu.DropDownItems; + break; + } + } + if (dest == null) + { + var submenu = new ToolStripMenuItem("&Settings"); + ms.Items.Add(submenu); + dest = submenu.DropDownItems; + } + break; + } + } + if (dest == null) + throw new InvalidOperationException("IToolFormAutoConfig must have menu to bind to!"); - menu.DropDownItems.Add("Save Window Position"); - menu.DropDownItems.Add("Stay on Top"); - menu.DropDownItems.Add("Float from Parent"); - menu.DropDownItems.Add("Auto Load"); + dest.Add("Save Window Position"); + dest.Add("Stay on Top"); + dest.Add("Float from Parent"); + dest.Add("Auto Load"); - (menu.DropDownItems[0] as ToolStripMenuItem).Checked = settings.SaveWindowPosition; - (menu.DropDownItems[1] as ToolStripMenuItem).Checked = settings.TopMost; - (menu.DropDownItems[2] as ToolStripMenuItem).Checked = settings.FloatingWindow; - (menu.DropDownItems[3] as ToolStripMenuItem).Checked = settings.AutoLoad; + (dest[0] as ToolStripMenuItem).Checked = settings.SaveWindowPosition; + (dest[1] as ToolStripMenuItem).Checked = settings.TopMost; + (dest[2] as ToolStripMenuItem).Checked = settings.FloatingWindow; + (dest[3] as ToolStripMenuItem).Checked = settings.AutoLoad; form.TopMost = settings.TopMost; @@ -133,44 +156,33 @@ namespace BizHawk.Client.EmuHawk settings.Height = form.Bottom - form.Top; }; - menu.DropDownItems[0].Click += (o, e) => + dest[0].Click += (o, e) => { bool val = !(o as ToolStripMenuItem).Checked; settings.SaveWindowPosition = val; (o as ToolStripMenuItem).Checked = val; }; - menu.DropDownItems[1].Click += (o, e) => + dest[1].Click += (o, e) => { bool val = !(o as ToolStripMenuItem).Checked; settings.TopMost = val; (o as ToolStripMenuItem).Checked = val; form.TopMost = val; }; - menu.DropDownItems[2].Click += (o, e) => + dest[2].Click += (o, e) => { bool val = !(o as ToolStripMenuItem).Checked; settings.FloatingWindow = val; (o as ToolStripMenuItem).Checked = val; form.Owner = val ? null : GlobalWin.MainForm; }; - menu.DropDownItems[3].Click += (o, e) => + dest[3].Click += (o, e) => { bool val = !(o as ToolStripMenuItem).Checked; settings.AutoLoad = val; (o as ToolStripMenuItem).Checked = val; }; - foreach (Control c in form.Controls) - { - if (c is MenuStrip) - { - var ms = c as MenuStrip; - ms.Items.Add(menu); - return; - } - } - // got here without finding a menustrip, means there is no menustrip. - // what to do? could put in a context menu or something? }