Added documentation to IControlMainForm, renamed a few variables, moved IControlMainForm related code in MainForm to the same region.

This commit is contained in:
kylelyk 2014-08-19 19:24:17 +00:00
parent c0a124ecbb
commit 321c8c64bf
38 changed files with 926 additions and 907 deletions

View File

@ -3,9 +3,20 @@
public interface IControlMainform public interface IControlMainform
{ {
bool WantsToControlReadOnly { get; } bool WantsToControlReadOnly { get; }
/// <summary>
/// Function that is called by Mainform instead of using its own code
/// when a Tool sets WantsToControlReadOnly.
/// Should not be called directly.
/// </summary>
void ToggleReadOnly(); void ToggleReadOnly();
bool WantsToCOntrolStopMovie { get; } bool WantsToControlStopMovie { get; }
/// <summary>
/// Function that is called by Mainform instead of using its own code
/// when a Tool sets WantsToControlStopMovie.
/// Should not be called directly.
/// <remarks>Like MainForm's StopMovie(), saving the movie is part of this function's responsibility.</remarks>
/// </summary>
void StopMovie(); void StopMovie();
} }
} }

View File

@ -75,18 +75,5 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.OSD.AddMessage("Replaying movie file in read-only mode"); GlobalWin.OSD.AddMessage("Replaying movie file in read-only mode");
} }
} }
public void StopMovie(bool saveChanges = true)
{
if (IsSlave && _master.WantsToCOntrolStopMovie)
{
_master.StopMovie();
}
else
{
Global.MovieSession.StopMovie(saveChanges);
SetMainformMovieInfo();
}
}
} }
} }

View File

@ -1966,26 +1966,6 @@ namespace BizHawk.Client.EmuHawk
Global.Config.DisplayInput ^= true; Global.Config.DisplayInput ^= true;
} }
private void ToggleReadOnly()
{
if (IsSlave && _master.WantsToControlReadOnly)
{
_master.ToggleReadOnly();
}
else
{
if (Global.MovieSession.Movie.IsActive)
{
Global.MovieSession.ReadOnly ^= true;
GlobalWin.OSD.AddMessage(Global.MovieSession.ReadOnly ? "Movie read-only mode" : "Movie read+write mode");
}
else
{
GlobalWin.OSD.AddMessage("No movie active");
}
}
}
private static void VolumeUp() private static void VolumeUp()
{ {
Global.Config.SoundVolume += 10; Global.Config.SoundVolume += 10;
@ -3085,7 +3065,7 @@ namespace BizHawk.Client.EmuHawk
// Still needs a good bit of refactoring // Still needs a good bit of refactoring
public bool LoadRom(string path, bool? deterministicemulation = null) public bool LoadRom(string path, bool? deterministicemulation = null)
{ {
// If deterministic emulation is passed in, respect that value regardless, else determine a good value (currently that simply means movies require detemrinistic emulaton) // If deterministic emulation is passed in, respect that value regardless, else determine a good value (currently that simply means movies require deterministic emulaton)
bool deterministic = deterministicemulation.HasValue ? bool deterministic = deterministicemulation.HasValue ?
deterministicemulation.Value : deterministicemulation.Value :
Global.MovieSession.Movie.IsActive; Global.MovieSession.Movie.IsActive;
@ -3372,26 +3352,64 @@ namespace BizHawk.Client.EmuHawk
#endregion #endregion
// TODO: move me #region Tool Control API
private IControlMainform _master;
// TODO: move me
public IControlMainform master { get; private set; }
public void RelinquishControl(IControlMainform master) public void RelinquishControl(IControlMainform master)
{ {
_master = master; this.master = master;
} }
private void ToggleReadOnly()
{
if (IsSlave && master.WantsToControlReadOnly)
{
master.ToggleReadOnly();
}
else
{
if (Global.MovieSession.Movie.IsActive)
{
Global.MovieSession.ReadOnly ^= true;
GlobalWin.OSD.AddMessage(Global.MovieSession.ReadOnly ? "Movie read-only mode" : "Movie read+write mode");
}
else
{
GlobalWin.OSD.AddMessage("No movie active");
}
}
}
public void StopMovie(bool saveChanges = true)
{
if (IsSlave && master.WantsToControlStopMovie)
{
master.StopMovie();
}
else
{
Global.MovieSession.StopMovie(saveChanges);
SetMainformMovieInfo();
UpdateStatusSlots();
}
}
private bool IsSlave private bool IsSlave
{ {
get { return _master != null; } get { return master != null; }
} }
public void TakeControl() public void TakeBackControl()
{ {
_master = null; master = null;
} }
private void GBAcoresettingsToolStripMenuItem1_Click(object sender, EventArgs e) private void GBAcoresettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{ {
GenericCoreConfig.DoDialog(this, "Gameboy Advance Settings"); GenericCoreConfig.DoDialog(this, "Gameboy Advance Settings");
} }
}
#endregion
}
} }

View File

@ -11,7 +11,7 @@ namespace BizHawk.Client.EmuHawk
private NES.NESSettings _oldSettings; private NES.NESSettings _oldSettings;
private NES.NESSettings _settings; private NES.NESSettings _settings;
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void UpdateValues() public void UpdateValues()
{ {

View File

@ -154,7 +154,7 @@ namespace BizHawk.Client.EmuHawk
// TODO // TODO
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -52,7 +52,7 @@ namespace BizHawk.Client.EmuHawk
InitializeComponent(); InitializeComponent();
Closing += (o, e) => Closing += (o, e) =>
{ {
if (AskSave()) if (AskSaveChanges())
{ {
SaveConfigSettings(); SaveConfigSettings();
} }
@ -99,7 +99,7 @@ namespace BizHawk.Client.EmuHawk
public void LoadFileFromRecent(string path) public void LoadFileFromRecent(string path)
{ {
var askResult = !Global.CheatList.Changes || AskSave(); var askResult = !Global.CheatList.Changes || AskSaveChanges();
if (askResult) if (askResult)
{ {
var loadResult = Global.CheatList.Load(path, append: false); var loadResult = Global.CheatList.Load(path, append: false);
@ -123,7 +123,7 @@ namespace BizHawk.Client.EmuHawk
: Path.GetFileName(Global.CheatList.CurrentFileName) + (Global.CheatList.Changes ? " *" : string.Empty); : Path.GetFileName(Global.CheatList.CurrentFileName) + (Global.CheatList.Changes ? " *" : string.Empty);
} }
public bool AskSave() public bool AskSaveChanges()
{ {
if (Global.CheatList.Changes) if (Global.CheatList.Changes)
{ {
@ -155,7 +155,7 @@ namespace BizHawk.Client.EmuHawk
var result = true; var result = true;
if (Global.CheatList.Changes) if (Global.CheatList.Changes)
{ {
result = AskSave(); result = AskSaveChanges();
} }
if (result) if (result)
@ -433,7 +433,7 @@ namespace BizHawk.Client.EmuHawk
private void StartNewList() private void StartNewList()
{ {
var result = !Global.CheatList.Changes || AskSave(); var result = !Global.CheatList.Changes || AskSaveChanges();
if (result) if (result)
{ {
Global.CheatList.NewList(ToolManager.GenerateDefaultCheatFilename()); Global.CheatList.NewList(ToolManager.GenerateDefaultCheatFilename());
@ -445,7 +445,7 @@ namespace BizHawk.Client.EmuHawk
private void NewList() private void NewList()
{ {
var result = !Global.CheatList.Changes || AskSave(); var result = !Global.CheatList.Changes || AskSaveChanges();
if (result) if (result)
{ {
StartNewList(); StartNewList();

View File

@ -53,7 +53,7 @@ namespace BizHawk.Client.EmuHawk
} }
} }
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public GBGPUView() public GBGPUView()

View File

@ -15,7 +15,7 @@ namespace BizHawk.Client.EmuHawk
#region Public #region Public
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }

View File

@ -25,7 +25,7 @@ namespace BizHawk.Client.EmuHawk
MobileDetailView memory; MobileDetailView memory;
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public GBAGPUView() public GBAGPUView()

View File

@ -60,7 +60,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }

View File

@ -145,7 +145,7 @@ namespace BizHawk.Client.EmuHawk
UpdateValues(); UpdateValues();
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -96,7 +96,7 @@ namespace BizHawk.Client.EmuHawk
get { return false; } get { return false; }
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -26,7 +26,7 @@
/// Return false to tell the client to back out of an action (such as closing the emulator) /// Return false to tell the client to back out of an action (such as closing the emulator)
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
bool AskSave(); bool AskSaveChanges();
/// <summary> /// <summary>

View File

@ -38,7 +38,7 @@ namespace BizHawk.Client.EmuHawk
LuaImp = new EmuLuaLibrary(this); LuaImp = new EmuLuaLibrary(this);
Closing += (o, e) => Closing += (o, e) =>
{ {
if (AskSave()) if (AskSaveChanges())
{ {
SaveConfigSettings(); SaveConfigSettings();
GlobalWin.DisplayManager.ClearLuaSurfaces(); GlobalWin.DisplayManager.ClearLuaSurfaces();
@ -500,7 +500,7 @@ namespace BizHawk.Client.EmuHawk
var doload = true; var doload = true;
if (_luaList.Changes) if (_luaList.Changes)
{ {
doload = AskSave(); doload = AskSaveChanges();
} }
if (doload) if (doload)
@ -518,7 +518,7 @@ namespace BizHawk.Client.EmuHawk
} }
} }
public bool AskSave() public bool AskSaveChanges()
{ {
if (_luaList.Changes) if (_luaList.Changes)
{ {
@ -587,7 +587,7 @@ namespace BizHawk.Client.EmuHawk
private void NewSessionMenuItem_Click(object sender, EventArgs e) private void NewSessionMenuItem_Click(object sender, EventArgs e)
{ {
var result = !_luaList.Changes || AskSave(); var result = !_luaList.Changes || AskSaveChanges();
if (result) if (result)
{ {

View File

@ -26,7 +26,7 @@ namespace BizHawk.Client.EmuHawk
public DisasmOp(int s, string m) { size = s; mnemonic = m; } public DisasmOp(int s, string m) { size = s; mnemonic = m; }
} }
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public NESDebugger() public NESDebugger()

View File

@ -37,7 +37,7 @@ namespace BizHawk.Client.EmuHawk
public int? Value { get { return _value; } } public int? Value { get { return _value; } }
public int? Compare { get { return _compare; } } public int? Compare { get { return _compare; } }
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void Restart() public void Restart()
{ {

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public void Restart() public void Restart()

View File

@ -52,7 +52,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public void UpdateValues() public void UpdateValues()

View File

@ -52,7 +52,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return true; } } public bool UpdateBefore { get { return true; } }
public unsafe void Generate() public unsafe void Generate()

View File

@ -105,7 +105,7 @@ namespace BizHawk.Client.EmuHawk
CdlTextbox.Lines = lines.ToArray(); CdlTextbox.Lines = lines.ToArray();
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -169,7 +169,7 @@ namespace BizHawk.Client.EmuHawk
{ {
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -168,7 +168,7 @@ namespace BizHawk.Client.EmuHawk
checkBoxVDC2_CheckedChanged(null, null); checkBoxVDC2_CheckedChanged(null, null);
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -167,7 +167,7 @@ namespace BizHawk.Client.EmuHawk
UpdateValues(); UpdateValues();
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -59,7 +59,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void Restart() public void Restart()
{ {

View File

@ -44,7 +44,7 @@ namespace BizHawk.Client.EmuHawk
List<DisplayTypeItem> displayTypeItems = new List<DisplayTypeItem>(); List<DisplayTypeItem> displayTypeItems = new List<DisplayTypeItem>();
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public void Restart() public void Restart()
{ {

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
GlobalWin.OSD.AddMessage("TAStudio does not allow manual readonly toggle"); GlobalWin.OSD.AddMessage("TAStudio does not allow manual readonly toggle");
} }
public bool WantsToCOntrolStopMovie { get { return true; } } public bool WantsToControlStopMovie { get { return true; } }
public void StopMovie() public void StopMovie()
{ {
this.Focus(); this.Focus();

View File

@ -5,8 +5,6 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class TAStudio : IToolForm public partial class TAStudio : IToolForm
{ {
public bool UpdateBefore { get { return false; } }
public void UpdateValues() public void UpdateValues()
{ {
if (!IsHandleCreated || IsDisposed) if (!IsHandleCreated || IsDisposed)
@ -15,9 +13,9 @@ namespace BizHawk.Client.EmuHawk
} }
RefreshDialog(); RefreshDialog();
if (_tas.IsRecording) if (_currentTasMovie.IsRecording)
{ {
TasView.ensureVisible(_tas.InputLogLength - 1); TasView.ensureVisible(_currentTasMovie.InputLogLength - 1);
} }
else else
{ {
@ -37,15 +35,16 @@ namespace BizHawk.Client.EmuHawk
return; return;
} }
if (_tas != null) if (_currentTasMovie != null)
{ {
RefreshDialog(); RefreshDialog();
} }
} }
public bool AskSave()
public bool AskSaveChanges()
{ {
if (_tas != null && _tas.Changes) if (_currentTasMovie != null && _currentTasMovie.Changes)
{ {
GlobalWin.Sound.StopSound(); GlobalWin.Sound.StopSound();
var result = MessageBox.Show( var result = MessageBox.Show(
@ -62,7 +61,7 @@ namespace BizHawk.Client.EmuHawk
} }
else if (result == DialogResult.No) else if (result == DialogResult.No)
{ {
_tas.ClearChanges(); _currentTasMovie.ClearChanges();
return true; return true;
} }
else if (result == DialogResult.Cancel) else if (result == DialogResult.Cancel)
@ -73,5 +72,7 @@ namespace BizHawk.Client.EmuHawk
return true; return true;
} }
public bool UpdateBefore { get { return false; } }
} }
} }

View File

@ -49,7 +49,7 @@ namespace BizHawk.Client.EmuHawk
} }
// "pending" frame logic // "pending" frame logic
if (index == Global.Emulator.Frame && index == _tas.InputLogLength) if (index == Global.Emulator.Frame && index == _currentTasMovie.InputLogLength)
{ {
if (columnName == FrameColumnName) if (columnName == FrameColumnName)
{ {
@ -61,7 +61,7 @@ namespace BizHawk.Client.EmuHawk
return; return;
} }
var record = _tas[index]; var record = _currentTasMovie[index];
if (columnName == FrameColumnName) if (columnName == FrameColumnName)
{ {
@ -69,7 +69,7 @@ namespace BizHawk.Client.EmuHawk
{ {
color = CurrentFrame_FrameCol; color = CurrentFrame_FrameCol;
} }
else if (_tas.Markers.IsMarker(index)) else if (_currentTasMovie.Markers.IsMarker(index))
{ {
color = Marker_FrameCol; color = Marker_FrameCol;
} }
@ -135,11 +135,11 @@ namespace BizHawk.Client.EmuHawk
} }
else else
{ {
if (index < _tas.InputLogLength) if (index < _currentTasMovie.InputLogLength)
{ {
text = _tas.DisplayValue(index, columnName); text = _currentTasMovie.DisplayValue(index, columnName);
} }
else if (Global.Emulator.Frame == _tas.InputLogLength) // In this situation we have a "pending" frame for the user to click else if (Global.Emulator.Frame == _currentTasMovie.InputLogLength) // In this situation we have a "pending" frame for the user to click
{ {
text = TasMovie.CreateDisplayValueForButton( text = TasMovie.CreateDisplayValueForButton(
Global.ClickyVirtualPadController, Global.ClickyVirtualPadController,
@ -213,12 +213,12 @@ namespace BizHawk.Client.EmuHawk
TasView.Refresh(); TasView.Refresh();
_startBoolDrawColumn = TasView.PointedCell.Column; _startBoolDrawColumn = TasView.PointedCell.Column;
_boolPaintState = _tas.BoolIsPressed(frame, buttonName); _boolPaintState = _currentTasMovie.BoolIsPressed(frame, buttonName);
} }
else else
{ {
_startFloatDrawColumn = TasView.PointedCell.Column; _startFloatDrawColumn = TasView.PointedCell.Column;
_floatPaintState = _tas.GetFloatValue(frame, buttonName); _floatPaintState = _currentTasMovie.GetFloatValue(frame, buttonName);
} }
} }
} }
@ -309,9 +309,9 @@ namespace BizHawk.Client.EmuHawk
{ {
for (var i = startVal; i < endVal; i++) for (var i = startVal; i < endVal; i++)
{ {
if (i < _tas.InputLogLength) // TODO: how do we really want to handle the user setting the float state of the pending frame? if (i < _currentTasMovie.InputLogLength) // TODO: how do we really want to handle the user setting the float state of the pending frame?
{ {
_tas.SetFloatState(i, _startFloatDrawColumn, _floatPaintState); // Notice it uses new row, old column, you can only paint across a single column _currentTasMovie.SetFloatState(i, _startFloatDrawColumn, _floatPaintState); // Notice it uses new row, old column, you can only paint across a single column
GoToLastEmulatedFrameIfNecessary(TasView.PointedCell.Row.Value); GoToLastEmulatedFrameIfNecessary(TasView.PointedCell.Row.Value);
} }
} }

View File

@ -24,7 +24,7 @@ namespace BizHawk.Client.EmuHawk
private int _defaultWidth; private int _defaultWidth;
private int _defaultHeight; private int _defaultHeight;
private TasMovie _tas; private TasMovie _currentTasMovie;
private bool _originalRewindStatus; // The client rewind status before TAStudio was engaged (used to restore when disengaged) private bool _originalRewindStatus; // The client rewind status before TAStudio was engaged (used to restore when disengaged)
private MovieEndAction _originalEndAction; // The movie end behavior selected by the user (that is overridden by TAStudio) private MovieEndAction _originalEndAction; // The movie end behavior selected by the user (that is overridden by TAStudio)
@ -60,7 +60,7 @@ namespace BizHawk.Client.EmuHawk
public TasMovie CurrentMovie public TasMovie CurrentMovie
{ {
get { return _tas; } get { return _currentTasMovie; }
} }
private void TastudioToStopMovie() private void TastudioToStopMovie()
@ -77,68 +77,12 @@ namespace BizHawk.Client.EmuHawk
TasView.QueryItemText += TasView_QueryItemText; TasView.QueryItemText += TasView_QueryItemText;
TasView.QueryItemBkColor += TasView_QueryItemBkColor; TasView.QueryItemBkColor += TasView_QueryItemBkColor;
TasView.VirtualMode = true; TasView.VirtualMode = true;
Closing += (o, e) =>
{
if (AskSave())
{
SaveConfigSettings();
TastudioToStopMovie();
DisengageTastudio();
}
else
{
e.Cancel = true;
}
};
TopMost = Global.Config.TAStudioSettings.TopMost; TopMost = Global.Config.TAStudioSettings.TopMost;
TasView.InputPaintingMode = Global.Config.TAStudioDrawInput; TasView.InputPaintingMode = Global.Config.TAStudioDrawInput;
TasView.PointedCellChanged += TasView_PointedCellChanged; TasView.PointedCellChanged += TasView_PointedCellChanged;
} }
private void Tastudio_Load(object sender, EventArgs e)
{
// Start Scenario 1: A regular movie is active
if (Global.MovieSession.Movie.IsActive && !(Global.MovieSession.Movie is TasMovie))
{
var result = MessageBox.Show("In order to use Tastudio, a new project must be created from the current movie\nThe current movie will be saved and closed, and a new project file will be created\nProceed?", "Convert movie", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
ConvertCurrentMovieToTasproj();
}
else
{
Close();
return;
}
}
// Start Scenario 2: A tasproj is already active
else if (Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie is TasMovie)
{
// Nothing to do
}
// Start Scenario 3: No movie, but user wants to autload their last project
else if (Global.Config.AutoloadTAStudioProject && !string.IsNullOrEmpty(Global.Config.RecentTas.MostRecent))
{
LoadProject(Global.Config.RecentTas.MostRecent);
}
// Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project
else
{
NewTasMovie();
GlobalWin.MainForm.StartNewMovie(_tas, record: true);
_tas.CaptureCurrentState();
}
EngageTastudio();
SetUpColumns();
LoadConfigSettings();
RefreshDialog();
}
private void ConvertCurrentMovieToTasproj() private void ConvertCurrentMovieToTasproj()
{ {
Global.MovieSession.Movie.Save(); Global.MovieSession.Movie.Save();
@ -150,12 +94,12 @@ namespace BizHawk.Client.EmuHawk
{ {
GlobalWin.MainForm.PauseOnFrame = null; GlobalWin.MainForm.PauseOnFrame = null;
GlobalWin.OSD.AddMessage("TAStudio engaged"); GlobalWin.OSD.AddMessage("TAStudio engaged");
_tas = Global.MovieSession.Movie as TasMovie; _currentTasMovie = Global.MovieSession.Movie as TasMovie;
GlobalWin.MainForm.PauseEmulator(); GlobalWin.MainForm.PauseEmulator();
GlobalWin.MainForm.RelinquishControl(this); GlobalWin.MainForm.RelinquishControl(this);
_originalRewindStatus = Global.Rewinder.RewindActive; _originalRewindStatus = Global.Rewinder.RewindActive;
_originalEndAction = Global.Config.MovieEndAction; _originalEndAction = Global.Config.MovieEndAction;
MarkerControl.Markers = _tas.Markers; MarkerControl.Markers = _currentTasMovie.Markers;
GlobalWin.MainForm.EnableRewind(false); GlobalWin.MainForm.EnableRewind(false);
Global.Config.MovieEndAction = MovieEndAction.Record; Global.Config.MovieEndAction = MovieEndAction.Record;
GlobalWin.MainForm.SetMainformMovieInfo(); GlobalWin.MainForm.SetMainformMovieInfo();
@ -166,7 +110,7 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.MainForm.PauseOnFrame = null; GlobalWin.MainForm.PauseOnFrame = null;
GlobalWin.OSD.AddMessage("TAStudio disengaged"); GlobalWin.OSD.AddMessage("TAStudio disengaged");
Global.MovieSession.Movie = MovieService.DefaultInstance; Global.MovieSession.Movie = MovieService.DefaultInstance;
GlobalWin.MainForm.TakeControl(); GlobalWin.MainForm.TakeBackControl();
GlobalWin.MainForm.EnableRewind(_originalRewindStatus); GlobalWin.MainForm.EnableRewind(_originalRewindStatus);
Global.Config.MovieEndAction = _originalEndAction; Global.Config.MovieEndAction = _originalEndAction;
GlobalWin.MainForm.SetMainformMovieInfo(); GlobalWin.MainForm.SetMainformMovieInfo();
@ -175,10 +119,10 @@ namespace BizHawk.Client.EmuHawk
private void NewTasMovie() private void NewTasMovie()
{ {
Global.MovieSession.Movie = new TasMovie(); Global.MovieSession.Movie = new TasMovie();
_tas = Global.MovieSession.Movie as TasMovie; _currentTasMovie = Global.MovieSession.Movie as TasMovie;
_tas.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename _currentTasMovie.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename
_tas.PopulateWithDefaultHeaderValues(); _currentTasMovie.PopulateWithDefaultHeaderValues();
_tas.ClearChanges(); _currentTasMovie.ClearChanges();
} }
private static string DefaultTasProjName() private static string DefaultTasProjName()
@ -190,17 +134,17 @@ namespace BizHawk.Client.EmuHawk
private void StartNewTasMovie() private void StartNewTasMovie()
{ {
if (AskSave()) if (AskSaveChanges())
{ {
NewTasMovie(); NewTasMovie();
GlobalWin.MainForm.StartNewMovie(_tas, record: true); GlobalWin.MainForm.StartNewMovie(_currentTasMovie, record: true);
RefreshDialog(); RefreshDialog();
} }
} }
public void LoadProject(string path) public void LoadProject(string path)
{ {
if (AskSave()) if (AskSaveChanges())
{ {
var movie = new TasMovie var movie = new TasMovie
{ {
@ -214,7 +158,7 @@ namespace BizHawk.Client.EmuHawk
} }
GlobalWin.MainForm.StartNewMovie(movie, record: false); GlobalWin.MainForm.StartNewMovie(movie, record: false);
_tas = Global.MovieSession.Movie as TasMovie; _currentTasMovie = Global.MovieSession.Movie as TasMovie;
Global.Config.RecentTas.Add(path); Global.Config.RecentTas.Add(path);
RefreshDialog(); RefreshDialog();
} }
@ -223,7 +167,7 @@ namespace BizHawk.Client.EmuHawk
public void RefreshDialog() public void RefreshDialog()
{ {
TasView.BlazingFast = true; TasView.BlazingFast = true;
TasView.ItemCount = _tas.InputLogLength + 1; TasView.ItemCount = _currentTasMovie.InputLogLength + 1;
TasView.BlazingFast = false; TasView.BlazingFast = false;
if (MarkerControl != null) if (MarkerControl != null)
{ {
@ -236,7 +180,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (frame != Global.Emulator.Frame) // Don't go to a frame if you are already on it! if (frame != Global.Emulator.Frame) // Don't go to a frame if you are already on it!
{ {
if (frame <= _tas.LastEmulatedFrame) if (frame <= _currentTasMovie.LastEmulatedFrame)
{ {
GoToFrame(frame); GoToFrame(frame);
} }
@ -307,16 +251,16 @@ namespace BizHawk.Client.EmuHawk
// If near a greenzone item, load and emulate // If near a greenzone item, load and emulate
// Do capturing and recording as needed // Do capturing and recording as needed
if (frame < _tas.InputLogLength) if (frame < _currentTasMovie.InputLogLength)
{ {
if (frame < Global.Emulator.Frame) // We are rewinding if (frame < Global.Emulator.Frame) // We are rewinding
{ {
var goToFrame = frame == 0 ? 0 : frame - 1; var goToFrame = frame == 0 ? 0 : frame - 1;
if (_tas[goToFrame].HasState) // Go back 1 frame and emulate if (_currentTasMovie[goToFrame].HasState) // Go back 1 frame and emulate
{ {
_tas.SwitchToPlay(); _currentTasMovie.SwitchToPlay();
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[goToFrame].State.ToArray()))); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_currentTasMovie[goToFrame].State.ToArray())));
if (goToFrame > 0) // We can't emulate up to frame 0! if (goToFrame > 0) // We can't emulate up to frame 0!
{ {
@ -329,8 +273,8 @@ namespace BizHawk.Client.EmuHawk
} }
else else
{ {
_tas.SwitchToPlay(); _currentTasMovie.SwitchToPlay();
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[_tas.LastEmulatedFrame].State.ToArray()))); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_currentTasMovie[_currentTasMovie.LastEmulatedFrame].State.ToArray())));
GlobalWin.MainForm.UnpauseEmulator(); GlobalWin.MainForm.UnpauseEmulator();
GlobalWin.MainForm.PauseOnFrame = frame; GlobalWin.MainForm.PauseOnFrame = frame;
} }
@ -338,10 +282,10 @@ namespace BizHawk.Client.EmuHawk
else // We are going foward else // We are going foward
{ {
var goToFrame = frame - 1; var goToFrame = frame - 1;
if (_tas[goToFrame].HasState) // Can we go directly there? if (_currentTasMovie[goToFrame].HasState) // Can we go directly there?
{ {
_tas.SwitchToPlay(); _currentTasMovie.SwitchToPlay();
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[goToFrame].State.ToArray()))); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_currentTasMovie[goToFrame].State.ToArray())));
Global.Emulator.FrameAdvance(true); Global.Emulator.FrameAdvance(true);
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
TasView.ensureVisible(frame); TasView.ensureVisible(frame);
@ -349,8 +293,8 @@ namespace BizHawk.Client.EmuHawk
} }
else // TODO: this assume that there are no "gaps", instead of last emulated frame, we should do last frame from X else // TODO: this assume that there are no "gaps", instead of last emulated frame, we should do last frame from X
{ {
_tas.SwitchToPlay(); _currentTasMovie.SwitchToPlay();
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[_tas.LastEmulatedFrame].State.ToArray()))); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_currentTasMovie[_currentTasMovie.LastEmulatedFrame].State.ToArray())));
GlobalWin.MainForm.UnpauseEmulator(); GlobalWin.MainForm.UnpauseEmulator();
GlobalWin.MainForm.PauseOnFrame = frame; GlobalWin.MainForm.PauseOnFrame = frame;
} }
@ -359,8 +303,8 @@ namespace BizHawk.Client.EmuHawk
else // Emulate to a future frame else // Emulate to a future frame
{ {
// TODO: get the last greenzone frame and go there // TODO: get the last greenzone frame and go there
_tas.SwitchToPlay(); // TODO: stop copy/pasting this logic _currentTasMovie.SwitchToPlay(); // TODO: stop copy/pasting this logic
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[_tas.LastEmulatedFrame].State.ToArray()))); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_currentTasMovie[_currentTasMovie.LastEmulatedFrame].State.ToArray())));
GlobalWin.MainForm.UnpauseEmulator(); GlobalWin.MainForm.UnpauseEmulator();
GlobalWin.MainForm.PauseOnFrame = frame; GlobalWin.MainForm.PauseOnFrame = frame;
} }
@ -374,7 +318,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (Global.Emulator.Frame > 0) if (Global.Emulator.Frame > 0)
{ {
var prevMarker = _tas.Markers.Previous(Global.Emulator.Frame); var prevMarker = _currentTasMovie.Markers.Previous(Global.Emulator.Frame);
var prev = prevMarker != null ? prevMarker.Frame : 0; var prev = prevMarker != null ? prevMarker.Frame : 0;
GoToFrame(prev); GoToFrame(prev);
} }
@ -400,8 +344,8 @@ namespace BizHawk.Client.EmuHawk
public void GoToNextMarker() public void GoToNextMarker()
{ {
var nextMarker = _tas.Markers.Next(Global.Emulator.Frame); var nextMarker = _currentTasMovie.Markers.Next(Global.Emulator.Frame);
var next = nextMarker != null ? nextMarker.Frame : _tas.InputLogLength - 1; var next = nextMarker != null ? nextMarker.Frame : _currentTasMovie.InputLogLength - 1;
GoToFrame(next); GoToFrame(next);
} }
@ -447,7 +391,7 @@ namespace BizHawk.Client.EmuHawk
if (result == DialogResult.OK) if (result == DialogResult.OK)
{ {
_tas.Markers.Add(markerFrame, i.PromptText); _currentTasMovie.Markers.Add(markerFrame, i.PromptText);
MarkerControl.Refresh(); MarkerControl.Refresh();
} }
@ -463,11 +407,11 @@ namespace BizHawk.Client.EmuHawk
// Sets either the pending frame or the tas input log // Sets either the pending frame or the tas input log
private void ToggleBoolState(int frame, string buttonName) private void ToggleBoolState(int frame, string buttonName)
{ {
if (frame < _tas.InputLogLength) if (frame < _currentTasMovie.InputLogLength)
{ {
_tas.ToggleBoolState(frame, buttonName); _currentTasMovie.ToggleBoolState(frame, buttonName);
} }
else if (frame == Global.Emulator.Frame && frame == _tas.InputLogLength) else if (frame == Global.Emulator.Frame && frame == _currentTasMovie.InputLogLength)
{ {
Global.ClickyVirtualPadController.Toggle(buttonName); Global.ClickyVirtualPadController.Toggle(buttonName);
} }
@ -477,11 +421,11 @@ namespace BizHawk.Client.EmuHawk
// Sets either the pending frame or the tas input log // Sets either the pending frame or the tas input log
private void SetBoolState(int frame, string buttonName, bool value) private void SetBoolState(int frame, string buttonName, bool value)
{ {
if (frame < _tas.InputLogLength) if (frame < _currentTasMovie.InputLogLength)
{ {
_tas.SetBoolState(frame, buttonName, value); _currentTasMovie.SetBoolState(frame, buttonName, value);
} }
else if (frame == Global.Emulator.Frame && frame == _tas.InputLogLength) else if (frame == Global.Emulator.Frame && frame == _currentTasMovie.InputLogLength)
{ {
Global.ClickyVirtualPadController.SetBool(buttonName, value); Global.ClickyVirtualPadController.SetBool(buttonName, value);
} }
@ -495,7 +439,7 @@ namespace BizHawk.Client.EmuHawk
{ {
ToBk2MenuItem.Enabled = ToBk2MenuItem.Enabled =
SaveTASMenuItem.Enabled = SaveTASMenuItem.Enabled =
!string.IsNullOrWhiteSpace(_tas.Filename); !string.IsNullOrWhiteSpace(_currentTasMovie.Filename);
} }
private void RecentSubMenu_DropDownOpened(object sender, EventArgs e) private void RecentSubMenu_DropDownOpened(object sender, EventArgs e)
@ -513,49 +457,49 @@ namespace BizHawk.Client.EmuHawk
private void OpenTasMenuItem_Click(object sender, EventArgs e) private void OpenTasMenuItem_Click(object sender, EventArgs e)
{ {
if (AskSave()) if (AskSaveChanges())
{ {
var file = ToolHelpers.GetTasProjFileFromUser(_tas.Filename); var file = ToolHelpers.GetTasProjFileFromUser(_currentTasMovie.Filename);
if (file != null) if (file != null)
{ {
_tas.Filename = file.FullName; _currentTasMovie.Filename = file.FullName;
_tas.Load(); _currentTasMovie.Load();
Global.Config.RecentTas.Add(_tas.Filename); Global.Config.RecentTas.Add(_currentTasMovie.Filename);
RefreshDialog(); RefreshDialog();
MessageStatusLabel.Text = Path.GetFileName(_tas.Filename) + " loaded."; MessageStatusLabel.Text = Path.GetFileName(_currentTasMovie.Filename) + " loaded.";
} }
} }
} }
private void SaveTasMenuItem_Click(object sender, EventArgs e) private void SaveTasMenuItem_Click(object sender, EventArgs e)
{ {
if (string.IsNullOrEmpty(_tas.Filename)) if (string.IsNullOrEmpty(_currentTasMovie.Filename))
{ {
SaveAsTasMenuItem_Click(sender, e); SaveAsTasMenuItem_Click(sender, e);
} }
else else
{ {
_tas.Save(); _currentTasMovie.Save();
MessageStatusLabel.Text = Path.GetFileName(_tas.Filename) + " saved."; MessageStatusLabel.Text = Path.GetFileName(_currentTasMovie.Filename) + " saved.";
Global.Config.RecentTas.Add(_tas.Filename); Global.Config.RecentTas.Add(_currentTasMovie.Filename);
} }
} }
private void SaveAsTasMenuItem_Click(object sender, EventArgs e) private void SaveAsTasMenuItem_Click(object sender, EventArgs e)
{ {
var file = ToolHelpers.GetTasProjSaveFileFromUser(_tas.Filename); var file = ToolHelpers.GetTasProjSaveFileFromUser(_currentTasMovie.Filename);
if (file != null) if (file != null)
{ {
_tas.Filename = file.FullName; _currentTasMovie.Filename = file.FullName;
_tas.Save(); _currentTasMovie.Save();
Global.Config.RecentTas.Add(_tas.Filename); Global.Config.RecentTas.Add(_currentTasMovie.Filename);
MessageStatusLabel.Text = Path.GetFileName(_tas.Filename) + " saved."; MessageStatusLabel.Text = Path.GetFileName(_currentTasMovie.Filename) + " saved.";
} }
} }
private void ToBk2MenuItem_Click(object sender, EventArgs e) private void ToBk2MenuItem_Click(object sender, EventArgs e)
{ {
var bk2 = _tas.ToBk2(); var bk2 = _currentTasMovie.ToBk2();
bk2.Save(); bk2.Save();
MessageStatusLabel.Text = Path.GetFileName(bk2.Filename) + " created."; MessageStatusLabel.Text = Path.GetFileName(bk2.Filename) + " created.";
@ -581,7 +525,6 @@ namespace BizHawk.Client.EmuHawk
CloneMenuItem.Enabled = CloneMenuItem.Enabled =
TruncateMenuItem.Enabled = TruncateMenuItem.Enabled =
TasView.SelectedIndices().Any(); TasView.SelectedIndices().Any();
ReselectClipboardMenuItem.Enabled = ReselectClipboardMenuItem.Enabled =
PasteMenuItem.Enabled = PasteMenuItem.Enabled =
PasteInsertMenuItem.Enabled = PasteInsertMenuItem.Enabled =
@ -602,11 +545,11 @@ namespace BizHawk.Client.EmuHawk
{ {
if (TasView.SelectedIndices().Any()) if (TasView.SelectedIndices().Any())
{ {
var prevMarker = _tas.Markers.PreviousOrCurrent(LastSelectedIndex); var prevMarker = _currentTasMovie.Markers.PreviousOrCurrent(LastSelectedIndex);
var nextMarker = _tas.Markers.Next(LastSelectedIndex); var nextMarker = _currentTasMovie.Markers.Next(LastSelectedIndex);
int prev = prevMarker != null ? prevMarker.Frame : 0; int prev = prevMarker != null ? prevMarker.Frame : 0;
int next = nextMarker != null ? nextMarker.Frame : _tas.InputLogLength; int next = nextMarker != null ? nextMarker.Frame : _currentTasMovie.InputLogLength;
for (int i = prev; i < next; i++) for (int i = prev; i < next; i++)
{ {
@ -633,10 +576,9 @@ namespace BizHawk.Client.EmuHawk
var sb = new StringBuilder(); var sb = new StringBuilder();
for (var i = 0; i < list.Count; i++) for (var i = 0; i < list.Count; i++)
{ {
var input = _tas.GetInputState(list[i]); var input = _currentTasMovie.GetInputState(list[i]);
_tasClipboard.Add(new TasClipboardEntry(list[i], input)); _tasClipboard.Add(new TasClipboardEntry(list[i], input));
var lg = _tas.LogGeneratorInstance(); var lg = _currentTasMovie.LogGeneratorInstance();
lg.SetSource(input);
sb.AppendLine(lg.GenerateLogEntry()); sb.AppendLine(lg.GenerateLogEntry());
} }
@ -654,7 +596,7 @@ namespace BizHawk.Client.EmuHawk
{ {
var needsToRollback = !(FirstSelectedIndex > Global.Emulator.Frame); var needsToRollback = !(FirstSelectedIndex > Global.Emulator.Frame);
_tas.CopyOverInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState)); _currentTasMovie.CopyOverInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState));
if (needsToRollback) if (needsToRollback)
{ {
@ -673,7 +615,7 @@ namespace BizHawk.Client.EmuHawk
{ {
var needsToRollback = !(FirstSelectedIndex > Global.Emulator.Frame); var needsToRollback = !(FirstSelectedIndex > Global.Emulator.Frame);
_tas.InsertInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState)); _currentTasMovie.InsertInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState));
if (needsToRollback) if (needsToRollback)
{ {
@ -698,15 +640,15 @@ namespace BizHawk.Client.EmuHawk
var sb = new StringBuilder(); var sb = new StringBuilder();
for (var i = 0; i < list.Length; i++) for (var i = 0; i < list.Length; i++)
{ {
var input = _tas.GetInputState(i); var input = _currentTasMovie.GetInputState(i);
_tasClipboard.Add(new TasClipboardEntry(list[i], input)); _tasClipboard.Add(new TasClipboardEntry(list[i], input));
var lg = _tas.LogGeneratorInstance(); var lg = _currentTasMovie.LogGeneratorInstance();
lg.SetSource(input); lg.SetSource(input);
sb.AppendLine(lg.GenerateLogEntry()); sb.AppendLine(lg.GenerateLogEntry());
} }
Clipboard.SetDataObject(sb.ToString()); Clipboard.SetDataObject(sb.ToString());
_tas.RemoveFrames(list); _currentTasMovie.RemoveFrames(list);
SetSplicer(); SetSplicer();
TasView.DeselectAll(); TasView.DeselectAll();
@ -730,7 +672,7 @@ namespace BizHawk.Client.EmuHawk
foreach (var frame in TasView.SelectedIndices()) foreach (var frame in TasView.SelectedIndices())
{ {
_tas.ClearFrame(frame); _currentTasMovie.ClearFrame(frame);
} }
if (needsToRollback) if (needsToRollback)
@ -752,7 +694,7 @@ namespace BizHawk.Client.EmuHawk
var rollBackFrame = FirstSelectedIndex; var rollBackFrame = FirstSelectedIndex;
_tasClipboard.Clear(); _tasClipboard.Clear();
_tas.RemoveFrames(TasView.SelectedIndices().ToArray()); _currentTasMovie.RemoveFrames(TasView.SelectedIndices().ToArray());
SetSplicer(); SetSplicer();
TasView.DeselectAll(); TasView.DeselectAll();
@ -778,10 +720,10 @@ namespace BizHawk.Client.EmuHawk
foreach (var frame in framesToInsert) foreach (var frame in framesToInsert)
{ {
inputLog.Add(_tas.GetInputLogEntry(frame)); inputLog.Add(_currentTasMovie.GetInputLogEntry(frame));
} }
_tas.InsertInput(insertionFrame, inputLog); _currentTasMovie.InsertInput(insertionFrame, inputLog);
if (needsToRollback) if (needsToRollback)
{ {
@ -799,7 +741,7 @@ namespace BizHawk.Client.EmuHawk
var insertionFrame = TasView.SelectedIndices().Any() ? LastSelectedIndex + 1 : 0; var insertionFrame = TasView.SelectedIndices().Any() ? LastSelectedIndex + 1 : 0;
var needsToRollback = !(insertionFrame > Global.Emulator.Frame); var needsToRollback = !(insertionFrame > Global.Emulator.Frame);
_tas.InsertEmptyFrame(insertionFrame); _currentTasMovie.InsertEmptyFrame(insertionFrame);
if (needsToRollback) if (needsToRollback)
{ {
@ -820,7 +762,7 @@ namespace BizHawk.Client.EmuHawk
var result = framesPrompt.ShowDialog(); var result = framesPrompt.ShowDialog();
if (result == DialogResult.OK) if (result == DialogResult.OK)
{ {
_tas.InsertEmptyFrame(insertionFrame, framesPrompt.Frames); _currentTasMovie.InsertEmptyFrame(insertionFrame, framesPrompt.Frames);
} }
if (needsToRollback) if (needsToRollback)
@ -840,7 +782,7 @@ namespace BizHawk.Client.EmuHawk
var rollbackFrame = LastSelectedIndex + 1; var rollbackFrame = LastSelectedIndex + 1;
var needsToRollback = !(rollbackFrame > Global.Emulator.Frame); var needsToRollback = !(rollbackFrame > Global.Emulator.Frame);
_tas.Truncate(LastSelectedIndex + 1); _currentTasMovie.Truncate(LastSelectedIndex + 1);
if (needsToRollback) if (needsToRollback)
{ {
@ -873,21 +815,21 @@ namespace BizHawk.Client.EmuHawk
private void HeaderMenuItem_Click(object sender, EventArgs e) private void HeaderMenuItem_Click(object sender, EventArgs e)
{ {
new MovieHeaderEditor(_tas).Show(); new MovieHeaderEditor(_currentTasMovie).Show();
UpdateChangesIndicator(); UpdateChangesIndicator();
} }
private void GreenzoneSettingsMenuItem_Click(object sender, EventArgs e) private void GreenzoneSettingsMenuItem_Click(object sender, EventArgs e)
{ {
new GreenzoneSettings(_tas.GreenzoneSettings).Show(); new GreenzoneSettings(_currentTasMovie.GreenzoneSettings).Show();
UpdateChangesIndicator(); UpdateChangesIndicator();
} }
private void CommentsMenuItem_Click(object sender, EventArgs e) private void CommentsMenuItem_Click(object sender, EventArgs e)
{ {
var form = new EditCommentsForm(); var form = new EditCommentsForm();
form.GetMovie(_tas); form.GetMovie(_currentTasMovie);
form.ShowDialog(); form.ShowDialog();
} }
@ -958,8 +900,66 @@ namespace BizHawk.Client.EmuHawk
base.OnShown(e); base.OnShown(e);
} }
private void Tastudio_Load(object sender, EventArgs e)
{
// Start Scenario 1: A regular movie is active
if (Global.MovieSession.Movie.IsActive && !(Global.MovieSession.Movie is TasMovie))
{
var result = MessageBox.Show("In order to use Tastudio, a new project must be created from the current movie\nThe current movie will be saved and closed, and a new project file will be created\nProceed?", "Convert movie", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
ConvertCurrentMovieToTasproj();
}
else
{
Close();
return;
}
}
// Start Scenario 2: A tasproj is already active
else if (Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie is TasMovie)
{
// Nothing to do
}
// Start Scenario 3: No movie, but user wants to autload their last project
else if (Global.Config.AutoloadTAStudioProject && !string.IsNullOrEmpty(Global.Config.RecentTas.MostRecent))
{
LoadProject(Global.Config.RecentTas.MostRecent);
}
// Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project
else
{
NewTasMovie();
GlobalWin.MainForm.StartNewMovie(_currentTasMovie, record: true);
_currentTasMovie.CaptureCurrentState();
}
EngageTastudio();
SetUpColumns();
LoadConfigSettings();
RefreshDialog();
}
private void Tastudio_Closing(object sender, FormClosingEventArgs e)
{
if (AskSaveChanges())
{
SaveConfigSettings();
GlobalWin.MainForm.StopMovie(saveChanges: false);
DisengageTastudio();
}
else
{
e.Cancel = true;
}
}
#endregion #endregion
#endregion #endregion
} }
} }

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -34,7 +34,7 @@ namespace BizHawk.Client.EmuHawk
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void UpdateValues() public void UpdateValues()

View File

@ -35,7 +35,7 @@ namespace BizHawk.Client.EmuHawk
ToolBoxItems.First().Select(); ToolBoxItems.First().Select();
} }
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void UpdateValues() { } public void UpdateValues() { }

View File

@ -158,7 +158,7 @@ namespace BizHawk.Client.EmuHawk
} }
return _tools return _tools
.Select(tool => tool.AskSave()) .Select(tool => tool.AskSaveChanges())
.All(result => result); .All(result => result);
} }
@ -176,7 +176,7 @@ namespace BizHawk.Client.EmuHawk
var tool = _tools.FirstOrDefault(x => x is T); var tool = _tools.FirstOrDefault(x => x is T);
if (tool != null) if (tool != null)
{ {
return tool.AskSave(); return tool.AskSaveChanges();
} }
else else
{ {

View File

@ -37,7 +37,7 @@ namespace BizHawk.Client.EmuHawk
get { return false; } get { return false; }
} }
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -160,7 +160,7 @@ namespace BizHawk.Client.EmuHawk
#region IToolForm Implementation #region IToolForm Implementation
public bool AskSave() { return true; } public bool AskSaveChanges() { return true; }
public bool UpdateBefore { get { return false; } } public bool UpdateBefore { get { return false; } }
public void Restart() public void Restart()

View File

@ -50,7 +50,7 @@ namespace BizHawk.Client.EmuHawk
public const int MaxDetailedSize = 1024 * 1024; // 1mb, semi-arbituary decision, sets the size to check for and automatically switch to fast mode for the user public const int MaxDetailedSize = 1024 * 1024; // 1mb, semi-arbituary decision, sets the size to check for and automatically switch to fast mode for the user
public const int MaxSupportedSize = 1024 * 1024 * 64; // 64mb, semi-arbituary decision, sets the maximum size ram search will support (as it will crash beyond this) public const int MaxSupportedSize = 1024 * 1024 * 64; // 64mb, semi-arbituary decision, sets the maximum size ram search will support (as it will crash beyond this)
public bool AskSave() public bool AskSaveChanges()
{ {
return true; return true;
} }

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
WatchListView.VirtualMode = true; WatchListView.VirtualMode = true;
Closing += (o, e) => Closing += (o, e) =>
{ {
if (AskSave()) if (AskSaveChanges())
{ {
SaveConfigSettings(); SaveConfigSettings();
} }
@ -101,7 +101,7 @@ namespace BizHawk.Client.EmuHawk
Changes(); Changes();
} }
public bool AskSave() public bool AskSaveChanges()
{ {
if (_watches.Changes) if (_watches.Changes)
{ {
@ -138,7 +138,7 @@ namespace BizHawk.Client.EmuHawk
var ask_result = true; var ask_result = true;
if (_watches.Changes) if (_watches.Changes)
{ {
ask_result = AskSave(); ask_result = AskSaveChanges();
} }
if (ask_result) if (ask_result)
@ -166,7 +166,7 @@ namespace BizHawk.Client.EmuHawk
var result = true; var result = true;
if (_watches.Changes) if (_watches.Changes)
{ {
result = AskSave(); result = AskSaveChanges();
} }
if (result) if (result)
@ -461,7 +461,7 @@ namespace BizHawk.Client.EmuHawk
var result = true; var result = true;
if (_watches.Changes) if (_watches.Changes)
{ {
result = AskSave(); result = AskSaveChanges();
} }
if (result || suppressAsk) if (result || suppressAsk)