Skip to content

Commit

Permalink
tastudio autosave:
Browse files Browse the repository at this point in the history
- switch to appropriate method for backups
- option to save backup per file save
- menu command to save backup
  • Loading branch information
feos committed Jun 12, 2016
1 parent 3e02e27 commit 346c4e5
Show file tree
Hide file tree
Showing 7 changed files with 352 additions and 278 deletions.
7 changes: 4 additions & 3 deletions BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs
Expand Up @@ -29,7 +29,7 @@ public void SaveBackup()
Directory.CreateDirectory(directory_info.FullName);
}

Write(backupName);
Write(backupName, backup: true);
}

public virtual bool Load(bool preload)
Expand Down Expand Up @@ -168,7 +168,7 @@ public bool PreLoadHeaderAndLength(HawkFile hawkFile)
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)
Expand Down Expand Up @@ -207,7 +207,8 @@ protected virtual void Write(string fn)
}
}

Changes = false;
if (!backup)
Changes = false;
}

protected void ClearBeforeLoad()
Expand Down
Expand Up @@ -75,7 +75,7 @@ public static TasMovie ToTasMovie(this IMovie old, bool copy = false)
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));

Expand Down Expand Up @@ -114,7 +114,9 @@ public static Bk2Movie ToBk2(this IMovie old, bool copy = false)
bk2.BinarySavestate = old.BinarySavestate;
bk2.SaveRam = old.SaveRam;

bk2.Save();
if (!backup)
bk2.Save();

return bk2;
}

Expand Down
5 changes: 3 additions & 2 deletions BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs
Expand Up @@ -17,7 +17,7 @@ public partial class TasMovie
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)
Expand Down Expand Up @@ -83,7 +83,8 @@ protected override void Write(string fn)
bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(Session.ToString()));
}

Changes = false;
if (!backup)
Changes = false;
}

public override bool Load(bool preload)
Expand Down
383 changes: 208 additions & 175 deletions BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs

Large diffs are not rendered by default.

Expand Up @@ -112,7 +112,7 @@ public bool AskSaveChanges()
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)
{
Expand Down
203 changes: 119 additions & 84 deletions BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs
Expand Up @@ -76,47 +76,37 @@ private void OpenTasMenuItem_Click(object sender, EventArgs e)

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
{
_autosaveTimer.Stop();
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;
Expand Down Expand Up @@ -148,6 +138,50 @@ private void SaveAsTasMenuItem_Click(object sender, EventArgs e)
_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)
Expand Down Expand Up @@ -186,11 +220,6 @@ private void ToBk2MenuItem_Click(object sender, EventArgs e)
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();
Expand All @@ -207,6 +236,30 @@ private void ExitMenuItem_Click(object sender, EventArgs e)

#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)
Expand Down Expand Up @@ -238,30 +291,6 @@ private void showUndoHistoryToolStripMenuItem_Click(object sender, EventArgs e)
_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();
Expand Down Expand Up @@ -689,6 +718,16 @@ private void StateHistoryIntegrityCheckMenuItem_Click(object sender, EventArgs e

#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
Expand Down Expand Up @@ -780,18 +819,14 @@ private void AutosaveAsBk2MenuItem_Click(object sender, EventArgs e)
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)
Expand Down Expand Up @@ -928,6 +963,31 @@ private void HideLagFramesSubMenu_DropDownOpened(object sender, EventArgs e)
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;
Expand Down Expand Up @@ -971,14 +1031,6 @@ private void scrollToCenterToolStripMenuItem_Click(object sender, EventArgs e)
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;
Expand All @@ -1003,23 +1055,6 @@ private void denoteMarkersWithBGColorToolStripMenuItem_Click(object sender, Even
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();
Expand Down

0 comments on commit 346c4e5

Please sign in to comment.