2014-10-17 17:58:48 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Client.Common;
|
|
|
|
|
using BizHawk.Client.Common.MovieConversionExtensions;
|
|
|
|
|
using BizHawk.Client.EmuHawk.ToolExtensions;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
|
|
|
|
{
|
|
|
|
|
public partial class TAStudio
|
|
|
|
|
{
|
|
|
|
|
#region File Menu
|
|
|
|
|
|
|
|
|
|
private void FileSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
ToBk2MenuItem.Enabled =
|
2014-10-20 21:26:01 +00:00
|
|
|
|
!string.IsNullOrWhiteSpace(CurrentTasMovie.Filename) &&
|
|
|
|
|
(CurrentTasMovie.Filename != DefaultTasProjName());
|
2014-10-18 15:50:12 +00:00
|
|
|
|
|
|
|
|
|
SaveTASMenuItem.Enabled =
|
2014-10-20 19:04:59 +00:00
|
|
|
|
!string.IsNullOrWhiteSpace(CurrentTasMovie.Filename) &&
|
|
|
|
|
(CurrentTasMovie.Filename != DefaultTasProjName());
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RecentSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RecentSubMenu.DropDownItems.Clear();
|
|
|
|
|
RecentSubMenu.DropDownItems.AddRange(
|
|
|
|
|
Global.Config.RecentTas.RecentMenu(DummyLoadProject));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewTasMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 00:31:05 +00:00
|
|
|
|
if (GlobalWin.MainForm.GameIsClosing)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StartNewTasMovie();
|
|
|
|
|
}
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OpenTasMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (AskSaveChanges())
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var filename = CurrentTasMovie.Filename;
|
2014-10-18 15:50:12 +00:00
|
|
|
|
if (string.IsNullOrWhiteSpace(filename) || filename == DefaultTasProjName())
|
|
|
|
|
{
|
|
|
|
|
filename = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var file = ToolHelpers.GetTasProjFileFromUser(filename);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
if (file != null)
|
|
|
|
|
{
|
2014-10-21 13:12:12 +00:00
|
|
|
|
LoadFile(file);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SaveTasMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
if (string.IsNullOrEmpty(CurrentTasMovie.Filename) ||
|
|
|
|
|
CurrentTasMovie.Filename == DefaultTasProjName())
|
2014-10-17 17:58:48 +00:00
|
|
|
|
{
|
|
|
|
|
SaveAsTasMenuItem_Click(sender, e);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.Save();
|
|
|
|
|
MessageStatusLabel.Text = Path.GetFileName(CurrentTasMovie.Filename) + " saved.";
|
|
|
|
|
Global.Config.RecentTas.Add(CurrentTasMovie.Filename);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SaveAsTasMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var filename = CurrentTasMovie.Filename;
|
2014-10-18 15:50:12 +00:00
|
|
|
|
if (string.IsNullOrWhiteSpace(filename) || filename == DefaultTasProjName())
|
|
|
|
|
{
|
|
|
|
|
filename = SuggestedTasProjName();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var file = ToolHelpers.GetTasProjSaveFileFromUser(filename);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
if (file != null)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.Filename = file.FullName;
|
|
|
|
|
CurrentTasMovie.Save();
|
|
|
|
|
Global.Config.RecentTas.Add(CurrentTasMovie.Filename);
|
|
|
|
|
MessageStatusLabel.Text = Path.GetFileName(CurrentTasMovie.Filename) + " saved.";
|
2014-10-18 15:50:12 +00:00
|
|
|
|
SetTextProperty();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ToBk2MenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var bk2 = CurrentTasMovie.ToBk2();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
bk2.Save();
|
|
|
|
|
MessageStatusLabel.Text = Path.GetFileName(bk2.Filename) + " created.";
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ExitMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#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.SelectedRows.Any();
|
|
|
|
|
ReselectClipboardMenuItem.Enabled =
|
|
|
|
|
PasteMenuItem.Enabled =
|
|
|
|
|
PasteInsertMenuItem.Enabled =
|
|
|
|
|
_tasClipboard.Any();
|
|
|
|
|
|
|
|
|
|
ClearGreenzoneMenuItem.Enabled =
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie != null && CurrentTasMovie.TasStateManager.Any();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
GreenzoneICheckSeparator.Visible =
|
2014-10-17 18:14:21 +00:00
|
|
|
|
GreenZoneIntegrityCheckMenuItem.Visible =
|
2014-10-17 17:58:48 +00:00
|
|
|
|
VersionInfo.DeveloperBuild;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DeselectMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
TasView.DeselectAll();
|
|
|
|
|
TasView.Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SelectAllMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
TasView.SelectAll();
|
|
|
|
|
TasView.Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SelectBetweenMarkersMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var prevMarker = CurrentTasMovie.Markers.PreviousOrCurrent(TasView.LastSelectedIndex.Value);
|
|
|
|
|
var nextMarker = CurrentTasMovie.Markers.Next(TasView.LastSelectedIndex.Value);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
int prev = prevMarker != null ? prevMarker.Frame : 0;
|
2014-10-20 19:04:59 +00:00
|
|
|
|
int next = nextMarker != null ? nextMarker.Frame : CurrentTasMovie.InputLogLength;
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
for (int i = prev; i < next; i++)
|
|
|
|
|
{
|
|
|
|
|
TasView.SelectRow(i, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ReselectClipboardMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
TasView.DeselectAll();
|
|
|
|
|
foreach (var item in _tasClipboard)
|
|
|
|
|
{
|
|
|
|
|
TasView.SelectRow(item.Frame, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CopyMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
|
|
|
|
_tasClipboard.Clear();
|
|
|
|
|
var list = TasView.SelectedRows.ToList();
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
|
2014-10-17 18:14:21 +00:00
|
|
|
|
foreach (var index in list)
|
2014-10-17 17:58:48 +00:00
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var input = CurrentTasMovie.GetInputState(index);
|
2014-10-17 18:14:21 +00:00
|
|
|
|
_tasClipboard.Add(new TasClipboardEntry(index, input));
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var lg = CurrentTasMovie.LogGeneratorInstance();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
lg.SetSource(input);
|
|
|
|
|
sb.AppendLine(lg.GenerateLogEntry());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Clipboard.SetDataObject(sb.ToString());
|
|
|
|
|
SetSplicer();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PasteMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
// TODO: if highlighting 2 rows and pasting 3, only paste 2 of them
|
|
|
|
|
// FCEUX Taseditor does't do this, but I think it is the expected behavior in editor programs
|
|
|
|
|
if (_tasClipboard.Any())
|
|
|
|
|
{
|
|
|
|
|
var needsToRollback = !(TasView.FirstSelectedIndex > Global.Emulator.Frame);
|
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.CopyOverInput(TasView.FirstSelectedIndex.Value, _tasClipboard.Select(x => x.ControllerState));
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(TasView.FirstSelectedIndex.Value);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PasteInsertMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (_tasClipboard.Any())
|
|
|
|
|
{
|
|
|
|
|
var needsToRollback = !(TasView.FirstSelectedIndex > Global.Emulator.Frame);
|
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.InsertInput(TasView.FirstSelectedIndex.Value, _tasClipboard.Select(x => x.ControllerState));
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(TasView.FirstSelectedIndex.Value);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CutMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
|
|
|
|
var needsToRollback = !(TasView.FirstSelectedIndex.Value > Global.Emulator.Frame);
|
|
|
|
|
var rollBackFrame = TasView.FirstSelectedIndex.Value;
|
|
|
|
|
|
|
|
|
|
_tasClipboard.Clear();
|
|
|
|
|
var list = TasView.SelectedRows.ToArray();
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
for (var i = 0; i < list.Length; i++)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var input = CurrentTasMovie.GetInputState(i);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
_tasClipboard.Add(new TasClipboardEntry(list[i], input));
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var lg = CurrentTasMovie.LogGeneratorInstance();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
lg.SetSource(input);
|
|
|
|
|
sb.AppendLine(lg.GenerateLogEntry());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Clipboard.SetDataObject(sb.ToString());
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.RemoveFrames(list);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
SetSplicer();
|
|
|
|
|
TasView.DeselectAll();
|
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(rollBackFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ClearMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
|
|
|
|
var needsToRollback = !(TasView.FirstSelectedIndex > Global.Emulator.Frame);
|
|
|
|
|
var rollBackFrame = TasView.FirstSelectedIndex.Value;
|
|
|
|
|
|
|
|
|
|
foreach (var frame in TasView.SelectedRows)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.ClearFrame(frame);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(rollBackFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DeleteFramesMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
|
|
|
|
var needsToRollback = !(TasView.FirstSelectedIndex > Global.Emulator.Frame);
|
|
|
|
|
var rollBackFrame = TasView.FirstSelectedIndex.Value;
|
|
|
|
|
|
|
|
|
|
_tasClipboard.Clear();
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.RemoveFrames(TasView.SelectedRows.ToArray());
|
2014-10-17 17:58:48 +00:00
|
|
|
|
SetSplicer();
|
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(rollBackFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CloneMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
|
|
|
|
var framesToInsert = TasView.SelectedRows.ToList();
|
|
|
|
|
var insertionFrame = TasView.LastSelectedIndex.Value + 1;
|
|
|
|
|
var needsToRollback = !(insertionFrame > Global.Emulator.Frame);
|
|
|
|
|
|
2014-10-17 18:14:21 +00:00
|
|
|
|
var inputLog = framesToInsert
|
2014-10-20 19:04:59 +00:00
|
|
|
|
.Select(frame => CurrentTasMovie.GetInputLogEntry(frame))
|
2014-10-17 18:14:21 +00:00
|
|
|
|
.ToList();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.InsertInput(insertionFrame, inputLog);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(insertionFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-19 21:45:02 +00:00
|
|
|
|
RefreshDialog();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InsertFrameMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var insertionFrame = TasView.SelectedRows.Any() ? TasView.FirstSelectedIndex.Value : 0;
|
2014-10-17 18:14:21 +00:00
|
|
|
|
var needsToRollback = insertionFrame <= Global.Emulator.Frame;
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.InsertEmptyFrame(insertionFrame);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(insertionFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-19 21:45:02 +00:00
|
|
|
|
RefreshDialog();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InsertNumFramesMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var insertionFrame = TasView.SelectedRows.Any() ? TasView.FirstSelectedIndex.Value : 0;
|
2014-10-17 18:14:21 +00:00
|
|
|
|
var needsToRollback = insertionFrame <= Global.Emulator.Frame;
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
var framesPrompt = new FramesPrompt();
|
|
|
|
|
var result = framesPrompt.ShowDialog();
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.InsertEmptyFrame(insertionFrame, framesPrompt.Frames);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToLastEmulatedFrameIfNecessary(insertionFrame);
|
2014-10-17 20:10:21 +00:00
|
|
|
|
DoAutoRestore();
|
2014-10-19 21:45:02 +00:00
|
|
|
|
RefreshDialog();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TruncateMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (TasView.SelectedRows.Any())
|
|
|
|
|
{
|
2014-10-19 16:36:47 +00:00
|
|
|
|
var rollbackFrame = TasView.LastSelectedIndex.Value;
|
2014-10-17 17:58:48 +00:00
|
|
|
|
var needsToRollback = !(rollbackFrame > Global.Emulator.Frame);
|
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.Truncate(rollbackFrame);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (needsToRollback)
|
|
|
|
|
{
|
|
|
|
|
GoToFrame(rollbackFrame);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetMarkersMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-17 18:14:21 +00:00
|
|
|
|
foreach (var index in TasView.SelectedRows)
|
2014-10-17 17:58:48 +00:00
|
|
|
|
{
|
|
|
|
|
CallAddMarkerPopUp(index);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RemoveMarkersMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.Markers.RemoveAll(m => TasView.SelectedRows.Contains(m.Frame));
|
2014-10-17 17:58:48 +00:00
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ClearGreenzoneMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.ClearGreenzone();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void GreenZzoneIntegrityCheckMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
GlobalWin.MainForm.RebootCore();
|
|
|
|
|
GlobalWin.MainForm.FrameAdvance();
|
|
|
|
|
var frame = Global.Emulator.Frame;
|
|
|
|
|
|
2014-10-20 19:04:59 +00:00
|
|
|
|
if (CurrentTasMovie.TasStateManager.HasState(frame))
|
2014-10-17 17:58:48 +00:00
|
|
|
|
{
|
|
|
|
|
var state = (byte[])Global.Emulator.SaveStateBinary().Clone();
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var greenzone = CurrentTasMovie.TasStateManager[frame];
|
2014-10-17 17:58:48 +00:00
|
|
|
|
|
|
|
|
|
if (!state.SequenceEqual(greenzone))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("bad data at frame: " + frame);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessageBox.Show("Integrity Check passed");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Config
|
|
|
|
|
|
|
|
|
|
private void ConfigSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DrawInputByDraggingMenuItem.Checked = Global.Config.TAStudioDrawInput;
|
|
|
|
|
AutopauseAtEndOfMovieMenuItem.Checked = Global.Config.TAStudioAutoPause;
|
|
|
|
|
EmptyNewMarkerNotesMenuItem.Checked = Global.Config.TAStudioEmptyMarkers;
|
|
|
|
|
|
|
|
|
|
RotateMenuItem.ShortcutKeyDisplayString = TasView.RotateHotkeyStr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DrawInputByDraggingMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
TasView.InputPaintingMode = Global.Config.TAStudioDrawInput ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void EmptyNewMarkerNotesMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.TAStudioEmptyMarkers ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AutopauseAtEndMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.TAStudioAutoPause ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RotateMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
TasView.HorizontalOrientation ^= true;
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.FlagChanges();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Metadata
|
|
|
|
|
|
|
|
|
|
private void HeaderMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
new MovieHeaderEditor(CurrentTasMovie) { Owner = GlobalWin.MainForm }.Show();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
UpdateChangesIndicator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void GreenzoneSettingsMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-10-20 19:04:59 +00:00
|
|
|
|
new GreenzoneSettingsForm(CurrentTasMovie.TasStateManager.Settings) { Owner = GlobalWin.MainForm }.Show();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
UpdateChangesIndicator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CommentsMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var form = new EditCommentsForm();
|
2014-10-20 19:04:59 +00:00
|
|
|
|
form.GetMovie(CurrentTasMovie);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
form.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SubtitlesMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var form = new EditSubtitlesForm { ReadOnly = false };
|
|
|
|
|
form.GetMovie(Global.MovieSession.Movie);
|
|
|
|
|
form.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-18 01:01:45 +00:00
|
|
|
|
private void DefaultStateSettingsMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
new DefaultGreenzoneSettings().ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-17 17:58:48 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Settings Menu
|
|
|
|
|
|
|
|
|
|
private void SettingsSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SaveWindowPositionMenuItem.Checked = Global.Config.TAStudioSettings.SaveWindowPosition;
|
|
|
|
|
AutoloadMenuItem.Checked = Global.Config.AutoloadTAStudio;
|
|
|
|
|
AutoloadProjectMenuItem.Checked = Global.Config.AutoloadTAStudioProject;
|
|
|
|
|
AlwaysOnTopMenuItem.Checked = Global.Config.TAStudioSettings.TopMost;
|
|
|
|
|
FloatingWindowMenuItem.Checked = Global.Config.TAStudioSettings.FloatingWindow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AutoloadMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.AutoloadTAStudio ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AutoloadProjectMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.AutoloadTAStudioProject ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SaveWindowPositionMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.TAStudioSettings.SaveWindowPosition ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AlwaysOnTopMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.TAStudioSettings.TopMost ^= true;
|
2014-10-22 23:15:59 +00:00
|
|
|
|
TopMost = Global.Config.TAStudioSettings.TopMost;
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FloatingWindowMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.TAStudioSettings.FloatingWindow ^= true;
|
|
|
|
|
RefreshFloatingWindowControl();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RestoreDefaultSettingsMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Size = new Size(_defaultWidth, _defaultHeight);
|
|
|
|
|
|
|
|
|
|
Global.Config.TAStudioSettings.SaveWindowPosition = true;
|
|
|
|
|
Global.Config.TAStudioSettings.TopMost = false;
|
|
|
|
|
Global.Config.TAStudioSettings.FloatingWindow = false;
|
|
|
|
|
|
|
|
|
|
RefreshFloatingWindowControl();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Columns
|
|
|
|
|
|
|
|
|
|
private void ColumnsSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
ColumnsSubMenu.DropDownItems.Clear();
|
|
|
|
|
|
|
|
|
|
var columns = TasView.AllColumns
|
|
|
|
|
.Where(x => !string.IsNullOrWhiteSpace(x.Text))
|
|
|
|
|
.Where(x => x.Name != "FrameColumn");
|
|
|
|
|
|
|
|
|
|
foreach (var column in columns)
|
|
|
|
|
{
|
|
|
|
|
var dummyColumnObject = column;
|
|
|
|
|
|
|
|
|
|
var menuItem = new ToolStripMenuItem
|
|
|
|
|
{
|
|
|
|
|
Text = column.Text,
|
|
|
|
|
Checked = column.Visible
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
menuItem.Click += (o, ev) =>
|
|
|
|
|
{
|
|
|
|
|
dummyColumnObject.Visible ^= true;
|
|
|
|
|
TasView.AllColumns.ColumnsChanged();
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.FlagChanges();
|
2014-10-17 17:58:48 +00:00
|
|
|
|
TasView.Refresh();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ColumnsSubMenu.DropDownItems.Add(menuItem);
|
|
|
|
|
}
|
2014-10-19 15:13:53 +00:00
|
|
|
|
|
|
|
|
|
ColumnsSubMenu.DropDownItems.Add(new ToolStripSeparator());
|
|
|
|
|
var defaults = new ToolStripMenuItem
|
|
|
|
|
{
|
|
|
|
|
Name = "RestoreDefaultColumnConfiguration",
|
|
|
|
|
Text = "Restore defaults"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
defaults.Click += (o, ev) =>
|
|
|
|
|
{
|
|
|
|
|
TasView.AllColumns.Clear();
|
|
|
|
|
SetUpColumns();
|
|
|
|
|
TasView.Refresh();
|
2014-10-20 19:04:59 +00:00
|
|
|
|
CurrentTasMovie.FlagChanges();
|
2014-10-19 15:13:53 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ColumnsSubMenu.DropDownItems.Add(defaults);
|
2014-10-17 17:58:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|