diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
index 25a1fea53b..8686c98f91 100644
--- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj
+++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
@@ -266,6 +266,7 @@
RecordMovie.cs
+
Form
diff --git a/BizHawk.MultiClient/MainForm.Designer.cs b/BizHawk.MultiClient/MainForm.Designer.cs
index 926032cfff..1bf0b8ca35 100644
--- a/BizHawk.MultiClient/MainForm.Designer.cs
+++ b/BizHawk.MultiClient/MainForm.Designer.cs
@@ -199,11 +199,22 @@
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.StatusSlot0 = new System.Windows.Forms.StatusStrip();
this.DumpError = new System.Windows.Forms.ToolStripDropDownButton();
this.EmuStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.PlayRecordStatus = new System.Windows.Forms.ToolStripDropDownButton();
this.PauseStrip = new System.Windows.Forms.ToolStripDropDownButton();
+ this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot1 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot2 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot3 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot4 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot5 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot6 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot7 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot8 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot9 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.StatusSlot10 = new System.Windows.Forms.ToolStripStatusLabel();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.openRomToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.loadLastROMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -221,7 +232,7 @@
this.screenshotToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.closeROMToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
- this.statusStrip1.SuspendLayout();
+ this.StatusSlot0.SuspendLayout();
this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout();
//
@@ -1575,19 +1586,30 @@
this.aboutToolStripMenuItem.Text = "&About";
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
//
- // statusStrip1
+ // StatusSlot0
//
- this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.StatusSlot0.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.DumpError,
this.EmuStatus,
this.PlayRecordStatus,
- this.PauseStrip});
- this.statusStrip1.Location = new System.Drawing.Point(0, 386);
- this.statusStrip1.Name = "statusStrip1";
- this.statusStrip1.Size = new System.Drawing.Size(470, 22);
- this.statusStrip1.SizingGrip = false;
- this.statusStrip1.TabIndex = 1;
- this.statusStrip1.Text = "statusStrip1";
+ this.PauseStrip,
+ this.toolStripStatusLabel1,
+ this.StatusSlot1,
+ this.StatusSlot2,
+ this.StatusSlot3,
+ this.StatusSlot4,
+ this.StatusSlot5,
+ this.StatusSlot6,
+ this.StatusSlot7,
+ this.StatusSlot8,
+ this.StatusSlot9,
+ this.StatusSlot10});
+ this.StatusSlot0.Location = new System.Drawing.Point(0, 386);
+ this.StatusSlot0.Name = "StatusSlot0";
+ this.StatusSlot0.Size = new System.Drawing.Size(470, 22);
+ this.StatusSlot0.SizingGrip = false;
+ this.StatusSlot0.TabIndex = 1;
+ this.StatusSlot0.Text = "0";
//
// DumpError
//
@@ -1626,6 +1648,83 @@
this.PauseStrip.Text = "toolStripDropDownButton1";
this.PauseStrip.ToolTipText = "Emulator is paused";
//
+ // toolStripStatusLabel1
+ //
+ this.toolStripStatusLabel1.BackColor = System.Drawing.SystemColors.Control;
+ this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
+ this.toolStripStatusLabel1.Size = new System.Drawing.Size(56, 17);
+ this.toolStripStatusLabel1.Text = "Save slots";
+ //
+ // StatusSlot1
+ //
+ this.StatusSlot1.Name = "StatusSlot1";
+ this.StatusSlot1.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot1.Text = "1";
+ this.StatusSlot1.Click += new System.EventHandler(this.StatusSlot1_Click);
+ //
+ // StatusSlot2
+ //
+ this.StatusSlot2.Name = "StatusSlot2";
+ this.StatusSlot2.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot2.Text = "2";
+ this.StatusSlot2.Click += new System.EventHandler(this.StatusSlot2_Click);
+ //
+ // StatusSlot3
+ //
+ this.StatusSlot3.Name = "StatusSlot3";
+ this.StatusSlot3.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot3.Text = "3";
+ this.StatusSlot3.Click += new System.EventHandler(this.StatusSlot3_Click);
+ //
+ // StatusSlot4
+ //
+ this.StatusSlot4.Name = "StatusSlot4";
+ this.StatusSlot4.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot4.Text = "4";
+ this.StatusSlot4.Click += new System.EventHandler(this.StatusSlot4_Click);
+ //
+ // StatusSlot5
+ //
+ this.StatusSlot5.Name = "StatusSlot5";
+ this.StatusSlot5.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot5.Text = "5";
+ this.StatusSlot5.Click += new System.EventHandler(this.StatusSlot5_Click);
+ //
+ // StatusSlot6
+ //
+ this.StatusSlot6.Name = "StatusSlot6";
+ this.StatusSlot6.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot6.Text = "6";
+ this.StatusSlot6.Click += new System.EventHandler(this.StatusSlot6_Click);
+ //
+ // StatusSlot7
+ //
+ this.StatusSlot7.Name = "StatusSlot7";
+ this.StatusSlot7.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot7.Text = "7";
+ this.StatusSlot7.Click += new System.EventHandler(this.StatusSlot7_Click);
+ //
+ // StatusSlot8
+ //
+ this.StatusSlot8.Name = "StatusSlot8";
+ this.StatusSlot8.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot8.Text = "8";
+ this.StatusSlot8.Click += new System.EventHandler(this.StatusSlot8_Click);
+ //
+ // StatusSlot9
+ //
+ this.StatusSlot9.Name = "StatusSlot9";
+ this.StatusSlot9.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot9.Text = "9";
+ this.StatusSlot9.Click += new System.EventHandler(this.StatusSlot9_Click);
+ //
+ // StatusSlot10
+ //
+ this.StatusSlot10.Name = "StatusSlot10";
+ this.StatusSlot10.Size = new System.Drawing.Size(13, 17);
+ this.StatusSlot10.Text = "0";
+ this.StatusSlot10.Click += new System.EventHandler(this.StatusSlot10_Click);
+ //
// contextMenuStrip1
//
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -1757,7 +1856,7 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(470, 408);
- this.Controls.Add(this.statusStrip1);
+ this.Controls.Add(this.StatusSlot0);
this.Controls.Add(this.menuStrip1);
this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
@@ -1773,8 +1872,8 @@
this.Activated += new System.EventHandler(this.MainForm_Activated);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
- this.statusStrip1.ResumeLayout(false);
- this.statusStrip1.PerformLayout();
+ this.StatusSlot0.ResumeLayout(false);
+ this.StatusSlot0.PerformLayout();
this.contextMenuStrip1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@@ -1920,7 +2019,7 @@
private System.Windows.Forms.ToolStripMenuItem toolBoxToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator12;
private System.Windows.Forms.ToolStripMenuItem switchToFullscreenToolStripMenuItem;
- private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.StatusStrip StatusSlot0;
private System.Windows.Forms.ToolStripStatusLabel EmuStatus;
private System.Windows.Forms.ToolStripMenuItem messagesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem tI83ToolStripMenuItem;
@@ -1973,6 +2072,17 @@
private MenuStripEx menuStrip1;
private System.Windows.Forms.ToolStripMenuItem gBToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem debuggerToolStripMenuItem1;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot1;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot2;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot3;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot4;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot5;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot6;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot7;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot8;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot9;
+ private System.Windows.Forms.ToolStripStatusLabel StatusSlot10;
}
}
diff --git a/BizHawk.MultiClient/MainForm.MenuItems.cs b/BizHawk.MultiClient/MainForm.MenuItems.cs
index 457380bd2b..40192b82a2 100644
--- a/BizHawk.MultiClient/MainForm.MenuItems.cs
+++ b/BizHawk.MultiClient/MainForm.MenuItems.cs
@@ -192,60 +192,70 @@ namespace BizHawk.MultiClient
private void selectSlot1ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 1;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot2ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 2;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot3ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 3;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot4ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 4;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot5ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 5;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot6ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 6;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot7ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 7;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot8ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 8;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot9ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 9;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
private void selectSlot10ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveSlot = 0;
+ UpdateStatusSlots();
SaveSlotSelectedMessage();
}
@@ -694,7 +704,7 @@ namespace BizHawk.MultiClient
displayStatusBarToolStripMenuItem.Checked = Global.Config.DisplayStatusBar;
if (!InFullscreen)
{
- statusStrip1.Visible = Global.Config.DisplayStatusBar;
+ StatusSlot0.Visible = Global.Config.DisplayStatusBar;
PerformLayout();
FrameBufferResized();
}
diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs
index 4171db9d20..4519c10542 100644
--- a/BizHawk.MultiClient/MainForm.cs
+++ b/BizHawk.MultiClient/MainForm.cs
@@ -20,6 +20,7 @@ namespace BizHawk.MultiClient
private Control renderTarget;
private RetainedViewportPanel retainedPanel;
public string CurrentlyOpenRom;
+ SavestateManager StateSlots = new SavestateManager();
//Movie variables
public Movie InputLog = new Movie("", MOVIEMODE.INACTIVE);
@@ -68,7 +69,7 @@ namespace BizHawk.MultiClient
public MainForm(string[] args)
{
InitializeComponent();
-
+ UpdateStatusSlots();
//in order to allow late construction of this database, we hook up a delegate here to dearchive the data and provide it on demand
//we could background thread this later instead if we wanted to be real clever
NES.BootGodDB.GetDatabaseBytes = () =>
@@ -210,7 +211,7 @@ namespace BizHawk.MultiClient
this.Location = new Point(Global.Config.MainWndx, Global.Config.MainWndy);
if (Global.Config.DisplayStatusBar == false)
- statusStrip1.Visible = false;
+ StatusSlot0.Visible = false;
else
displayStatusBarToolStripMenuItem.Checked = true;
@@ -909,6 +910,7 @@ namespace BizHawk.MultiClient
Cheats1.Restart();
CurrentlyOpenRom = file.CanonicalFullPath;
HandlePlatformMenus();
+ UpdateStatusSlots();
return true;
}
}
@@ -1025,6 +1027,7 @@ namespace BizHawk.MultiClient
{
SaveSlot = i;
SaveSlotSelectedMessage();
+ UpdateStatusSlots();
Global.ClientControls.UnpressButton("SelectSlot" + i.ToString());
}
}
@@ -1454,6 +1457,7 @@ namespace BizHawk.MultiClient
HandleMovieSaveState(writer);
writer.Close();
Global.RenderPanel.AddMessage("Saved state: " + name);
+ UpdateStatusSlots();
}
private void SaveStateAs()
@@ -1476,6 +1480,7 @@ namespace BizHawk.MultiClient
HandleMovieSaveState(writer);
writer.Close();
Global.RenderPanel.AddMessage(sfd.FileName + " saved");
+ UpdateStatusSlots();
}
private void HandleMovieLoadState(StreamReader reader)
@@ -1921,7 +1926,7 @@ namespace BizHawk.MultiClient
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
MainMenuStrip.Visible = false;
- statusStrip1.Visible = false;
+ StatusSlot0.Visible = false;
PerformLayout();
Global.RenderPanel.Resized = true;
InFullscreen = true;
@@ -1931,7 +1936,7 @@ namespace BizHawk.MultiClient
FormBorderStyle = FormBorderStyle.FixedSingle;
WindowState = FormWindowState.Normal;
MainMenuStrip.Visible = true;
- statusStrip1.Visible = Global.Config.DisplayStatusBar;
+ StatusSlot0.Visible = Global.Config.DisplayStatusBar;
Location = WindowedLocation;
PerformLayout();
FrameBufferResized();
@@ -2044,6 +2049,7 @@ namespace BizHawk.MultiClient
Cheats1.Restart();
Text = "BizHawk";
HandlePlatformMenus();
+ UpdateStatusSlots();
}
private void frameSkipToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
@@ -2338,5 +2344,54 @@ namespace BizHawk.MultiClient
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset"))
Global.ActiveController.ForceButton("Reset");
}
+
+ public void UpdateStatusSlots()
+ {
+ StateSlots.Update();
+ StatusSlot1.Enabled = StateSlots.HasSlot(1);
+ StatusSlot2.Enabled = StateSlots.HasSlot(2);
+ StatusSlot3.Enabled = StateSlots.HasSlot(3);
+ StatusSlot4.Enabled = StateSlots.HasSlot(4);
+ StatusSlot5.Enabled = StateSlots.HasSlot(5);
+ StatusSlot6.Enabled = StateSlots.HasSlot(6);
+ StatusSlot7.Enabled = StateSlots.HasSlot(7);
+ StatusSlot8.Enabled = StateSlots.HasSlot(8);
+ StatusSlot9.Enabled = StateSlots.HasSlot(9);
+ StatusSlot10.Enabled = StateSlots.HasSlot(0);
+
+
+ StatusSlot1.BackColor = SystemColors.Control;
+ StatusSlot2.BackColor = SystemColors.Control;
+ StatusSlot3.BackColor = SystemColors.Control;
+ StatusSlot4.BackColor = SystemColors.Control;
+ StatusSlot5.BackColor = SystemColors.Control;
+ StatusSlot6.BackColor = SystemColors.Control;
+ StatusSlot7.BackColor = SystemColors.Control;
+ StatusSlot8.BackColor = SystemColors.Control;
+ StatusSlot9.BackColor = SystemColors.Control;
+ StatusSlot10.BackColor = SystemColors.Control;
+
+ if (SaveSlot == 0) StatusSlot10.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 1) StatusSlot1.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 2) StatusSlot2.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 3) StatusSlot3.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 4) StatusSlot4.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 5) StatusSlot5.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 6) StatusSlot6.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 7) StatusSlot7.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 8) StatusSlot8.BackColor = SystemColors.ControlLightLight;
+ if (SaveSlot == 9) StatusSlot9.BackColor = SystemColors.ControlLightLight;
+ }
+
+ private void StatusSlot1_Click(object sender, EventArgs e) { LoadState("QuickSave1"); }
+ private void StatusSlot2_Click(object sender, EventArgs e) { LoadState("QuickSave2"); }
+ private void StatusSlot3_Click(object sender, EventArgs e) { LoadState("QuickSave3"); }
+ private void StatusSlot4_Click(object sender, EventArgs e) { LoadState("QuickSave4"); }
+ private void StatusSlot5_Click(object sender, EventArgs e) { LoadState("QuickSave5"); }
+ private void StatusSlot6_Click(object sender, EventArgs e) { LoadState("QuickSave6"); }
+ private void StatusSlot7_Click(object sender, EventArgs e) { LoadState("QuickSave7"); }
+ private void StatusSlot8_Click(object sender, EventArgs e) { LoadState("QuickSave8"); }
+ private void StatusSlot9_Click(object sender, EventArgs e) { LoadState("QuickSave9"); }
+ private void StatusSlot10_Click(object sender, EventArgs e) { LoadState("QuickSave0"); }
}
}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/MainForm.resx b/BizHawk.MultiClient/MainForm.resx
index eb39f04815..42bba49ee3 100644
--- a/BizHawk.MultiClient/MainForm.resx
+++ b/BizHawk.MultiClient/MainForm.resx
@@ -120,7 +120,7 @@
17, 17
-
+
126, 17
diff --git a/BizHawk.MultiClient/SavestateManager.cs b/BizHawk.MultiClient/SavestateManager.cs
new file mode 100644
index 0000000000..00c7dcd0f1
--- /dev/null
+++ b/BizHawk.MultiClient/SavestateManager.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+namespace BizHawk.MultiClient
+{
+ class SavestateManager
+ {
+ private bool[] slots = new bool[10];
+
+ public SavestateManager()
+ {
+ Update();
+ }
+
+ public void Update()
+ {
+ string path;
+ if (Global.Game == null || Global.Emulator == null)
+ {
+ for (int x = 0; x < 10; x++)
+ slots[x] = false;
+ return;
+ }
+ for (int x = 0; x < 10; x++)
+ {
+ path = Global.Game.SaveStatePrefix + "." + "QuickSave" + x + ".State";
+ var file = new FileInfo(path);
+ if (file.Directory.Exists == false)
+ file.Directory.Create();
+ slots[x] = file.Exists;
+ }
+ }
+
+ public bool HasSavestateSlots()
+ {
+ Update();
+ for (int x = 0; x < 10; x++)
+ {
+ if (slots[x]) return true;
+ }
+ return false;
+ }
+
+ public bool HasSlot(int slot)
+ {
+ if (slot < 0 || slot > 10) return false;
+
+ Update();
+ return slots[slot];
+ }
+ }
+}