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:
feos 2016-06-12 16:41:27 +03:00
parent 3e02e271fc
commit 346c4e56b3
7 changed files with 352 additions and 278 deletions

View File

@ -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()

View File

@ -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;
}

View File

@ -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

View File

@ -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)
{

View File

@ -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();

View File

@ -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()