From 2c876858f20e8f264525cb7337f0be66d2c543f4 Mon Sep 17 00:00:00 2001 From: SuuperW Date: Mon, 2 Mar 2015 23:43:52 +0000 Subject: [PATCH] -Bugfix: TAStudio couldn't re-save a project. -Bugfix: tasproj files without StateHistory couldn't load. -Gave a bunch of StateHistory stuff proper names. --- BizHawk.Client.Common/BinarySaveStates.cs | 2 +- BizHawk.Client.Common/IonicZipWriter.cs | 3 +- .../movie/tasproj/TasMovie.IO.cs | 6 ++- .../movie/tasproj/TasMovie.cs | 6 ++- .../movie/tasproj/TasStateManager.cs | 2 +- .../movie/tasproj/TasStateManagerSettings.cs | 10 ++-- .../TAStudio/GreenzoneSettings.Designer.cs | 26 +++++----- .../tools/TAStudio/GreenzoneSettings.cs | 10 ++-- .../tools/TAStudio/TAStudio.Designer.cs | 16 +++--- .../tools/TAStudio/TAStudio.MenuItems.cs | 4 +- .../tools/TAStudio/TAStudio.cs | 52 +++++++++++-------- 11 files changed, 75 insertions(+), 62 deletions(-) diff --git a/BizHawk.Client.Common/BinarySaveStates.cs b/BizHawk.Client.Common/BinarySaveStates.cs index e8a8f22059..1be2a086f4 100644 --- a/BizHawk.Client.Common/BinarySaveStates.cs +++ b/BizHawk.Client.Common/BinarySaveStates.cs @@ -23,7 +23,7 @@ namespace BizHawk.Client.Common // TasMovie LagLog, - Greenzone, + Greenzone, // Greenzone actually means StateHistory. Changing these two names would break previous save files, though. GreenzoneSettings, Markers, ClientSettings, diff --git a/BizHawk.Client.Common/IonicZipWriter.cs b/BizHawk.Client.Common/IonicZipWriter.cs index 532825829b..de1f1befc7 100644 --- a/BizHawk.Client.Common/IonicZipWriter.cs +++ b/BizHawk.Client.Common/IonicZipWriter.cs @@ -21,7 +21,8 @@ namespace BizHawk.Client.Common EnableZip64 = Zip64Option.Never, CompressionLevel = (Ionic.Zlib.CompressionLevel)level }; - } + z.CompressionMethod = CompressionMethod.Deflate; + } public void WriteItem(string name, Action callback) { diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs index 1ccbeec090..ee9480a02e 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs @@ -54,9 +54,10 @@ namespace BizHawk.Client.Common ReportProgress(PROGRESS_STEP); // TasProj extras + // Greenzone actually means StateHistory. Changing these two names would break previous save files, though. bs.PutLump(BinaryStateLump.GreenzoneSettings, tw => tw.WriteLine(StateManager.Settings.ToString())); ReportProgress(PROGRESS_STEP); - if (StateManager.Settings.SaveGreenzone) + if (StateManager.Settings.SaveStateHistory) { bs.PutLump(BinaryStateLump.Greenzone, (BinaryWriter bw) => StateManager.Save(bw)); } @@ -197,12 +198,13 @@ namespace BizHawk.Client.Common }); } + // Greenzone actually means StateHistory. Changing these two names would break previous save files, though. bl.GetLump(BinaryStateLump.GreenzoneSettings, false, delegate(TextReader tr) { StateManager.Settings.PopulateFromString(tr.ReadToEnd()); }); - if (StateManager.Settings.SaveGreenzone) + if (StateManager.Settings.SaveStateHistory) { bl.GetLump(BinaryStateLump.Greenzone, false, delegate(BinaryReader br, long length) { diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index e6e21abcc9..5fdceb758d 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -23,6 +23,10 @@ namespace BizHawk.Client.Common private readonly List VerificationLog = new List(); // For movies that do not begin with power-on, this is the input required to get into the initial state private BackgroundWorker _progressReportWorker = null; + public void NewBGWorker(BackgroundWorker newWorker) + { + _progressReportWorker = newWorker; + } public TasMovie(string path, bool startsFromSavestate = false, BackgroundWorker progressReportWorker = null) : base(path) @@ -248,7 +252,7 @@ namespace BizHawk.Client.Common { if (StateManager.Any()) { - StateManager.ClearGreenzone(); + StateManager.ClearStateHistory(); Changes = true; } } diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 8b3ac0b0e9..bcb3dd8a0c 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -207,7 +207,7 @@ namespace BizHawk.Client.Common Used = 0; } - public void ClearGreenzone() + public void ClearStateHistory() { if (States.Any()) { diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs index a99bb207c0..eb044ea6fe 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs @@ -10,13 +10,13 @@ namespace BizHawk.Client.Common { public TasStateManagerSettings() { - SaveGreenzone = true; + SaveStateHistory = true; Capacitymb = 512; } public TasStateManagerSettings(TasStateManagerSettings settings) { - SaveGreenzone = settings.SaveGreenzone; + SaveStateHistory = settings.SaveStateHistory; Capacitymb = settings.Capacitymb; } @@ -25,7 +25,7 @@ namespace BizHawk.Client.Common /// [DisplayName("Save History")] [Description("Whether or not to use savestate history")] - public bool SaveGreenzone { get; set; } + public bool SaveStateHistory { get; set; } /// /// The total amount of memory to devote to greenzone in megabytes @@ -45,7 +45,7 @@ namespace BizHawk.Client.Common { StringBuilder sb = new StringBuilder(); - sb.AppendLine(SaveGreenzone.ToString()); + sb.AppendLine(SaveStateHistory.ToString()); sb.AppendLine(Capacitymb.ToString()); return sb.ToString(); @@ -56,7 +56,7 @@ namespace BizHawk.Client.Common if (!string.IsNullOrWhiteSpace(settings)) { var lines = settings.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - SaveGreenzone = bool.Parse(lines[0]); + SaveStateHistory = bool.Parse(lines[0]); Capacitymb = int.Parse(lines[1]); } } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs index 91a4eeafd8..4f867c58b1 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs @@ -9,7 +9,7 @@ using System.Windows.Forms; namespace BizHawk.Client.EmuHawk { - public partial class GreenzoneSettingsForm + public partial class StateHistorySettingsForm { /// /// Required designer variable. @@ -35,10 +35,10 @@ namespace BizHawk.Client.EmuHawk /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GreenzoneSettingsForm)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StateHistorySettingsForm)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); - this.SaveGreenzoneCheckbox = new System.Windows.Forms.CheckBox(); + this.SaveStateHistoryCheckbox = new System.Windows.Forms.CheckBox(); this.CapacityNumeric = new System.Windows.Forms.NumericUpDown(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); @@ -74,13 +74,13 @@ namespace BizHawk.Client.EmuHawk // // SaveGreenzoneCheckbox // - this.SaveGreenzoneCheckbox.AutoSize = true; - this.SaveGreenzoneCheckbox.Location = new System.Drawing.Point(13, 20); - this.SaveGreenzoneCheckbox.Name = "SaveGreenzoneCheckbox"; - this.SaveGreenzoneCheckbox.Size = new System.Drawing.Size(234, 17); - this.SaveGreenzoneCheckbox.TabIndex = 2; - this.SaveGreenzoneCheckbox.Text = "Save savestate history information in proj file"; - this.SaveGreenzoneCheckbox.UseVisualStyleBackColor = true; + this.SaveStateHistoryCheckbox.AutoSize = true; + this.SaveStateHistoryCheckbox.Location = new System.Drawing.Point(13, 20); + this.SaveStateHistoryCheckbox.Name = "SaveGreenzoneCheckbox"; + this.SaveStateHistoryCheckbox.Size = new System.Drawing.Size(234, 17); + this.SaveStateHistoryCheckbox.TabIndex = 2; + this.SaveStateHistoryCheckbox.Text = "Save savestate history information in proj file"; + this.SaveStateHistoryCheckbox.UseVisualStyleBackColor = true; // // CapacityNumeric // @@ -173,7 +173,7 @@ namespace BizHawk.Client.EmuHawk this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.CapacityNumeric); - this.Controls.Add(this.SaveGreenzoneCheckbox); + this.Controls.Add(this.SaveStateHistoryCheckbox); this.Controls.Add(this.OkBtn); this.Controls.Add(this.CancelBtn); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -181,7 +181,7 @@ namespace BizHawk.Client.EmuHawk this.Name = "GreenzoneSettingsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Savestate History Settings"; - this.Load += new System.EventHandler(this.GreenzoneSettings_Load); + this.Load += new System.EventHandler(this.StateHistorySettings_Load); ((System.ComponentModel.ISupportInitialize)(this.CapacityNumeric)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -190,7 +190,7 @@ namespace BizHawk.Client.EmuHawk private Button CancelBtn; private Button OkBtn; - private CheckBox SaveGreenzoneCheckbox; + private CheckBox SaveStateHistoryCheckbox; private NumericUpDown CapacityNumeric; private Label label1; private Label label2; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.cs index 9df16f8a6e..003b5c9947 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.cs @@ -13,23 +13,23 @@ using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - public partial class GreenzoneSettingsForm : Form + public partial class StateHistorySettingsForm : Form { public IStatable Statable { get; set; } private readonly TasStateManagerSettings Settings; private decimal _stateSizeMb; - public GreenzoneSettingsForm(TasStateManagerSettings settings) + public StateHistorySettingsForm(TasStateManagerSettings settings) { Settings = settings; InitializeComponent(); } - private void GreenzoneSettings_Load(object sender, EventArgs e) + private void StateHistorySettings_Load(object sender, EventArgs e) { _stateSizeMb = Statable.SaveStateBinary().Length / (decimal)1024 / (decimal)1024; - SaveGreenzoneCheckbox.Checked = Settings.SaveGreenzone; + SaveStateHistoryCheckbox.Checked = Settings.SaveStateHistory; CapacityNumeric.Value = Settings.Capacitymb == 0 ? 1 : Settings.Capacitymb < CapacityNumeric.Maximum ? Settings.Capacitymb : CapacityNumeric.Maximum; @@ -45,7 +45,7 @@ namespace BizHawk.Client.EmuHawk private void OkBtn_Click(object sender, EventArgs e) { - Settings.SaveGreenzone = SaveGreenzoneCheckbox.Checked; + Settings.SaveStateHistory = SaveStateHistoryCheckbox.Checked; Settings.Capacitymb = (int)CapacityNumeric.Value; DialogResult = DialogResult.OK; Close(); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs index 12eff96143..2af0dbd41f 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs @@ -88,7 +88,7 @@ namespace BizHawk.Client.EmuHawk this.AutopauseAtEndOfMovieMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MetaSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.HeaderMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.GreenzoneSettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.StateHistorySettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.CommentsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.SubtitlesMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); @@ -602,7 +602,7 @@ namespace BizHawk.Client.EmuHawk // this.MetaSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.HeaderMenuItem, - this.GreenzoneSettingsMenuItem, + this.StateHistorySettingsMenuItem, this.CommentsMenuItem, this.SubtitlesMenuItem, this.toolStripSeparator21, @@ -618,12 +618,12 @@ namespace BizHawk.Client.EmuHawk this.HeaderMenuItem.Text = "&Header..."; this.HeaderMenuItem.Click += new System.EventHandler(this.HeaderMenuItem_Click); // - // GreenzoneSettingsMenuItem + // StateHistorySettingsMenuItem // - this.GreenzoneSettingsMenuItem.Name = "GreenzoneSettingsMenuItem"; - this.GreenzoneSettingsMenuItem.Size = new System.Drawing.Size(236, 22); - this.GreenzoneSettingsMenuItem.Text = "&Savestate History Settings..."; - this.GreenzoneSettingsMenuItem.Click += new System.EventHandler(this.GreenzoneSettingsMenuItem_Click); + this.StateHistorySettingsMenuItem.Name = "StateHistorySettingsMenuItem"; + this.StateHistorySettingsMenuItem.Size = new System.Drawing.Size(236, 22); + this.StateHistorySettingsMenuItem.Text = "&Savestate History Settings..."; + this.StateHistorySettingsMenuItem.Click += new System.EventHandler(this.StateHistorySettingsMenuItem_Click); // // CommentsMenuItem // @@ -1187,7 +1187,7 @@ namespace BizHawk.Client.EmuHawk private System.Windows.Forms.ToolStripMenuItem HeaderMenuItem; private System.Windows.Forms.ToolStripMenuItem CommentsMenuItem; private System.Windows.Forms.ToolStripMenuItem SubtitlesMenuItem; - private System.Windows.Forms.ToolStripMenuItem GreenzoneSettingsMenuItem; + private System.Windows.Forms.ToolStripMenuItem StateHistorySettingsMenuItem; private MarkerControl MarkerControl; private System.Windows.Forms.ContextMenuStrip RightClickMenu; private System.Windows.Forms.ToolStripMenuItem SetMarkersContextMenuItem; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index e0ce1bd3e6..0b67e99693 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -611,9 +611,9 @@ namespace BizHawk.Client.EmuHawk UpdateChangesIndicator(); } - private void GreenzoneSettingsMenuItem_Click(object sender, EventArgs e) + private void StateHistorySettingsMenuItem_Click(object sender, EventArgs e) { - new GreenzoneSettingsForm(CurrentTasMovie.TasStateManager.Settings) + new StateHistorySettingsForm(CurrentTasMovie.TasStateManager.Settings) { Owner = GlobalWin.MainForm, Location = this.ChildPointToScreen(TasView), diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 64ff6f7ec7..056785b904 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -70,6 +70,32 @@ namespace BizHawk.Client.EmuHawk // TODO: show this at all times or hide it when saving is done? this.SavingProgressBar.Visible = false; + InitializeSaveWorker(); + + WantsToControlStopMovie = true; + TasPlaybackBox.Tastudio = this; + MarkerControl.Tastudio = this; + MarkerControl.Emulator = this.Emulator; + TasView.QueryItemText += TasView_QueryItemText; + TasView.QueryItemBkColor += TasView_QueryItemBkColor; + TasView.QueryItemIcon += TasView_QueryItemIcon; + TasView.QueryFrameLag += TasView_QueryFrameLag; + TasView.InputPaintingMode = Settings.DrawInput; + TasView.PointedCellChanged += TasView_PointedCellChanged; + TasView.MultiSelect = true; + TasView.MaxCharactersInHorizontal = 1; + WantsToControlRestartMovie = true; + + } + + private void InitializeSaveWorker() + { + if (_saveBackgroundWorker != null) + { + _saveBackgroundWorker.Dispose(); + _saveBackgroundWorker = null; // Idk if this line is even useful. + } + _saveBackgroundWorker = new BackgroundWorker(); _saveBackgroundWorker.WorkerReportsProgress = true; _saveBackgroundWorker.DoWork += (s, e) => @@ -89,31 +115,11 @@ namespace BizHawk.Client.EmuHawk this.Invoke(() => this.MessageStatusLabel.Text = Path.GetFileName(CurrentTasMovie.Filename) + " saved."); this.Invoke(() => this.SavingProgressBar.Visible = false); - // SUPER HACKY, and i'm not even sure it's necessary - Timer t = new Timer(); - t.Tick += (a, b) => - { - this.Invoke(() => this.MessageStatusLabel.Text = "TAStudio engaged."); - t.Stop(); - }; - t.Interval = 5000; - t.Start(); + InitializeSaveWorker(); // Required, or it will error when trying to report progress again. }; - WantsToControlStopMovie = true; - TasPlaybackBox.Tastudio = this; - MarkerControl.Tastudio = this; - MarkerControl.Emulator = this.Emulator; - TasView.QueryItemText += TasView_QueryItemText; - TasView.QueryItemBkColor += TasView_QueryItemBkColor; - TasView.QueryItemIcon += TasView_QueryItemIcon; - TasView.QueryFrameLag += TasView_QueryFrameLag; - TasView.InputPaintingMode = Settings.DrawInput; - TasView.PointedCellChanged += TasView_PointedCellChanged; - TasView.MultiSelect = true; - TasView.MaxCharactersInHorizontal = 1; - WantsToControlRestartMovie = true; - + if (CurrentTasMovie != null) // Again required. TasMovie has a separate reference. + CurrentTasMovie.NewBGWorker(_saveBackgroundWorker); } private void TastudioToStopMovie()