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 ;
2014-12-05 00:52:16 +00:00
using BizHawk.Emulation.Common ;
using BizHawk.Emulation.Common.IEmulatorExtensions ;
2014-10-17 17:58:48 +00:00
using BizHawk.Client.Common ;
using BizHawk.Client.Common.MovieConversionExtensions ;
using BizHawk.Client.EmuHawk.ToolExtensions ;
2014-11-15 15:36:22 +00:00
using BizHawk.Client.EmuHawk.WinFormExtensions ;
2014-10-17 17:58:48 +00:00
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-23 01:32:27 +00:00
var bk2 = CurrentTasMovie . ToBk2 ( true ) ;
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
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-10-17 17:58:48 +00:00
if ( _tasClipboard . Any ( ) )
{
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( TasView . FirstSelectedIndex > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void PasteInsertMenuItem_Click ( object sender , EventArgs e )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-10-17 17:58:48 +00:00
if ( _tasClipboard . Any ( ) )
{
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( TasView . FirstSelectedIndex > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void CutMenuItem_Click ( object sender , EventArgs e )
{
if ( TasView . SelectedRows . Any ( ) )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( TasView . FirstSelectedIndex . Value > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void ClearMenuItem_Click ( object sender , EventArgs e )
{
if ( TasView . SelectedRows . Any ( ) )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( TasView . FirstSelectedIndex > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void DeleteFramesMenuItem_Click ( object sender , EventArgs e )
{
if ( TasView . SelectedRows . Any ( ) )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( TasView . FirstSelectedIndex > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void CloneMenuItem_Click ( object sender , EventArgs e )
{
if ( TasView . SelectedRows . Any ( ) )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-10-17 17:58:48 +00:00
var framesToInsert = TasView . SelectedRows . ToList ( ) ;
var insertionFrame = TasView . LastSelectedIndex . Value + 1 ;
2014-12-14 01:20:19 +00:00
var needsToRollback = ! ( insertionFrame > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
}
private void InsertFrameMenuItem_Click ( object sender , EventArgs e )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-10-17 17:58:48 +00:00
var insertionFrame = TasView . SelectedRows . Any ( ) ? TasView . FirstSelectedIndex . Value : 0 ;
2014-12-14 01:20:19 +00:00
var needsToRollback = insertionFrame < = 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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
2014-10-17 17:58:48 +00:00
}
else
{
RefreshDialog ( ) ;
}
}
private void InsertNumFramesMenuItem_Click ( object sender , EventArgs e )
{
2014-10-23 21:09:54 +00:00
var wasPaused = GlobalWin . MainForm . EmulatorPaused ;
2014-10-17 17:58:48 +00:00
var insertionFrame = TasView . SelectedRows . Any ( ) ? TasView . FirstSelectedIndex . Value : 0 ;
2014-12-14 01:20:19 +00:00
var needsToRollback = insertionFrame < = 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-23 21:09:54 +00:00
if ( wasPaused )
{
DoAutoRestore ( ) ;
}
else
{
GlobalWin . MainForm . UnpauseEmulator ( ) ;
}
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-12-14 01:20:19 +00:00
var needsToRollback = ! ( rollbackFrame > Emulator . Frame ) ;
2014-10-17 17:58:48 +00:00
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 ( ) ;
2014-12-14 01:20:19 +00:00
var frame = Emulator . Frame ;
2014-10-17 17:58:48 +00:00
2014-10-20 19:04:59 +00:00
if ( CurrentTasMovie . TasStateManager . HasState ( frame ) )
2014-10-17 17:58:48 +00:00
{
2014-12-14 01:20:19 +00:00
var state = ( byte [ ] ) StatableEmulator . SaveStateBinary ( ) . Clone ( ) ;
2014-10-20 19:04:59 +00:00
var greenzone = CurrentTasMovie . TasStateManager [ frame ] ;
2014-10-17 17:58:48 +00:00
2014-10-26 23:37:42 +00:00
if ( ! state . SequenceEqual ( greenzone . Value ) )
2014-10-17 17:58:48 +00:00
{
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-11-15 15:36:22 +00:00
new MovieHeaderEditor ( CurrentTasMovie )
{
Owner = GlobalWin . MainForm ,
Location = this . ChildPointToScreen ( TasView )
} . Show ( ) ;
2014-10-17 17:58:48 +00:00
UpdateChangesIndicator ( ) ;
}
private void GreenzoneSettingsMenuItem_Click ( object sender , EventArgs e )
{
2014-11-15 15:36:22 +00:00
new GreenzoneSettingsForm ( CurrentTasMovie . TasStateManager . Settings )
{
Owner = GlobalWin . MainForm ,
2014-12-21 18:25:04 +00:00
Location = this . ChildPointToScreen ( TasView ) ,
Statable = this . StatableEmulator
2014-11-15 15:36:22 +00:00
} . 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-11-02 15:20:17 +00:00
form . ForceReadWrite = true ;
form . Show ( ) ;
2014-10-17 17:58:48 +00:00
}
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 )
{
2014-11-15 15:36:22 +00:00
new DefaultGreenzoneSettings
{
Location = this . ChildPointToScreen ( TasView )
} . ShowDialog ( ) ;
2014-10-18 01:01:45 +00:00
}
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
2014-10-23 23:18:42 +00:00
#region Context Menu
2014-10-30 23:29:21 +00:00
private void RightClickMenu_Opened ( object sender , EventArgs e )
{
SetMarkersContextMenuItem . Enabled =
SelectBetweenMarkersContextMenuItem . Enabled =
RemoveMarkersContextMenuItem . Enabled =
DeselectContextMenuItem . Enabled =
ClearContextMenuItem . Enabled =
DeleteFramesContextMenuItem . Enabled =
CloneContextMenuItem . Enabled =
InsertFrameContextMenuItem . Enabled =
InsertNumFramesContextMenuItem . Enabled =
TruncateContextMenuItem . Enabled =
TasView . SelectedRows . Any ( ) ;
StartFromNowSeparator . Visible =
StartNewProjectFromNowMenuItem . Visible =
TasView . SelectedRows . Count ( ) = = 1 & &
! CurrentTasMovie . StartsFromSavestate ;
RemoveMarkersContextMenuItem . Enabled = CurrentTasMovie . Markers . Any ( m = > TasView . SelectedRows . Contains ( m . Frame ) ) ; // Disable the option to remove markers if no markers are selected (FCEUX does this).
CancelSeekContextMenuItem . Enabled = GlobalWin . MainForm . PauseOnFrame . HasValue ;
}
2014-10-23 23:18:42 +00:00
private void CancelSeekContextMenuItem_Click ( object sender , EventArgs e )
{
GlobalWin . MainForm . PauseOnFrame = null ;
TasView . Refresh ( ) ;
}
2014-10-30 23:29:21 +00:00
private void StartNewProjectFromNowMenuItem_Click ( object sender , EventArgs e )
{
if ( TasView . SelectedRows . Count ( ) = = 1 & &
! CurrentTasMovie . StartsFromSavestate )
{
if ( AskSaveChanges ( ) )
{
var index = TasView . SelectedRows . First ( ) ;
GoToFrame ( index ) ;
var newProject = CurrentTasMovie . ConvertToSavestateAnchoredMovie (
index ,
2014-12-14 01:20:19 +00:00
( byte [ ] ) StatableEmulator . SaveStateBinary ( ) . Clone ( ) ) ;
2014-10-30 23:29:21 +00:00
GlobalWin . MainForm . PauseEmulator ( ) ;
LoadProject ( newProject . Filename ) ;
}
}
}
2014-10-23 23:18:42 +00:00
#endregion
2014-10-17 17:58:48 +00:00
}
}