diff --git a/src/BizHawk.Client.EmuHawk/AVOut/AVSync.cs b/src/BizHawk.Client.EmuHawk/AVOut/AVSync.cs index 3e6a6e03cf..4b93be4827 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/AVSync.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/AVSync.cs @@ -243,9 +243,9 @@ namespace BizHawk.Client.EmuHawk W.AddSamples(samples); } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { - return W.AcquireVideoCodecToken(dialogController, hwnd, config); + return W.AcquireVideoCodecToken(parent, config); } public void SetMovieParameters(int fpsNum, int fpsDen) diff --git a/src/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs index 966649b54b..516ec2dfc7 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs @@ -261,7 +261,7 @@ namespace BizHawk.Client.EmuHawk /// Acquires a video codec configuration from the user. you may save it for future use, but you must dispose of it when you're done with it. /// returns null if the user canceled the dialog /// - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { var tempParams = new Parameters { @@ -278,7 +278,7 @@ namespace BizHawk.Client.EmuHawk File.Delete(tempfile); tempfile = Path.ChangeExtension(tempfile, "avi"); temp.OpenFile(tempfile, tempParams, null); - var ret = temp.AcquireVideoCodecToken(hwnd.Handle, _currVideoCodecToken); + var ret = temp.AcquireVideoCodecToken(parent.SelfAsHandle.Handle, _currVideoCodecToken); CodecToken token = (CodecToken)ret; config.AviCodecToken = token?.Serialize(); temp.CloseFile(); diff --git a/src/BizHawk.Client.EmuHawk/AVOut/FFmpegDownloaderForm.cs b/src/BizHawk.Client.EmuHawk/AVOut/FFmpegDownloaderForm.cs index 6bd88d69df..ff7ca5bbd9 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/FFmpegDownloaderForm.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/FFmpegDownloaderForm.cs @@ -110,10 +110,10 @@ namespace BizHawk.Client.EmuHawk } } - public static void Run(IDialogController dialogController, IWin32Window hwnd) + public static void Run(IDialogParent parent) { var form = new FFmpegDownloaderForm(); - dialogController.DoWithTempMute(() => form.ShowDialog(hwnd)); + parent.DialogController.DoWithTempMute(() => form.ShowDialog(parent.SelfAsHandle)); } private void btnDownload_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs index 68e2dea4c1..655c63712e 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs @@ -207,17 +207,17 @@ namespace BizHawk.Client.EmuHawk //ffmpeg.StandardInput.BaseStream.Write(b, 0, b.Length); } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { if (new FFmpegService().QueryServiceAvailable()) { - return FFmpegWriterForm.DoFFmpegWriterDlg(hwnd, config); + return FFmpegWriterForm.DoFFmpegWriterDlg(parent.SelfAsHandle, config); } - FFmpegDownloaderForm.Run(dialogController, hwnd); + FFmpegDownloaderForm.Run(parent); if (new FFmpegService().QueryServiceAvailable()) { - return FFmpegWriterForm.DoFFmpegWriterDlg(hwnd, config); + return FFmpegWriterForm.DoFFmpegWriterDlg(parent.SelfAsHandle, config); } return null; diff --git a/src/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs index f4c56738dd..594d4753e6 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs @@ -195,9 +195,9 @@ namespace BizHawk.Client.EmuHawk // ignored } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { - return GifWriterForm.DoTokenForm(hwnd, config); + return GifWriterForm.DoTokenForm(parent.SelfAsHandle, config); } private void CalcDelay() diff --git a/src/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs index 3d178117f5..6059f80fbc 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs @@ -62,9 +62,9 @@ namespace BizHawk.Client.EmuHawk /// obtain a set of recording compression parameters /// return null on user cancel /// - /// hwnd to attach to if the user is shown config dialog + /// parent for if the user is shown config dialog /// codec token, dispose of it when you're done with it - IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config); + IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config); /// /// set framerate to fpsNum/fpsDen (assumed to be unchanging over the life of the stream) diff --git a/src/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs index 4829586afa..943232f125 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs @@ -73,7 +73,7 @@ namespace BizHawk.Client.EmuHawk } } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { return new CodecToken(); } diff --git a/src/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs index 30dfd29ada..6f2ae5d10e 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs @@ -524,12 +524,7 @@ namespace BizHawk.Client.EmuHawk } } - /// - /// obtain a set of recording compression parameters - /// - /// hwnd to attach to if the user is shown config dialog - /// codec token, dispose of it when you're done with it - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { var ret = new CodecToken(); @@ -538,7 +533,7 @@ namespace BizHawk.Client.EmuHawk int c = Math.Min(Math.Max(config.JmdCompression, Deflater.NO_COMPRESSION), Deflater.BEST_COMPRESSION); - if (!JmdForm.DoCompressionDlg(ref t, ref c, 1, 6, Deflater.NO_COMPRESSION, Deflater.BEST_COMPRESSION, hwnd)) + if (!JmdForm.DoCompressionDlg(ref t, ref c, 1, 6, Deflater.NO_COMPRESSION, Deflater.BEST_COMPRESSION, parent.SelfAsHandle)) return null; config.JmdThreads = ret.NumThreads = t; diff --git a/src/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs index 6e2048f0df..7140bb8378 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs @@ -29,7 +29,7 @@ namespace BizHawk.Client.EmuHawk { // ignored } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { return new NutWriterToken(); } diff --git a/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs b/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs index 78682ac6b7..22103f7e29 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs @@ -83,7 +83,7 @@ namespace BizHawk.Client.EmuHawk } } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { return new DummyDisposable(); } diff --git a/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecordingTools.cs b/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecordingTools.cs index 49c4c906fb..d35a4fb5d9 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecordingTools.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/SynclessRecordingTools.cs @@ -10,21 +10,23 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk { - public partial class SynclessRecordingTools : Form + public partial class SynclessRecordingTools : Form, IDialogParent { private readonly List _mFrameInfos = new List(); private readonly Config _config; private readonly IGameInfo _game; - private readonly IDialogController _dialogController; - private string _mSynclessConfigFile; private string _mFramesDirectory; + public IDialogController DialogController { get; } + + public IWin32Window SelfAsHandle => this; + public SynclessRecordingTools(Config config, IGameInfo game, IDialogController dialogController) { _config = config; - _dialogController = dialogController; + DialogController = dialogController; _game = game; InitializeComponent(); } @@ -126,7 +128,7 @@ namespace BizHawk.Client.EmuHawk avw.SetAudioParameters(44100, 2, 16); // hacky avw.SetMovieParameters(60, 1); // hacky avw.SetVideoParameters(width, height); - var token = avw.AcquireVideoCodecToken(_dialogController, this, _config); + var token = avw.AcquireVideoCodecToken(this, _config); avw.SetVideoCodecToken(token); avw.OpenFile(sfd.FileName); foreach (var fi in _mFrameInfos) diff --git a/src/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs b/src/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs index 72df03d872..9be371a0aa 100644 --- a/src/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs +++ b/src/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs @@ -229,7 +229,7 @@ namespace BizHawk.Client.EmuHawk public void Dispose() { } } - public IDisposable AcquireVideoCodecToken(IDialogController dialogController, IWin32Window hwnd, Config config) + public IDisposable AcquireVideoCodecToken(IDialogParent parent, Config config) { // don't care return new WavWriterVToken(); diff --git a/src/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs b/src/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs index b0d37906ab..58d49da574 100644 --- a/src/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs +++ b/src/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs @@ -259,7 +259,7 @@ namespace BizHawk.Client.EmuHawk Clipboard.SetImage(img); } - public static void SaveAsFile(this Bitmap bitmap, IGameInfo game, string suffix, string systemId, PathEntryCollection paths, IDialogController dialogController, IWin32Window owner) + public static void SaveAsFile(this Bitmap bitmap, IGameInfo game, string suffix, string systemId, PathEntryCollection paths, IDialogParent parent) { using var sfd = new SaveFileDialog { @@ -269,7 +269,7 @@ namespace BizHawk.Client.EmuHawk RestoreDirectory = true }; - var result = dialogController.DoWithTempMute(() => sfd.ShowDialog(owner)); + var result = parent.DialogController.DoWithTempMute(() => sfd.ShowDialog(parent.SelfAsHandle)); if (result != DialogResult.OK) { return; diff --git a/src/BizHawk.Client.EmuHawk/IDialogParent.cs b/src/BizHawk.Client.EmuHawk/IDialogParent.cs new file mode 100644 index 0000000000..3ad302069d --- /dev/null +++ b/src/BizHawk.Client.EmuHawk/IDialogParent.cs @@ -0,0 +1,13 @@ +#nullable enable + +using System.Windows.Forms; + +namespace BizHawk.Client.EmuHawk +{ + public interface IDialogParent + { + IDialogController DialogController { get; } + + IWin32Window SelfAsHandle { get; } + } +} diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index e965a033bf..eafa750722 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -471,7 +471,6 @@ namespace BizHawk.Client.EmuHawk Config.PathEntries.MovieAbsolutePath(), "Movie Files", MovieSession.Movie.PreferredExtension, - this, this); if (file != null) diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 2222366935..6127d64212 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -39,7 +39,7 @@ using BizHawk.Emulation.Cores.Consoles.Nintendo.Faust; namespace BizHawk.Client.EmuHawk { - public partial class MainForm : FormBase, IMainFormForApi, IMainFormForConfig, IMainFormForTools + public partial class MainForm : FormBase, IDialogParent, IMainFormForApi, IMainFormForConfig, IMainFormForTools { /// AppliesTo[0] is used as the group label, and Config.PreferredCores[AppliesTo[0]] determines the currently selected option private static readonly IReadOnlyCollection<(string[] AppliesTo, string[] CoreNames)> CoreData = new List<(string[], string[])> { @@ -3221,7 +3221,7 @@ namespace BizHawk.Client.EmuHawk aw.SetDefaultVideoCodecToken(Config); } - var token = aw.AcquireVideoCodecToken(this, this, Config); + var token = aw.AcquireVideoCodecToken(this, Config); if (token == null) { AddOnScreenMessage("A/V capture canceled."); @@ -4491,6 +4491,10 @@ namespace BizHawk.Client.EmuHawk return isRewinding; } + public IDialogController DialogController => this; + + public IWin32Window SelfAsHandle => this; + public DialogResult ShowDialogAsChild(Form dialog) => dialog.ShowDialog(this); public void StartSound() => Sound.StartSound(); diff --git a/src/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs b/src/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs index 1c21761f7b..398d25e427 100644 --- a/src/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs +++ b/src/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs @@ -370,7 +370,6 @@ namespace BizHawk.Client.EmuHawk Config.PathEntries.ToolsAbsolutePath(), "Bot files", "bot", - MainForm, this); if (file != null) diff --git a/src/BizHawk.Client.EmuHawk/tools/CDL.cs b/src/BizHawk.Client.EmuHawk/tools/CDL.cs index f7ab719481..b2fd8343c7 100644 --- a/src/BizHawk.Client.EmuHawk/tools/CDL.cs +++ b/src/BizHawk.Client.EmuHawk/tools/CDL.cs @@ -392,7 +392,6 @@ namespace BizHawk.Client.EmuHawk Config.PathEntries.LogAbsolutePath(), "Code Data Logger Files", "cdl", - MainForm, this); if (file == null) diff --git a/src/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs b/src/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs index 48bdc8907c..8cdf9c79af 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs @@ -29,6 +29,8 @@ namespace BizHawk.Client.EmuHawk private string _sortedColumn; private bool _sortReverse; + public override IWin32Window SelfAsHandle => Owner ?? this; //TODO necessary? --yoshi + protected override string WindowTitleStatic => "Cheats"; public Cheats() @@ -150,8 +152,7 @@ namespace BizHawk.Client.EmuHawk Config.PathEntries.CheatsAbsolutePath(Game.System), "Cheat Files", "cht", - MainForm, - Owner ?? this); + this); return file != null && MainForm.CheatList.SaveFile(file.FullName); } diff --git a/src/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.cs b/src/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.cs index f24eb23d50..5204b3a2e0 100644 --- a/src/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.cs +++ b/src/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.cs @@ -187,7 +187,7 @@ namespace BizHawk.Client.EmuHawk g.Flush(); } - toSave.Bmp.SaveAsFile(Game, "Print", Emulator.SystemId, Config.PathEntries, MainForm, this); + toSave.Bmp.SaveAsFile(Game, "Print", Emulator.SystemId, Config.PathEntries, this); } private void CopyToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs b/src/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs index 797cb20897..6a76e88285 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Genesis/VDPViewer.cs @@ -179,7 +179,7 @@ namespace BizHawk.Client.EmuHawk private void SaveAsFile(Bitmap bitmap, string suffix) { - bitmap.SaveAsFile(Game, suffix, Emu.SystemId, Config.PathEntries, MainForm, this); + bitmap.SaveAsFile(Game, suffix, Emu.SystemId, Config.PathEntries, this); } private void SaveBGAScreenshotToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs b/src/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs index 9ab38fd02b..b25c911068 100644 --- a/src/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs +++ b/src/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs @@ -188,7 +188,7 @@ namespace BizHawk.Client.EmuHawk { NameTableView .ToBitMap() - .SaveAsFile(Game, "Nametables", "NES", Config.PathEntries, MainForm, this); + .SaveAsFile(Game, "Nametables", "NES", Config.PathEntries, this); } private void ScreenshotToClipboardMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs b/src/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs index 8fe8601e25..69a0beaa95 100644 --- a/src/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs +++ b/src/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs @@ -314,7 +314,7 @@ namespace BizHawk.Client.EmuHawk private void Screenshot(Bitmap b, string suffix) { - b.SaveAsFile(Game, suffix, "NES", Config.PathEntries, MainForm, this); + b.SaveAsFile(Game, suffix, "NES", Config.PathEntries, this); } private void SavePaletteScreenshotMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.cs b/src/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.cs index 660ff0d1e2..54864df77a 100644 --- a/src/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.cs +++ b/src/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.cs @@ -204,7 +204,7 @@ namespace BizHawk.Client.EmuHawk private void SaveAsFile(Bitmap bmp, string suffix) { - bmp.SaveAsFile(Game, suffix, Emulator.SystemId, Config.PathEntries, MainForm, this); + bmp.SaveAsFile(Game, suffix, Emulator.SystemId, Config.PathEntries, this); } private void SaveBackgroundScreenshotMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.cs b/src/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.cs index 3bf78b6cdd..c973de6521 100644 --- a/src/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.cs +++ b/src/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.cs @@ -197,7 +197,7 @@ namespace BizHawk.Client.EmuHawk private void SaveAsFile(Bitmap bmp, string suffix) { - bmp.SaveAsFile(Game, suffix, Emulator.SystemId, Config.PathEntries, MainForm, this); + bmp.SaveAsFile(Game, suffix, Emulator.SystemId, Config.PathEntries, this); } private void SaveTilesScreenshotToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 5b9751a8c0..ac8f4854d8 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -826,7 +826,6 @@ namespace BizHawk.Client.EmuHawk Config.PathEntries.MovieAbsolutePath(), "Tas Project Files", "tasproj", - MainForm, this ); diff --git a/src/BizHawk.Client.EmuHawk/tools/ToolFormBase.cs b/src/BizHawk.Client.EmuHawk/tools/ToolFormBase.cs index b91ce5be55..f8b5fb6dd6 100644 --- a/src/BizHawk.Client.EmuHawk/tools/ToolFormBase.cs +++ b/src/BizHawk.Client.EmuHawk/tools/ToolFormBase.cs @@ -8,7 +8,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk { - public class ToolFormBase : FormBase, IToolForm + public class ToolFormBase : FormBase, IToolForm, IDialogParent { public ToolManager Tools { protected get; set; } @@ -22,6 +22,10 @@ namespace BizHawk.Client.EmuHawk public IGameInfo Game { protected get; set; } + public IDialogController DialogController => MainForm; + + public virtual IWin32Window SelfAsHandle => this; + public virtual bool AskSaveChanges() => true; public virtual void Restart() {} @@ -80,7 +84,7 @@ namespace BizHawk.Client.EmuHawk return new FileInfo(ofd.FileName); } - public static FileInfo SaveFileDialog(string currentFile, string path, string fileType, string fileExt, IDialogController dialogController, IWin32Window owner) + public static FileInfo SaveFileDialog(string currentFile, string path, string fileType, string fileExt, IDialogParent parent) { if (!Directory.Exists(path)) { @@ -95,7 +99,7 @@ namespace BizHawk.Client.EmuHawk RestoreDirectory = true }; - var result = dialogController.DoWithTempMute(() => sfd.ShowDialog(owner)); + var result = parent.DialogController.DoWithTempMute(() => sfd.ShowDialog(parent.SelfAsHandle)); if (result != DialogResult.OK) { return null; @@ -111,7 +115,7 @@ namespace BizHawk.Client.EmuHawk public FileInfo GetWatchSaveFileFromUser(string currentFile) { - return SaveFileDialog(currentFile, Config.PathEntries.WatchAbsolutePath(), "Watch Files", "wch", MainForm, this); + return SaveFileDialog(currentFile, Config.PathEntries.WatchAbsolutePath(), "Watch Files", "wch", this); } public void ViewInHexEditor(MemoryDomain domain, IEnumerable addresses, WatchSize size)