tastudio autosave:
- switch to appropriate method for backups - option to save backup per file save - menu command to save backup
This commit is contained in:
parent
3e02e271fc
commit
346c4e56b3
|
@ -29,7 +29,7 @@ namespace BizHawk.Client.Common
|
|||
Directory.CreateDirectory(directory_info.FullName);
|
||||
}
|
||||
|
||||
Write(backupName);
|
||||
Write(backupName, backup: true);
|
||||
}
|
||||
|
||||
public virtual bool Load(bool preload)
|
||||
|
@ -168,7 +168,7 @@ namespace BizHawk.Client.Common
|
|||
return Load(true);
|
||||
}
|
||||
|
||||
protected virtual void Write(string fn)
|
||||
protected virtual void Write(string fn, bool backup = false)
|
||||
{
|
||||
var file = new FileInfo(fn);
|
||||
if (!file.Directory.Exists)
|
||||
|
@ -207,7 +207,8 @@ namespace BizHawk.Client.Common
|
|||
}
|
||||
}
|
||||
|
||||
Changes = false;
|
||||
if (!backup)
|
||||
Changes = false;
|
||||
}
|
||||
|
||||
protected void ClearBeforeLoad()
|
||||
|
|
|
@ -75,7 +75,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions
|
|||
return tas;
|
||||
}
|
||||
|
||||
public static Bk2Movie ToBk2(this IMovie old, bool copy = false)
|
||||
public static Bk2Movie ToBk2(this IMovie old, bool copy = false, bool backup = false)
|
||||
{
|
||||
var bk2 = new Bk2Movie(old.Filename.Replace(old.PreferredExtension, Bk2Movie.Extension));
|
||||
|
||||
|
@ -114,7 +114,9 @@ namespace BizHawk.Client.Common.MovieConversionExtensions
|
|||
bk2.BinarySavestate = old.BinarySavestate;
|
||||
bk2.SaveRam = old.SaveRam;
|
||||
|
||||
bk2.Save();
|
||||
if (!backup)
|
||||
bk2.Save();
|
||||
|
||||
return bk2;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace BizHawk.Client.Common
|
|||
public Func<string> ClientSettingsForSave { get; set; }
|
||||
public Action<string> GetClientSettingsOnLoad { get; set; }
|
||||
|
||||
protected override void Write(string fn)
|
||||
protected override void Write(string fn, bool backup = false)
|
||||
{
|
||||
var file = new FileInfo(fn);
|
||||
if (!file.Directory.Exists)
|
||||
|
@ -83,7 +83,8 @@ namespace BizHawk.Client.Common
|
|||
bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(Session.ToString()));
|
||||
}
|
||||
|
||||
Changes = false;
|
||||
if (!backup)
|
||||
Changes = false;
|
||||
}
|
||||
|
||||
public override bool Load(bool preload)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -112,7 +112,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
if (result == DialogResult.Yes)
|
||||
{
|
||||
_exiting = true; // Asking to save changes should only ever be called when closing something
|
||||
SaveTasMenuItem_Click(null, null);
|
||||
SaveTas(null, null);
|
||||
}
|
||||
else if (result == DialogResult.No)
|
||||
{
|
||||
|
|
|
@ -76,12 +76,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private bool _exiting = false;
|
||||
|
||||
private void SaveTasMenuItem_Click(object sender, EventArgs e)
|
||||
private void SaveTas(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(CurrentTasMovie.Filename) ||
|
||||
CurrentTasMovie.Filename == DefaultTasProjName())
|
||||
{
|
||||
SaveAsTasMenuItem_Click(sender, e);
|
||||
SaveAsTas(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -89,34 +89,24 @@ namespace BizHawk.Client.EmuHawk
|
|||
MessageStatusLabel.Text = "Saving...";
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
Update();
|
||||
if (_autosaveAppendFilenamePending)
|
||||
{
|
||||
// temp filename
|
||||
var ext = CurrentTasMovie.PreferredExtension;
|
||||
CurrentTasMovie.Filename = CurrentTasMovie.Filename.Replace(ext, "backup." + ext);
|
||||
}
|
||||
CurrentTasMovie.Save();
|
||||
if (Settings.AutosaveInterval > 0)
|
||||
_autosaveTimer.Start();
|
||||
MessageStatusLabel.Text = CurrentTasMovie.Name + " saved.";
|
||||
if (_autosaveAppendFilenamePending)
|
||||
{
|
||||
// switch back to original
|
||||
CurrentTasMovie.Filename = CurrentTasMovie.Filename.Replace("backup.", "");
|
||||
// we should only arrive here if changes were true
|
||||
// and saving to a different file clears changes
|
||||
// so assuming the original file remains unsaved, keep changes flagged
|
||||
CurrentTasMovie.FlagChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
Settings.RecentTas.Add(CurrentTasMovie.Filename);
|
||||
}
|
||||
Settings.RecentTas.Add(CurrentTasMovie.Filename);
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveAsTasMenuItem_Click(object sender, EventArgs e)
|
||||
// call this one from the menu only
|
||||
private void SaveTasMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveTas(sender, e);
|
||||
if (Settings.BackupPerFileSave)
|
||||
SaveBackupMenuItem_Click(sender, e);
|
||||
}
|
||||
|
||||
private void SaveAsTas(object sender, EventArgs e)
|
||||
{
|
||||
_autosaveTimer.Stop();
|
||||
var filename = CurrentTasMovie.Filename;
|
||||
|
@ -148,6 +138,50 @@ namespace BizHawk.Client.EmuHawk
|
|||
_autosaveTimer.Start();
|
||||
}
|
||||
|
||||
// call this one from the menu only
|
||||
private void SaveAsTasMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveAsTas(sender, e);
|
||||
if (Settings.BackupPerFileSave)
|
||||
SaveBackupMenuItem_Click(sender, e);
|
||||
}
|
||||
|
||||
private void SaveBackupMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(CurrentTasMovie.Filename) ||
|
||||
CurrentTasMovie.Filename == DefaultTasProjName())
|
||||
{
|
||||
SaveAsTas(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
_autosaveTimer.Stop();
|
||||
MessageStatusLabel.Text = "Saving...";
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
Update();
|
||||
CurrentTasMovie.SaveBackup();
|
||||
if (Settings.AutosaveInterval > 0)
|
||||
_autosaveTimer.Start();
|
||||
MessageStatusLabel.Text = "Backup .tasproj saved to \"Movie backups\" path.";
|
||||
Settings.RecentTas.Add(CurrentTasMovie.Filename);
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveBk2BackupMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
_autosaveTimer.Stop();
|
||||
var bk2 = CurrentTasMovie.ToBk2(copy: true, backup: true);
|
||||
MessageStatusLabel.Text = "Exporting to .bk2...";
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
Update();
|
||||
bk2.SaveBackup();
|
||||
if (Settings.AutosaveInterval > 0)
|
||||
_autosaveTimer.Start();
|
||||
MessageStatusLabel.Text = "Backup .bk2 saved to \"Movie backups\" path.";
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
private void saveSelectionToMacroToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (TasView.LastSelectedIndex == CurrentTasMovie.InputLogLength)
|
||||
|
@ -186,11 +220,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
MessageStatusLabel.Text = "Exporting to .bk2...";
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
Update();
|
||||
if (_autosaveAppendFilenamePending)
|
||||
{
|
||||
var ext = bk2.PreferredExtension;
|
||||
bk2.Filename = bk2.Filename.Replace(ext, "backup." + ext);
|
||||
}
|
||||
bk2.Save();
|
||||
if (Settings.AutosaveInterval > 0)
|
||||
_autosaveTimer.Start();
|
||||
|
@ -207,6 +236,30 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
#region Edit
|
||||
|
||||
private void EditSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
DeselectMenuItem.Enabled =
|
||||
SelectBetweenMarkersMenuItem.Enabled =
|
||||
CopyMenuItem.Enabled =
|
||||
CutMenuItem.Enabled =
|
||||
ClearMenuItem.Enabled =
|
||||
DeleteFramesMenuItem.Enabled =
|
||||
CloneMenuItem.Enabled =
|
||||
TruncateMenuItem.Enabled =
|
||||
TasView.AnyRowsSelected;
|
||||
ReselectClipboardMenuItem.Enabled =
|
||||
PasteMenuItem.Enabled =
|
||||
PasteInsertMenuItem.Enabled =
|
||||
_tasClipboard.Any();
|
||||
|
||||
ClearGreenzoneMenuItem.Enabled =
|
||||
CurrentTasMovie != null && CurrentTasMovie.TasStateManager.Any();
|
||||
|
||||
GreenzoneICheckSeparator.Visible =
|
||||
StateHistoryIntegrityCheckMenuItem.Visible =
|
||||
VersionInfo.DeveloperBuild;
|
||||
}
|
||||
|
||||
private void UndoMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CurrentTasMovie.ChangeLog.Undo() < Emulator.Frame)
|
||||
|
@ -238,30 +291,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
_undoForm.UpdateValues();
|
||||
}
|
||||
|
||||
private void EditSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
DeselectMenuItem.Enabled =
|
||||
SelectBetweenMarkersMenuItem.Enabled =
|
||||
CopyMenuItem.Enabled =
|
||||
CutMenuItem.Enabled =
|
||||
ClearMenuItem.Enabled =
|
||||
DeleteFramesMenuItem.Enabled =
|
||||
CloneMenuItem.Enabled =
|
||||
TruncateMenuItem.Enabled =
|
||||
TasView.AnyRowsSelected;
|
||||
ReselectClipboardMenuItem.Enabled =
|
||||
PasteMenuItem.Enabled =
|
||||
PasteInsertMenuItem.Enabled =
|
||||
_tasClipboard.Any();
|
||||
|
||||
ClearGreenzoneMenuItem.Enabled =
|
||||
CurrentTasMovie != null && CurrentTasMovie.TasStateManager.Any();
|
||||
|
||||
GreenzoneICheckSeparator.Visible =
|
||||
StateHistoryIntegrityCheckMenuItem.Visible =
|
||||
VersionInfo.DeveloperBuild;
|
||||
}
|
||||
|
||||
private void DeselectMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
TasView.DeselectAll();
|
||||
|
@ -689,6 +718,16 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
#region Config
|
||||
|
||||
private void ConfigSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
DrawInputByDraggingMenuItem.Checked = Settings.DrawInput;
|
||||
AutopauseAtEndOfMovieMenuItem.Checked = Settings.AutoPause;
|
||||
EmptyNewMarkerNotesMenuItem.Checked = Settings.EmptyMarkers;
|
||||
AutosaveAsBk2MenuItem.Checked = Settings.AutosaveAsBk2;
|
||||
AutosaveAsBackupFileMenuItem.Checked = Settings.AutosaveAsBackupFile;
|
||||
BackupPerFileSaveMenuItem.Checked = Settings.BackupPerFileSave;
|
||||
}
|
||||
|
||||
private void SetMaxUndoLevelsMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var prompt = new InputPrompt
|
||||
|
@ -780,18 +819,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
Settings.AutosaveAsBk2 ^= true;
|
||||
}
|
||||
|
||||
private void AppendBackupToFilenameMenuItem_Click(object sender, EventArgs e)
|
||||
private void AutosaveAsBackupFileMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Settings.AppendBackupToFilename ^= true;
|
||||
Settings.AutosaveAsBackupFile ^= true;
|
||||
}
|
||||
|
||||
private void ConfigSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
private void BackupPerFileSaveMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
DrawInputByDraggingMenuItem.Checked = Settings.DrawInput;
|
||||
AutopauseAtEndOfMovieMenuItem.Checked = Settings.AutoPause;
|
||||
EmptyNewMarkerNotesMenuItem.Checked = Settings.EmptyMarkers;
|
||||
AutosaveAsBk2MenuItem.Checked = Settings.AutosaveAsBk2;
|
||||
AppendBackupToFilenameMenuItem.Checked = Settings.AppendBackupToFilename;
|
||||
Settings.BackupPerFileSave ^= true;
|
||||
}
|
||||
|
||||
private void DrawInputByDraggingMenuItem_Click(object sender, EventArgs e)
|
||||
|
@ -928,6 +963,31 @@ namespace BizHawk.Client.EmuHawk
|
|||
hideWasLagFramesToolStripMenuItem.Checked = TasView.HideWasLagFrames;
|
||||
}
|
||||
|
||||
private void iconsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
denoteStatesWithIconsToolStripMenuItem.Checked = Settings.denoteStatesWithIcons;
|
||||
denoteStatesWithBGColorToolStripMenuItem.Checked = Settings.denoteStatesWithBGColor;
|
||||
denoteMarkersWithIconsToolStripMenuItem.Checked = Settings.denoteMarkersWithIcons;
|
||||
denoteMarkersWithBGColorToolStripMenuItem.Checked = Settings.denoteMarkersWithBGColor;
|
||||
}
|
||||
|
||||
private void followCursorToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
alwaysScrollToolStripMenuItem.Checked = Settings.FollowCursorAlwaysScroll;
|
||||
scrollToViewToolStripMenuItem.Checked = false;
|
||||
scrollToTopToolStripMenuItem.Checked = false;
|
||||
scrollToBottomToolStripMenuItem.Checked = false;
|
||||
scrollToCenterToolStripMenuItem.Checked = false;
|
||||
if (TasView.ScrollMethod == "near")
|
||||
scrollToViewToolStripMenuItem.Checked = true;
|
||||
else if (TasView.ScrollMethod == "top")
|
||||
scrollToTopToolStripMenuItem.Checked = true;
|
||||
else if (TasView.ScrollMethod == "bottom")
|
||||
scrollToBottomToolStripMenuItem.Checked = true;
|
||||
else
|
||||
scrollToCenterToolStripMenuItem.Checked = true;
|
||||
}
|
||||
|
||||
private void RotateMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
TasView.HorizontalOrientation ^= true;
|
||||
|
@ -971,14 +1031,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
TasView.ScrollMethod = Settings.FollowCursorScrollMethod = "center";
|
||||
}
|
||||
|
||||
private void iconsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
denoteStatesWithIconsToolStripMenuItem.Checked = Settings.denoteStatesWithIcons;
|
||||
denoteStatesWithBGColorToolStripMenuItem.Checked = Settings.denoteStatesWithBGColor;
|
||||
denoteMarkersWithIconsToolStripMenuItem.Checked = Settings.denoteMarkersWithIcons;
|
||||
denoteMarkersWithBGColorToolStripMenuItem.Checked = Settings.denoteMarkersWithBGColor;
|
||||
}
|
||||
|
||||
private void denoteStatesWithIconsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
TasView.denoteStatesWithIcons = Settings.denoteStatesWithIcons = denoteStatesWithIconsToolStripMenuItem.Checked;
|
||||
|
@ -1003,23 +1055,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
RefreshDialog();
|
||||
}
|
||||
|
||||
private void followCursorToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
alwaysScrollToolStripMenuItem.Checked = Settings.FollowCursorAlwaysScroll;
|
||||
scrollToViewToolStripMenuItem.Checked = false;
|
||||
scrollToTopToolStripMenuItem.Checked = false;
|
||||
scrollToBottomToolStripMenuItem.Checked = false;
|
||||
scrollToCenterToolStripMenuItem.Checked = false;
|
||||
if (TasView.ScrollMethod == "near")
|
||||
scrollToViewToolStripMenuItem.Checked = true;
|
||||
else if (TasView.ScrollMethod == "top")
|
||||
scrollToTopToolStripMenuItem.Checked = true;
|
||||
else if (TasView.ScrollMethod == "bottom")
|
||||
scrollToBottomToolStripMenuItem.Checked = true;
|
||||
else
|
||||
scrollToCenterToolStripMenuItem.Checked = true;
|
||||
}
|
||||
|
||||
private void wheelScrollSpeedToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
InputPrompt inputpromt = new InputPrompt();
|
||||
|
|
|
@ -38,7 +38,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private UndoHistoryForm _undoForm;
|
||||
private Timer _autosaveTimer = new Timer();
|
||||
private bool _autosaveAppendFilenamePending = false;
|
||||
|
||||
public ScreenshotPopupControl ScreenshotControl = new ScreenshotPopupControl
|
||||
{
|
||||
|
@ -71,7 +70,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
SeekingCutoffInterval = 2; // unused, relying on VisibleRows is smarter
|
||||
AutosaveInterval = 120000;
|
||||
AutosaveAsBk2 = false;
|
||||
AppendBackupToFilename = false;
|
||||
AutosaveAsBackupFile = false;
|
||||
BackupPerFileSave = false;
|
||||
// default to taseditor fashion
|
||||
denoteStatesWithIcons = false;
|
||||
denoteStatesWithBGColor = true;
|
||||
|
@ -92,7 +92,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
public int SeekingCutoffInterval { get; set; }
|
||||
public uint AutosaveInterval { get; set; }
|
||||
public bool AutosaveAsBk2 { get; set; }
|
||||
public bool AppendBackupToFilename { get; set; }
|
||||
public bool AutosaveAsBackupFile { get; set; }
|
||||
public bool BackupPerFileSave { get; set; }
|
||||
|
||||
public bool denoteStatesWithIcons { get; set; }
|
||||
public bool denoteStatesWithBGColor { get; set; }
|
||||
|
@ -166,19 +167,20 @@ namespace BizHawk.Client.EmuHawk
|
|||
if (!CurrentTasMovie.Changes || Settings.AutosaveInterval == 0)
|
||||
return;
|
||||
|
||||
if (Settings.AppendBackupToFilename)
|
||||
_autosaveAppendFilenamePending = true;
|
||||
|
||||
if (Settings.AutosaveAsBk2)
|
||||
if (Settings.AutosaveAsBackupFile)
|
||||
{
|
||||
ToBk2MenuItem_Click(sender, e);
|
||||
if (Settings.AutosaveAsBk2)
|
||||
SaveBk2BackupMenuItem_Click(sender, e);
|
||||
else
|
||||
SaveBackupMenuItem_Click(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveTasMenuItem_Click(sender, e);
|
||||
if (Settings.AutosaveAsBk2)
|
||||
ToBk2MenuItem_Click(sender, e);
|
||||
else
|
||||
SaveTas(sender, e);
|
||||
}
|
||||
|
||||
_autosaveAppendFilenamePending = false;
|
||||
}
|
||||
|
||||
private void InitializeSaveWorker()
|
||||
|
|
Loading…
Reference in New Issue