MultiHawk - Rom Session loading/saving/etc

This commit is contained in:
adelikat 2015-03-01 22:49:59 +00:00
parent 1e0c65150b
commit a40ce37d50
5 changed files with 241 additions and 25 deletions

View File

@ -61,6 +61,7 @@ namespace BizHawk.Client.Common
public int DispFinalFilter = 0; public int DispFinalFilter = 0;
public string DispUserFilterPath = ""; public string DispUserFilterPath = "";
public RecentFiles RecentRoms = new RecentFiles(10); public RecentFiles RecentRoms = new RecentFiles(10);
public RecentFiles RecentRomSessions = new RecentFiles(8); // Only used for MultiHawk
public bool PauseWhenMenuActivated = true; public bool PauseWhenMenuActivated = true;
public bool SaveWindowPosition = true; public bool SaveWindowPosition = true;
public bool StartPaused = false; public bool StartPaused = false;

View File

@ -175,6 +175,7 @@
<Compile Include="PresentationPanel.cs" /> <Compile Include="PresentationPanel.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="EmulatorWindowList.cs" />
<Compile Include="ScreenSaver.cs" /> <Compile Include="ScreenSaver.cs" />
<Compile Include="Extensions\ToolExtensions.cs" /> <Compile Include="Extensions\ToolExtensions.cs" />
<Compile Include="Throttle.cs" /> <Compile Include="Throttle.cs" />

View File

@ -30,9 +30,18 @@
{ {
this.MainformMenu = new MenuStripEx(); this.MainformMenu = new MenuStripEx();
this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem();
this.NewSessionMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.OpenSessionMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SaveSessionMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SaveSessionAsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.RecentSessionSubMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.OpenRomMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.OpenRomMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.RecentRomSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.RecentRomSubMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.RebootCoresMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.ExitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ExitMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.MovieSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MovieSubMenu = new System.Windows.Forms.ToolStripMenuItem();
@ -52,8 +61,6 @@
this.FameStatusBarLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.FameStatusBarLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.StatusBarMessageLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.StatusBarMessageLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.PlayRecordStatusButton = new System.Windows.Forms.ToolStripDropDownButton(); this.PlayRecordStatusButton = new System.Windows.Forms.ToolStripDropDownButton();
this.RebootCoresMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.MainformMenu.SuspendLayout(); this.MainformMenu.SuspendLayout();
this.WorkspacePanel.SuspendLayout(); this.WorkspacePanel.SuspendLayout();
this.MainStatusBar.SuspendLayout(); this.MainStatusBar.SuspendLayout();
@ -75,6 +82,12 @@
// FileSubMenu // FileSubMenu
// //
this.FileSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.FileSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.NewSessionMenuItem,
this.OpenSessionMenuItem,
this.SaveSessionMenuItem,
this.SaveSessionAsMenuItem,
this.RecentSessionSubMenu,
this.toolStripSeparator7,
this.OpenRomMenuItem, this.OpenRomMenuItem,
this.RecentRomSubMenu, this.RecentRomSubMenu,
this.toolStripSeparator5, this.toolStripSeparator5,
@ -86,11 +99,58 @@
this.FileSubMenu.Text = "&File"; this.FileSubMenu.Text = "&File";
this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened); this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened);
// //
// NewSessionMenuItem
//
this.NewSessionMenuItem.Name = "NewSessionMenuItem";
this.NewSessionMenuItem.Size = new System.Drawing.Size(165, 22);
this.NewSessionMenuItem.Text = "&New Session";
this.NewSessionMenuItem.Click += new System.EventHandler(this.NewSessionMenuItem_Click);
//
// OpenSessionMenuItem
//
this.OpenSessionMenuItem.Name = "OpenSessionMenuItem";
this.OpenSessionMenuItem.Size = new System.Drawing.Size(165, 22);
this.OpenSessionMenuItem.Text = "&Open Session";
this.OpenSessionMenuItem.Click += new System.EventHandler(this.OpenSessionMenuItem_Click);
//
// SaveSessionMenuItem
//
this.SaveSessionMenuItem.Name = "SaveSessionMenuItem";
this.SaveSessionMenuItem.Size = new System.Drawing.Size(165, 22);
this.SaveSessionMenuItem.Text = "&Save Session";
this.SaveSessionMenuItem.Click += new System.EventHandler(this.SaveSessionMenuItem_Click);
//
// SaveSessionAsMenuItem
//
this.SaveSessionAsMenuItem.Name = "SaveSessionAsMenuItem";
this.SaveSessionAsMenuItem.Size = new System.Drawing.Size(165, 22);
this.SaveSessionAsMenuItem.Text = "Save Session &As...";
this.SaveSessionAsMenuItem.Click += new System.EventHandler(this.SaveSessionAsMenuItem_Click);
//
// RecentSessionSubMenu
//
this.RecentSessionSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripSeparator6});
this.RecentSessionSubMenu.Name = "RecentSessionSubMenu";
this.RecentSessionSubMenu.Size = new System.Drawing.Size(165, 22);
this.RecentSessionSubMenu.Text = "Recent Session";
this.RecentSessionSubMenu.DropDownOpened += new System.EventHandler(this.RecentSessionSubMenu_DropDownOpened);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(57, 6);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(162, 6);
//
// OpenRomMenuItem // OpenRomMenuItem
// //
this.OpenRomMenuItem.Image = global::BizHawk.Client.MultiHawk.Properties.Resources.OpenFile; this.OpenRomMenuItem.Image = global::BizHawk.Client.MultiHawk.Properties.Resources.OpenFile;
this.OpenRomMenuItem.Name = "OpenRomMenuItem"; this.OpenRomMenuItem.Name = "OpenRomMenuItem";
this.OpenRomMenuItem.Size = new System.Drawing.Size(152, 22); this.OpenRomMenuItem.Size = new System.Drawing.Size(165, 22);
this.OpenRomMenuItem.Text = "Open ROM"; this.OpenRomMenuItem.Text = "Open ROM";
this.OpenRomMenuItem.Click += new System.EventHandler(this.OpenRomMenuItem_Click); this.OpenRomMenuItem.Click += new System.EventHandler(this.OpenRomMenuItem_Click);
// //
@ -100,24 +160,37 @@
this.toolStripSeparator1}); this.toolStripSeparator1});
this.RecentRomSubMenu.Image = global::BizHawk.Client.MultiHawk.Properties.Resources.Recent; this.RecentRomSubMenu.Image = global::BizHawk.Client.MultiHawk.Properties.Resources.Recent;
this.RecentRomSubMenu.Name = "RecentRomSubMenu"; this.RecentRomSubMenu.Name = "RecentRomSubMenu";
this.RecentRomSubMenu.Size = new System.Drawing.Size(152, 22); this.RecentRomSubMenu.Size = new System.Drawing.Size(165, 22);
this.RecentRomSubMenu.Text = "Recent"; this.RecentRomSubMenu.Text = "Recent";
this.RecentRomSubMenu.DropDownOpened += new System.EventHandler(this.RecentRomSubMenu_DropDownOpened);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(57, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(57, 6);
// //
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(162, 6);
//
// RebootCoresMenuItem
//
this.RebootCoresMenuItem.Name = "RebootCoresMenuItem";
this.RebootCoresMenuItem.Size = new System.Drawing.Size(165, 22);
this.RebootCoresMenuItem.Text = "Reboot Cores";
this.RebootCoresMenuItem.Click += new System.EventHandler(this.RebootCoresMenuItem_Click);
//
// toolStripSeparator3 // toolStripSeparator3
// //
this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(149, 6); this.toolStripSeparator3.Size = new System.Drawing.Size(162, 6);
// //
// ExitMenuItem // ExitMenuItem
// //
this.ExitMenuItem.Name = "ExitMenuItem"; this.ExitMenuItem.Name = "ExitMenuItem";
this.ExitMenuItem.ShortcutKeyDisplayString = "Alt+F4"; this.ExitMenuItem.ShortcutKeyDisplayString = "Alt+F4";
this.ExitMenuItem.Size = new System.Drawing.Size(152, 22); this.ExitMenuItem.Size = new System.Drawing.Size(165, 22);
this.ExitMenuItem.Text = "E&xit"; this.ExitMenuItem.Text = "E&xit";
this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click);
// //
@ -263,18 +336,6 @@
this.PlayRecordStatusButton.Size = new System.Drawing.Size(29, 20); this.PlayRecordStatusButton.Size = new System.Drawing.Size(29, 20);
this.PlayRecordStatusButton.Text = "No movie is active"; this.PlayRecordStatusButton.Text = "No movie is active";
// //
// RebootCoresMenuItem
//
this.RebootCoresMenuItem.Name = "RebootCoresMenuItem";
this.RebootCoresMenuItem.Size = new System.Drawing.Size(152, 22);
this.RebootCoresMenuItem.Text = "Reboot Cores";
this.RebootCoresMenuItem.Click += new System.EventHandler(this.RebootCoresMenuItem_Click);
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(149, 6);
//
// Mainform // Mainform
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -325,6 +386,13 @@
private System.Windows.Forms.ToolStripMenuItem saveConfigToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem saveConfigToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripMenuItem RebootCoresMenuItem; private System.Windows.Forms.ToolStripMenuItem RebootCoresMenuItem;
private System.Windows.Forms.ToolStripMenuItem OpenSessionMenuItem;
private System.Windows.Forms.ToolStripMenuItem SaveSessionMenuItem;
private System.Windows.Forms.ToolStripMenuItem RecentSessionSubMenu;
private System.Windows.Forms.ToolStripMenuItem NewSessionMenuItem;
private System.Windows.Forms.ToolStripMenuItem SaveSessionAsMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
} }
} }

View File

@ -100,13 +100,13 @@ namespace BizHawk.Client.MultiHawk
{ {
SetMainformMovieInfo(); SetMainformMovieInfo();
if (Global.Config.RecentRoms.AutoLoad) if (Global.Config.RecentRomSessions.AutoLoad)
{ {
LoadRomFromRecent(Global.Config.RecentRoms.MostRecent); LoadRomSessionFromRecent(Global.Config.RecentRomSessions.MostRecent);
} }
} }
public List<EmulatorWindow> EmulatorWindows = new List<EmulatorWindow>(); public EmulatorWindowList EmulatorWindows = new EmulatorWindowList();
private bool _exit; private bool _exit;
@ -1005,15 +1005,14 @@ namespace BizHawk.Client.MultiHawk
{ {
if (EmulatorWindows.Any()) if (EmulatorWindows.Any())
{ {
FameStatusBarLabel.Text = EmulatorWindows.First().Emulator.Frame.ToString(); FameStatusBarLabel.Text = EmulatorWindows.Master.Emulator.Frame.ToString();
} }
} }
private void FileSubMenu_DropDownOpened(object sender, EventArgs e) private void FileSubMenu_DropDownOpened(object sender, EventArgs e)
{ {
RecentRomSubMenu.DropDownItems.Clear(); SaveSessionMenuItem.Enabled = !string.IsNullOrWhiteSpace(EmulatorWindows.SessionName);
RecentRomSubMenu.DropDownItems.AddRange( SaveSessionAsMenuItem.Enabled = EmulatorWindows.Any();
Global.Config.RecentRoms.RecentMenu(LoadRomFromRecent, true));
} }
private void LoadRomFromRecent(string rom) private void LoadRomFromRecent(string rom)
@ -1207,5 +1206,149 @@ namespace BizHawk.Client.MultiHawk
AddMessage("Rebooted all cores"); AddMessage("Rebooted all cores");
} }
private void SaveSessionMenuItem_Click(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(EmulatorWindows.SessionName))
{
File.WriteAllText(EmulatorWindows.SessionName, EmulatorWindows.SessionJson);
AddMessage("Session saved.");
}
}
private void SaveSessionAsMenuItem_Click(object sender, EventArgs e)
{
if (EmulatorWindows.Any())
{
var file = GetSaveFileFromUser();
if (file != null)
{
EmulatorWindows.SessionName = file.FullName;
Global.Config.RecentRomSessions.Add(file.FullName);
SaveSessionMenuItem_Click(sender, e);
}
}
}
private FileInfo GetSaveFileFromUser()
{
var sfd = new SaveFileDialog();
if (!string.IsNullOrWhiteSpace(EmulatorWindows.SessionName))
{
sfd.FileName = Path.GetFileNameWithoutExtension(EmulatorWindows.SessionName);
sfd.InitialDirectory = Path.GetDirectoryName(EmulatorWindows.SessionName);
}
else if (EmulatorWindows.Master != null)
{
sfd.FileName = PathManager.FilesystemSafeName(EmulatorWindows.Master.Game);
sfd.InitialDirectory = PathManager.GetRomsPath("Global");
}
else
{
sfd.FileName = "NULL";
sfd.InitialDirectory = PathManager.GetRomsPath("Global");
}
sfd.Filter = "Rom Session Files (*.romses)|*.romses|All Files|*.*";
sfd.RestoreDirectory = true;
var result = sfd.ShowDialog();
if (result != DialogResult.OK)
{
return null;
}
return new FileInfo(sfd.FileName);
}
private void OpenSessionMenuItem_Click(object sender, EventArgs e)
{
var file = GetFileFromUser("Rom Session Files (*.romses)|*.romses|All Files|*.*");
if (file != null)
{
NewSessionMenuItem_Click(null, null);
var json = File.ReadAllText(file.FullName);
EmulatorWindows.SessionName = file.FullName;
LoadRomSession(EmulatorWindowList.FromJson(json));
Global.Config.RecentRomSessions.Add(file.FullName);
}
}
private static FileInfo GetFileFromUser(string filter)
{
var ofd = new OpenFileDialog
{
InitialDirectory = PathManager.GetRomsPath("Global"),
Filter = filter,
RestoreDirectory = true
};
if (!Directory.Exists(ofd.InitialDirectory))
{
Directory.CreateDirectory(ofd.InitialDirectory);
}
var result = ofd.ShowDialog();
return result == DialogResult.OK ? new FileInfo(ofd.FileName) : null;
}
private void CloseAllWindows()
{
foreach (var ew in EmulatorWindows.ToList())
{
ew.Close();
}
EmulatorWindows.Clear();
}
private void NewSessionMenuItem_Click(object sender, EventArgs e)
{
foreach (var ew in EmulatorWindows.ToList())
{
ew.Close();
}
EmulatorWindows.Clear();
}
private void LoadRomSession(IEnumerable<EmulatorWindowList.RomSessionEntry> entries)
{
foreach (var entry in entries)
{
LoadRom(entry.RomName);
EmulatorWindows.Last().Location = new Point(entry.Wndx, entry.Wndy);
}
}
private void LoadRomSessionFromRecent(string path)
{
var file = new FileInfo(path);
if (file.Exists)
{
NewSessionMenuItem_Click(null, null);
var json = File.ReadAllText(file.FullName);
EmulatorWindows.SessionName = file.FullName;
LoadRomSession(EmulatorWindowList.FromJson(json));
Global.Config.RecentRomSessions.Add(file.FullName);
}
else
{
Global.Config.RecentRomSessions.HandleLoadError(path);
}
}
private void RecentSessionSubMenu_DropDownOpened(object sender, EventArgs e)
{
RecentSessionSubMenu.DropDownItems.Clear();
RecentSessionSubMenu.DropDownItems.AddRange(
Global.Config.RecentRomSessions.RecentMenu(LoadRomSessionFromRecent, autoload: true));
}
private void RecentRomSubMenu_DropDownOpened(object sender, EventArgs e)
{
RecentRomSubMenu.DropDownItems.Clear();
RecentRomSubMenu.DropDownItems.AddRange(
Global.Config.RecentRoms.RecentMenu(LoadRomFromRecent, autoload: false));
}
} }
} }

View File

@ -123,4 +123,7 @@
<metadata name="MainStatusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="MainStatusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>153, 17</value> <value>153, 17</value>
</metadata> </metadata>
<metadata name="MainStatusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>153, 17</value>
</metadata>
</root> </root>