2011-02-21 09:48:53 +00:00
using System ;
using System.Drawing ;
using System.IO ;
using System.Windows.Forms ;
2018-09-19 13:56:41 +00:00
using System.Collections.Generic ;
2013-11-04 01:39:19 +00:00
using BizHawk.Emulation.Common ;
2013-12-20 22:49:35 +00:00
using BizHawk.Emulation.Cores.Calculators ;
2014-01-07 00:22:46 +00:00
using BizHawk.Emulation.Cores.ColecoVision ;
2013-12-20 22:49:35 +00:00
using BizHawk.Emulation.Cores.Nintendo.NES ;
2019-01-12 15:32:01 +00:00
using BizHawk.Emulation.Cores.Nintendo.SubNESHawk ;
2014-08-03 02:22:56 +00:00
using BizHawk.Emulation.Cores.Nintendo.N64 ;
2013-12-20 22:49:35 +00:00
using BizHawk.Emulation.Cores.Nintendo.SNES ;
2013-12-22 20:41:21 +00:00
using BizHawk.Emulation.Cores.PCEngine ;
2014-01-09 23:50:10 +00:00
using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES ;
2014-07-21 18:30:54 +00:00
using BizHawk.Client.Common ;
2014-08-03 02:22:56 +00:00
2014-07-28 01:51:11 +00:00
using BizHawk.Client.EmuHawk.ToolExtensions ;
2015-04-13 00:46:11 +00:00
using BizHawk.Emulation.Cores.Computers.AppleII ;
2015-12-04 13:10:04 +00:00
using BizHawk.Client.ApiHawk ;
2019-05-18 10:25:33 +00:00
using BizHawk.Common ;
2019-12-13 22:01:04 +00:00
using BizHawk.Emulation.Cores.Atari.A7800Hawk ;
2017-05-16 00:52:05 +00:00
using BizHawk.Emulation.Cores.Computers.Commodore64 ;
2017-07-20 00:18:13 +00:00
using BizHawk.Emulation.Cores.Nintendo.Gameboy ;
2018-06-12 10:40:11 +00:00
using BizHawk.Emulation.Cores.Computers.SinclairSpectrum ;
2018-07-18 12:53:08 +00:00
using BizHawk.Emulation.Cores.Computers.AmstradCPC ;
2019-12-15 22:13:31 +00:00
using BizHawk.Emulation.Cores.Intellivision ;
2019-12-16 23:21:49 +00:00
using BizHawk.Emulation.Cores.Sony.PSX ;
2011-02-21 09:48:53 +00:00
2013-11-03 03:54:37 +00:00
namespace BizHawk.Client.EmuHawk
2011-02-21 09:48:53 +00:00
{
2017-05-22 16:14:38 +00:00
public partial class MainForm
2011-02-21 09:48:53 +00:00
{
2013-10-27 07:54:00 +00:00
#region File Menu
private void FileSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2014-11-30 17:41:24 +00:00
SaveStateSubMenu . Enabled =
LoadStateSubMenu . Enabled =
SaveSlotSubMenu . Enabled =
2016-12-04 17:27:26 +00:00
Emulator . HasSavestates ( ) ;
2014-11-30 17:41:24 +00:00
2019-12-20 15:29:33 +00:00
OpenRomMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Open ROM" ] . Bindings ;
CloseRomMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Close ROM" ] . Bindings ;
2013-10-27 07:54:00 +00:00
MovieSubMenu . Enabled =
2014-12-12 14:25:15 +00:00
CloseRomMenuItem . Enabled =
2016-12-04 17:27:26 +00:00
! Emulator . IsNull ( ) ;
2014-12-12 04:22:15 +00:00
2016-12-04 17:27:26 +00:00
var hasSaveRam = Emulator . HasSaveRam ( ) ;
bool needBold = hasSaveRam & & Emulator . AsSaveRam ( ) . SaveRamModified ;
2014-12-12 14:25:15 +00:00
SaveRAMSubMenu . Enabled = hasSaveRam ;
2014-12-12 04:22:15 +00:00
if ( SaveRAMSubMenu . Font . Bold ! = needBold )
{
2017-05-22 16:14:38 +00:00
var font = new Font ( SaveRAMSubMenu . Font , needBold ? FontStyle . Bold : FontStyle . Regular ) ;
2014-12-12 04:22:15 +00:00
SaveRAMSubMenu . Font = font ;
2015-11-21 00:03:48 +00:00
}
2016-12-04 16:50:28 +00:00
AVSubMenu . Enabled =
ScreenshotSubMenu . Enabled =
2016-12-04 17:27:26 +00:00
Emulator . HasVideoProvider ( ) ;
2013-10-27 07:54:00 +00:00
}
private void RecentRomMenuItem_DropDownOpened ( object sender , EventArgs e )
{
RecentRomSubMenu . DropDownItems . Clear ( ) ;
2020-01-12 15:54:15 +00:00
RecentRomSubMenu . DropDownItems . AddRange ( Config . RecentRoms . RecentMenu ( LoadRomFromRecent , "ROM" , romLoading : true ) ) ;
2013-10-27 07:54:00 +00:00
}
2020-03-15 20:12:36 +00:00
private bool HasSlot ( int slot ) = > _stateSlots . HasSlot ( slot , SaveStatePrefix ( ) ) ;
2013-10-27 07:54:00 +00:00
private void SaveStateSubMenu_DropDownOpened ( object sender , EventArgs e )
{
SaveState0MenuItem . Font = new Font (
SaveState0MenuItem . Font . FontFamily ,
SaveState0MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 0 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState1MenuItem . Font = new Font (
SaveState1MenuItem . Font . FontFamily ,
SaveState1MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 1 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState2MenuItem . Font = new Font (
SaveState2MenuItem . Font . FontFamily ,
SaveState2MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 2 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState3MenuItem . Font = new Font (
SaveState3MenuItem . Font . FontFamily ,
SaveState3MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 3 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2014-01-01 03:03:10 +00:00
2013-10-27 07:54:00 +00:00
SaveState4MenuItem . Font = new Font (
SaveState4MenuItem . Font . FontFamily ,
SaveState4MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 4 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2014-01-01 03:03:10 +00:00
2013-10-27 07:54:00 +00:00
SaveState5MenuItem . Font = new Font (
SaveState5MenuItem . Font . FontFamily ,
SaveState5MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 5 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState6MenuItem . Font = new Font (
SaveState6MenuItem . Font . FontFamily ,
SaveState6MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 6 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState7MenuItem . Font = new Font (
SaveState7MenuItem . Font . FontFamily ,
SaveState7MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 7 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState8MenuItem . Font = new Font (
SaveState8MenuItem . Font . FontFamily ,
SaveState8MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 8 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
SaveState9MenuItem . Font = new Font (
SaveState9MenuItem . Font . FontFamily ,
SaveState9MenuItem . Font . Size ,
2020-03-15 20:12:36 +00:00
HasSlot ( 9 ) ? ( FontStyle . Italic | FontStyle . Bold ) : FontStyle . Regular ) ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
SaveState1MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 1" ] . Bindings ;
SaveState2MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 2" ] . Bindings ;
SaveState3MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 3" ] . Bindings ;
SaveState4MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 4" ] . Bindings ;
SaveState5MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 5" ] . Bindings ;
SaveState6MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 6" ] . Bindings ;
SaveState7MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 7" ] . Bindings ;
SaveState8MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 8" ] . Bindings ;
SaveState9MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 9" ] . Bindings ;
SaveState0MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save State 0" ] . Bindings ;
SaveNamedStateMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save Named State" ] . Bindings ;
2013-10-27 07:54:00 +00:00
}
private void LoadStateSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
LoadState1MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 1" ] . Bindings ;
LoadState2MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 2" ] . Bindings ;
LoadState3MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 3" ] . Bindings ;
LoadState4MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 4" ] . Bindings ;
LoadState5MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 5" ] . Bindings ;
LoadState6MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 6" ] . Bindings ;
LoadState7MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 7" ] . Bindings ;
LoadState8MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 8" ] . Bindings ;
LoadState9MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 9" ] . Bindings ;
LoadState0MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load State 0" ] . Bindings ;
LoadNamedStateMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Load Named State" ] . Bindings ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
AutoloadLastSlotMenuItem . Checked = Config . AutoLoadLastSaveSlot ;
2013-10-27 07:54:00 +00:00
2020-03-15 20:12:36 +00:00
LoadState1MenuItem . Enabled = HasSlot ( 1 ) ;
LoadState2MenuItem . Enabled = HasSlot ( 2 ) ;
LoadState3MenuItem . Enabled = HasSlot ( 3 ) ;
LoadState4MenuItem . Enabled = HasSlot ( 4 ) ;
LoadState5MenuItem . Enabled = HasSlot ( 5 ) ;
LoadState6MenuItem . Enabled = HasSlot ( 6 ) ;
LoadState7MenuItem . Enabled = HasSlot ( 7 ) ;
LoadState8MenuItem . Enabled = HasSlot ( 8 ) ;
LoadState9MenuItem . Enabled = HasSlot ( 9 ) ;
LoadState0MenuItem . Enabled = HasSlot ( 0 ) ;
2013-10-27 07:54:00 +00:00
}
private void SaveSlotSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
SelectSlot0MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 0" ] . Bindings ;
SelectSlot1MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 1" ] . Bindings ;
SelectSlot2MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 2" ] . Bindings ;
SelectSlot3MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 3" ] . Bindings ;
SelectSlot4MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 4" ] . Bindings ;
SelectSlot5MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 5" ] . Bindings ;
SelectSlot6MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 6" ] . Bindings ;
SelectSlot7MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 7" ] . Bindings ;
SelectSlot8MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 8" ] . Bindings ;
SelectSlot9MenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Select State 9" ] . Bindings ;
PreviousSlotMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Previous Slot" ] . Bindings ;
NextSlotMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Next Slot" ] . Bindings ;
SaveToCurrentSlotMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Quick Save" ] . Bindings ;
LoadCurrentSlotMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Quick Load" ] . Bindings ;
2013-10-27 07:54:00 +00:00
SelectSlot0MenuItem . Checked = false ;
SelectSlot1MenuItem . Checked = false ;
SelectSlot2MenuItem . Checked = false ;
SelectSlot3MenuItem . Checked = false ;
SelectSlot4MenuItem . Checked = false ;
SelectSlot5MenuItem . Checked = false ;
SelectSlot6MenuItem . Checked = false ;
SelectSlot7MenuItem . Checked = false ;
SelectSlot8MenuItem . Checked = false ;
SelectSlot9MenuItem . Checked = false ;
SelectSlot1MenuItem . Checked = false ;
2019-12-20 15:29:33 +00:00
switch ( Config . SaveSlot )
2013-10-27 07:54:00 +00:00
{
case 0 :
SelectSlot0MenuItem . Checked = true ;
break ;
case 1 :
SelectSlot1MenuItem . Checked = true ;
break ;
case 2 :
SelectSlot2MenuItem . Checked = true ;
break ;
case 3 :
SelectSlot3MenuItem . Checked = true ;
break ;
case 4 :
SelectSlot4MenuItem . Checked = true ;
break ;
case 5 :
SelectSlot5MenuItem . Checked = true ;
break ;
case 6 :
SelectSlot6MenuItem . Checked = true ;
break ;
case 7 :
SelectSlot7MenuItem . Checked = true ;
break ;
case 8 :
SelectSlot8MenuItem . Checked = true ;
break ;
case 9 :
SelectSlot9MenuItem . Checked = true ;
break ;
}
}
2020-01-14 17:12:52 +00:00
private void SaveRamSubMenu_DropDownOpened ( object sender , EventArgs e )
2017-08-18 22:36:26 +00:00
{
2019-12-20 15:29:33 +00:00
FlushSaveRAMMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Flush SaveRAM" ] . Bindings ;
2017-05-22 14:04:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void MovieSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 16:07:08 +00:00
FullMovieLoadstatesMenuItem . Enabled = ! MovieSession . MultiTrack . IsActive ;
2019-12-21 22:34:29 +00:00
StopMovieWithoutSavingMenuItem . Enabled = MovieSession . Movie . IsActive ( ) & & MovieSession . Movie . Changes ;
2013-10-27 07:54:00 +00:00
StopMovieMenuItem . Enabled
= PlayFromBeginningMenuItem . Enabled
= SaveMovieMenuItem . Enabled
2016-01-28 13:11:05 +00:00
= SaveMovieAsMenuItem . Enabled
2019-12-21 22:34:29 +00:00
= MovieSession . Movie . IsActive ( ) ;
2013-10-27 07:54:00 +00:00
2019-12-20 16:07:08 +00:00
ReadonlyMenuItem . Checked = MovieSession . ReadOnly ;
2019-12-20 15:29:33 +00:00
AutomaticallyBackupMoviesMenuItem . Checked = Config . EnableBackupMovies ;
FullMovieLoadstatesMenuItem . Checked = Config . VBAStyleMovieLoadState ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
ReadonlyMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Toggle read-only" ] . Bindings ;
RecordMovieMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Record Movie" ] . Bindings ;
PlayMovieMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Play Movie" ] . Bindings ;
StopMovieMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Stop Movie" ] . Bindings ;
PlayFromBeginningMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Play from beginning" ] . Bindings ;
SaveMovieMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Save Movie" ] . Bindings ;
2013-10-27 07:54:00 +00:00
}
private void RecentMovieSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2014-07-10 20:06:23 +00:00
RecentMovieSubMenu . DropDownItems . Clear ( ) ;
2020-01-12 15:54:15 +00:00
RecentMovieSubMenu . DropDownItems . AddRange ( Config . RecentMovies . RecentMenu ( LoadMoviesFromRecent , "Movie" ) ) ;
2013-10-27 07:54:00 +00:00
}
2014-07-14 00:35:33 +00:00
private void MovieEndSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
MovieEndFinishMenuItem . Checked = Config . MovieEndAction = = MovieEndAction . Finish ;
MovieEndRecordMenuItem . Checked = Config . MovieEndAction = = MovieEndAction . Record ;
MovieEndStopMenuItem . Checked = Config . MovieEndAction = = MovieEndAction . Stop ;
MovieEndPauseMenuItem . Checked = Config . MovieEndAction = = MovieEndAction . Pause ;
2014-10-18 16:06:39 +00:00
// Arguably an IControlMainForm property should be set here, but in reality only Tastudio is ever going to interfere with this logic
MovieEndFinishMenuItem . Enabled =
MovieEndRecordMenuItem . Enabled =
MovieEndStopMenuItem . Enabled =
MovieEndPauseMenuItem . Enabled =
2019-12-20 15:29:33 +00:00
! Tools . Has < TAStudio > ( ) ;
2014-07-14 00:35:33 +00:00
}
2013-10-27 07:54:00 +00:00
private void AVSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
ConfigAndRecordAVMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Record A/V" ] . Bindings ;
StopAVIMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Stop A/V" ] . Bindings ;
2020-01-25 16:57:31 +00:00
CaptureOSDMenuItem . Checked = Config . AviCaptureOsd ;
2013-10-27 07:54:00 +00:00
2020-01-03 20:19:42 +00:00
RecordAVMenuItem . Enabled = ! OSTailoredCode . IsUnixHost & & ! string . IsNullOrEmpty ( Config . VideoWriter ) & & _currAviWriter = = null ;
2019-12-21 08:26:49 +00:00
SynclessRecordingMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
2015-12-16 18:13:15 +00:00
2013-11-27 23:35:32 +00:00
if ( _currAviWriter = = null )
2013-10-27 07:54:00 +00:00
{
2019-12-21 08:26:49 +00:00
ConfigAndRecordAVMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
2013-10-27 07:54:00 +00:00
StopAVIMenuItem . Enabled = false ;
}
else
{
2015-12-16 18:13:15 +00:00
ConfigAndRecordAVMenuItem . Enabled = false ;
2013-10-27 07:54:00 +00:00
StopAVIMenuItem . Enabled = true ;
}
}
private void ScreenshotSubMenu_DropDownOpening ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
ScreenshotCaptureOSDMenuItem1 . Checked = Config . ScreenshotCaptureOsd ;
2019-12-20 15:29:33 +00:00
ScreenshotMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Screenshot" ] . Bindings ;
ScreenshotClipboardMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "ScreenshotToClipboard" ] . Bindings ;
ScreenshotClientClipboardMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Screen Client to Clipboard" ] . Bindings ;
2013-10-27 07:54:00 +00:00
}
private void OpenRomMenuItem_Click ( object sender , EventArgs e )
2013-07-16 01:59:59 +00:00
{
2013-11-27 23:35:32 +00:00
OpenRom ( ) ;
2013-07-16 01:59:59 +00:00
}
2012-09-06 08:32:25 +00:00
2015-11-06 14:31:50 +00:00
private void OpenAdvancedMenuItem_Click ( object sender , EventArgs e )
{
2020-01-03 20:19:42 +00:00
using var oac = new OpenAdvancedChooser ( this , Config ) ;
2016-02-15 02:30:24 +00:00
if ( oac . ShowHawkDialog ( ) = = DialogResult . Cancel )
2017-05-22 16:14:38 +00:00
{
2015-11-06 14:31:50 +00:00
return ;
2017-05-22 16:14:38 +00:00
}
2015-11-06 14:31:50 +00:00
2019-12-06 18:34:20 +00:00
if ( oac . Result = = AdvancedRomLoaderType . LibretroLaunchNoGame )
2015-11-06 14:31:50 +00:00
{
2017-05-22 16:14:38 +00:00
var argsNoGame = new LoadRomArgs
{
2019-12-20 15:29:33 +00:00
OpenAdvanced = new OpenAdvanced_LibretroNoGame ( Config . LibretroCore )
2017-05-22 16:14:38 +00:00
} ;
2015-11-06 14:31:50 +00:00
LoadRom ( "" , argsNoGame ) ;
return ;
}
var args = new LoadRomArgs ( ) ;
2015-11-08 01:59:10 +00:00
var filter = RomFilter ;
2019-12-06 18:34:20 +00:00
if ( oac . Result = = AdvancedRomLoaderType . LibretroLaunchGame )
2015-11-08 01:59:10 +00:00
{
2015-11-06 14:31:50 +00:00
args . OpenAdvanced = new OpenAdvanced_Libretro ( ) ;
2015-11-08 01:59:10 +00:00
filter = oac . SuggestedExtensionFilter ;
}
2019-12-06 18:34:20 +00:00
else if ( oac . Result = = AdvancedRomLoaderType . ClassicLaunchGame )
2017-05-22 16:14:38 +00:00
{
2015-11-06 14:31:50 +00:00
args . OpenAdvanced = new OpenAdvanced_OpenRom ( ) ;
2017-05-22 16:14:38 +00:00
}
2020-02-26 22:36:15 +00:00
else if ( oac . Result = = AdvancedRomLoaderType . MameLaunchGame )
2019-10-29 15:37:27 +00:00
{
args . OpenAdvanced = new OpenAdvanced_MAME ( ) ;
2020-02-20 21:04:30 +00:00
filter = new FilesystemFilter ( "MAME Arcade ROMs" , new [ ] { "zip" } ) . ToString ( ) ;
2019-10-29 15:37:27 +00:00
}
2017-05-22 16:14:38 +00:00
else
{
throw new InvalidOperationException ( "Automatic Alpha Sanitizer" ) ;
}
2015-11-06 14:31:50 +00:00
2017-05-22 16:14:38 +00:00
/*************************/
/* CLONE OF CODE FROM OpenRom (mostly) */
2019-11-02 04:29:09 +00:00
using var ofd = new OpenFileDialog
2015-11-06 14:31:50 +00:00
{
2020-03-15 20:12:36 +00:00
InitialDirectory = Config . PathEntries . RomAbsolutePath ( Emulator . SystemId ) ,
2015-11-08 01:59:10 +00:00
Filter = filter ,
2015-11-06 14:31:50 +00:00
RestoreDirectory = false ,
FilterIndex = _lastOpenRomFilter ,
Title = "Open Advanced"
} ;
var result = ofd . ShowHawkDialog ( ) ;
2019-12-23 16:27:19 +00:00
if ( ! result . IsOk ( ) )
2015-11-06 14:31:50 +00:00
{
return ;
}
var file = new FileInfo ( ofd . FileName ) ;
2020-03-15 20:12:36 +00:00
Config . PathEntries . LastRomPath = file . DirectoryName ;
2015-11-06 14:31:50 +00:00
_lastOpenRomFilter = ofd . FilterIndex ;
2017-05-22 16:14:38 +00:00
/*************************/
2015-11-06 14:31:50 +00:00
LoadRom ( file . FullName , args ) ;
}
2013-10-27 07:54:00 +00:00
private void CloseRomMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2013-11-27 23:35:32 +00:00
CloseRom ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-12-30 16:49:13 +00:00
private void Savestate1MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave1" ) ; }
private void Savestate2MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave2" ) ; }
private void Savestate3MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave3" ) ; }
private void Savestate4MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave4" ) ; }
private void Savestate5MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave5" ) ; }
private void Savestate6MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave6" ) ; }
private void Savestate7MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave7" ) ; }
private void Savestate8MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave8" ) ; }
private void Savestate9MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave9" ) ; }
private void Savestate0MenuItem_Click ( object sender , EventArgs e ) { SaveQuickSave ( "QuickSave0" ) ; }
2013-10-27 07:54:00 +00:00
private void SaveNamedStateMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2013-10-27 07:54:00 +00:00
SaveStateAs ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-12-30 16:49:13 +00:00
private void Loadstate1MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave1" ) ; }
private void Loadstate2MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave2" ) ; }
private void Loadstate3MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave3" ) ; }
private void Loadstate4MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave4" ) ; }
private void Loadstate5MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave5" ) ; }
private void Loadstate6MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave6" ) ; }
private void Loadstate7MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave7" ) ; }
private void Loadstate8MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave8" ) ; }
private void Loadstate9MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave9" ) ; }
private void Loadstate0MenuItem_Click ( object sender , EventArgs e ) { LoadQuickSave ( "QuickSave0" ) ; }
2013-10-27 07:54:00 +00:00
private void LoadNamedStateMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2013-10-27 07:54:00 +00:00
LoadStateAs ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-10-27 07:54:00 +00:00
private void AutoloadLastSlotMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2019-12-20 15:29:33 +00:00
Config . AutoLoadLastSaveSlot ^ = true ;
2013-10-26 15:57:43 +00:00
}
2013-10-27 07:54:00 +00:00
private void SelectSlotMenuItems_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2019-12-20 15:29:33 +00:00
if ( sender = = SelectSlot0MenuItem ) Config . SaveSlot = 0 ;
else if ( sender = = SelectSlot1MenuItem ) Config . SaveSlot = 1 ;
else if ( sender = = SelectSlot2MenuItem ) Config . SaveSlot = 2 ;
else if ( sender = = SelectSlot3MenuItem ) Config . SaveSlot = 3 ;
else if ( sender = = SelectSlot4MenuItem ) Config . SaveSlot = 4 ;
else if ( sender = = SelectSlot5MenuItem ) Config . SaveSlot = 5 ;
else if ( sender = = SelectSlot6MenuItem ) Config . SaveSlot = 6 ;
else if ( sender = = SelectSlot7MenuItem ) Config . SaveSlot = 7 ;
else if ( sender = = SelectSlot8MenuItem ) Config . SaveSlot = 8 ;
else if ( sender = = SelectSlot9MenuItem ) Config . SaveSlot = 9 ;
2013-10-27 07:54:00 +00:00
UpdateStatusSlots ( ) ;
SaveSlotSelectedMessage ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-10-27 07:54:00 +00:00
private void PreviousSlotMenuItem_Click ( object sender , EventArgs e )
2011-07-11 07:35:14 +00:00
{
2013-10-27 07:54:00 +00:00
PreviousSlot ( ) ;
2011-07-11 07:35:14 +00:00
}
2013-10-27 07:54:00 +00:00
private void NextSlotMenuItem_Click ( object sender , EventArgs e )
2011-07-11 07:35:14 +00:00
{
2013-10-27 07:54:00 +00:00
NextSlot ( ) ;
2011-07-11 07:35:14 +00:00
}
2013-10-27 07:54:00 +00:00
private void SaveToCurrentSlotMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2019-12-20 15:29:33 +00:00
SaveQuickSave ( $"QuickSave{Config.SaveSlot}" ) ;
2013-10-27 07:54:00 +00:00
}
2013-10-26 15:57:43 +00:00
2013-10-27 07:54:00 +00:00
private void LoadCurrentSlotMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
LoadQuickSave ( $"QuickSave{Config.SaveSlot}" ) ;
2013-10-26 15:57:43 +00:00
}
2017-05-22 14:04:47 +00:00
private void FlushSaveRAMMenuItem_Click ( object sender , EventArgs e )
{
FlushSaveRAM ( ) ;
}
2013-10-27 07:54:00 +00:00
private void ReadonlyMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleReadOnly ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-10-27 07:54:00 +00:00
private void RecordMovieMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2016-12-04 17:27:26 +00:00
if ( ! Emulator . Attributes ( ) . Released )
2014-06-29 02:12:23 +00:00
{
2017-05-22 16:14:38 +00:00
var result = MessageBox . Show (
this ,
2019-10-27 16:42:05 +00:00
"Thanks for using BizHawk! The emulation core you have selected " +
"is currently BETA-status. We appreciate your help in testing BizHawk. " +
2014-06-29 02:12:23 +00:00
"You can record a movie on this core if you'd like to, but expect to " +
"encounter bugs and sync problems. Continue?" , "BizHawk" , MessageBoxButtons . YesNo ) ;
if ( result ! = DialogResult . Yes )
{
return ;
}
}
2017-06-13 00:58:53 +00:00
2019-10-22 03:54:16 +00:00
if ( ! EmuHawkUtil . EnsureCoreIsAccurate ( Emulator ) )
2018-11-18 16:05:06 +00:00
{
2019-10-22 03:54:16 +00:00
// Inaccurate core but allow the user to continue anyway
2018-11-18 16:05:06 +00:00
}
2014-06-29 02:12:23 +00:00
2019-12-22 20:18:17 +00:00
using var form = new RecordMovie ( this , Config , Game , Emulator , MovieSession ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2013-10-26 15:57:43 +00:00
}
2013-10-27 07:54:00 +00:00
private void PlayMovieMenuItem_Click ( object sender , EventArgs e )
2013-10-26 15:57:43 +00:00
{
2019-12-22 20:18:17 +00:00
using var form = new PlayMovie ( this , Config , Game , Emulator , MovieSession ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2013-10-27 07:54:00 +00:00
}
private void StopMovieMenuItem_Click ( object sender , EventArgs e )
{
StopMovie ( ) ;
}
private void PlayFromBeginningMenuItem_Click ( object sender , EventArgs e )
{
2013-11-01 18:52:26 +00:00
RestartMovie ( ) ;
2013-10-27 07:54:00 +00:00
}
private void ImportMovieMenuItem_Click ( object sender , EventArgs e )
{
2019-11-02 04:29:09 +00:00
using var ofd = new OpenFileDialog
2013-10-27 07:54:00 +00:00
{
2020-03-15 20:12:36 +00:00
InitialDirectory = Config . PathEntries . RomAbsolutePath ( Emulator . SystemId ) ,
2013-10-27 07:54:00 +00:00
Multiselect = true ,
2020-02-20 21:04:30 +00:00
Filter = MovieImport . AvailableImporters . ToString ( "Movie Files" ) ,
2013-10-27 07:54:00 +00:00
RestoreDirectory = false
} ;
2019-12-17 20:26:26 +00:00
if ( ofd . ShowHawkDialog ( ) . IsOk ( ) )
2013-10-27 07:45:59 +00:00
{
2013-11-27 23:35:32 +00:00
foreach ( var fn in ofd . FileNames )
2013-10-27 07:54:00 +00:00
{
2019-11-14 23:00:47 +00:00
ProcessMovieImport ( fn , false ) ;
2013-10-27 07:54:00 +00:00
}
2013-10-26 15:57:43 +00:00
}
}
2013-10-27 07:54:00 +00:00
private void SaveMovieMenuItem_Click ( object sender , EventArgs e )
{
SaveMovie ( ) ;
}
2016-01-28 10:29:51 +00:00
private void SaveMovieAsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 16:07:08 +00:00
var filename = MovieSession . Movie . Filename ;
2016-01-28 10:29:51 +00:00
if ( string . IsNullOrWhiteSpace ( filename ) )
{
2019-12-20 16:07:08 +00:00
filename = PathManager . FilesystemSafeName ( Game ) ;
2016-01-28 10:29:51 +00:00
}
2016-01-31 01:24:30 +00:00
var file = ToolFormBase . SaveFileDialog (
2016-01-28 10:29:51 +00:00
filename ,
2020-03-15 20:12:36 +00:00
Config . PathEntries . MovieAbsolutePath ( ) ,
2016-01-28 10:29:51 +00:00
"Movie Files" ,
2019-12-20 16:07:08 +00:00
MovieSession . Movie . PreferredExtension ) ;
2016-01-28 10:29:51 +00:00
if ( file ! = null )
{
2019-12-20 16:07:08 +00:00
MovieSession . Movie . Filename = file . FullName ;
Config . RecentMovies . Add ( MovieSession . Movie . Filename ) ;
2016-01-28 10:29:51 +00:00
SaveMovie ( ) ;
}
}
2013-10-27 15:23:41 +00:00
private void StopMovieWithoutSavingMenuItem_Click ( object sender , EventArgs e )
2013-10-27 07:54:00 +00:00
{
2019-12-20 15:29:33 +00:00
if ( Config . EnableBackupMovies )
2017-05-22 16:14:38 +00:00
{
2019-12-20 16:07:08 +00:00
MovieSession . Movie . SaveBackup ( ) ;
2017-05-22 16:14:38 +00:00
}
2013-11-23 18:18:58 +00:00
StopMovie ( saveChanges : false ) ;
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void AutomaticMovieBackupMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . EnableBackupMovies ^ = true ;
2013-10-27 07:54:00 +00:00
}
private void FullMovieLoadstatesMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . VBAStyleMovieLoadState ^ = true ;
2013-10-27 07:54:00 +00:00
}
2014-07-14 00:35:33 +00:00
private void MovieEndFinishMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . MovieEndAction = MovieEndAction . Finish ;
2014-07-14 00:35:33 +00:00
}
private void MovieEndRecordMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . MovieEndAction = MovieEndAction . Record ;
2014-07-14 00:35:33 +00:00
}
private void MovieEndStopMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . MovieEndAction = MovieEndAction . Stop ;
2014-07-14 00:35:33 +00:00
}
private void MovieEndPauseMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . MovieEndAction = MovieEndAction . Pause ;
2014-07-14 00:35:33 +00:00
}
2015-12-16 18:13:15 +00:00
private void ConfigAndRecordAVMenuItem_Click ( object sender , EventArgs e )
2013-10-27 07:54:00 +00:00
{
2014-07-14 00:35:33 +00:00
RecordAv ( ) ;
2013-10-27 07:54:00 +00:00
}
2015-12-16 18:13:15 +00:00
private void RecordAVMenuItem_Click ( object sender , EventArgs e )
{
2019-10-27 16:42:05 +00:00
RecordAv ( null , null ) ; // force unattended, but allow traditional setup
2015-12-16 18:13:15 +00:00
}
2013-10-27 07:54:00 +00:00
private void StopAVMenuItem_Click ( object sender , EventArgs e )
{
2014-07-14 00:35:33 +00:00
StopAv ( ) ;
2013-10-27 07:54:00 +00:00
}
2014-06-18 02:28:07 +00:00
private void SynclessRecordingMenuItem_Click ( object sender , EventArgs e )
{
new SynclessRecordingTools ( ) . Run ( ) ;
}
2013-10-27 07:54:00 +00:00
private void CaptureOSDMenuItem_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . AviCaptureOsd ^ = true ;
2013-10-27 07:54:00 +00:00
}
private void ScreenshotMenuItem_Click ( object sender , EventArgs e )
{
TakeScreenshot ( ) ;
}
private void ScreenshotAsMenuItem_Click ( object sender , EventArgs e )
{
2020-03-15 20:12:36 +00:00
var path = $"{ScreenshotPrefix()}.{DateTime.Now:yyyy-MM-dd HH.mm.ss}.png" ;
2013-10-27 07:54:00 +00:00
2019-11-02 04:29:09 +00:00
using var sfd = new SaveFileDialog
2013-10-27 07:54:00 +00:00
{
InitialDirectory = Path . GetDirectoryName ( path ) ,
FileName = Path . GetFileName ( path ) ,
2020-02-20 21:04:30 +00:00
Filter = FilesystemFilter . PNGs . ToString ( )
2013-10-27 07:54:00 +00:00
} ;
2019-12-17 20:26:26 +00:00
if ( sfd . ShowHawkDialog ( ) . IsOk ( ) )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
TakeScreenshot ( sfd . FileName ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
}
private void ScreenshotClipboardMenuItem_Click ( object sender , EventArgs e )
{
TakeScreenshotToClipboard ( ) ;
}
2014-07-22 00:04:28 +00:00
private void ScreenshotClientClipboardMenuItem_Click ( object sender , EventArgs e )
{
2016-02-15 02:30:24 +00:00
TakeScreenshotClientToClipboard ( ) ;
2014-07-22 00:04:28 +00:00
}
2013-10-27 07:54:00 +00:00
private void ScreenshotCaptureOSDMenuItem_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . ScreenshotCaptureOsd ^ = true ;
2013-10-27 07:54:00 +00:00
}
private void ExitMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
if ( Tools . AskSave ( ) )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
Close ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:45:59 +00:00
}
2013-10-26 20:33:25 +00:00
2015-08-01 19:38:43 +00:00
public void CloseEmulator ( )
{
2018-04-08 06:48:47 +00:00
_exitRequestPending = true ;
2015-08-01 19:38:43 +00:00
}
2015-12-15 08:22:44 +00:00
public void CloseEmulator ( int exitCode )
{
2018-04-08 06:48:47 +00:00
_exitRequestPending = true ;
2015-12-15 08:22:44 +00:00
_exitCode = exitCode ;
}
2013-10-27 07:54:00 +00:00
#endregion
#region Emulation Menu
2017-05-22 16:14:38 +00:00
private void EmulationMenuItem_DropDownOpened ( object sender , EventArgs e )
2013-10-27 07:45:59 +00:00
{
2013-11-27 23:35:32 +00:00
PauseMenuItem . Checked = _didMenuPause ? _wasPaused : EmulatorPaused ;
2013-10-27 07:54:00 +00:00
2019-12-21 22:34:29 +00:00
SoftResetMenuItem . Enabled = Emulator . ControllerDefinition . BoolButtons . Contains ( "Reset" )
& & MovieSession . Movie . Mode ! = MovieMode . Play ;
2013-10-27 07:54:00 +00:00
2019-12-21 22:34:29 +00:00
HardResetMenuItem . Enabled = Emulator . ControllerDefinition . BoolButtons . Contains ( "Power" )
2020-01-25 05:16:12 +00:00
& & MovieSession . Movie . Mode ! = MovieMode . Play ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
PauseMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Pause" ] . Bindings ;
RebootCoreMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Reboot Core" ] . Bindings ;
SoftResetMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Soft Reset" ] . Bindings ;
HardResetMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Hard Reset" ] . Bindings ;
2011-07-10 21:00:28 +00:00
}
2013-10-27 07:54:00 +00:00
private void PauseMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2014-07-27 19:07:13 +00:00
if ( IsTurboSeeking | | IsSeeking )
{
PauseOnFrame = null ;
}
else if ( EmulatorPaused )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
UnpauseEmulator ( ) ;
2013-10-26 20:33:25 +00:00
}
else
{
2013-10-27 07:54:00 +00:00
PauseEmulator ( ) ;
2013-10-26 20:33:25 +00:00
}
}
2013-10-27 07:54:00 +00:00
private void PowerMenuItem_Click ( object sender , EventArgs e )
{
RebootCore ( ) ;
}
private void SoftResetMenuItem_Click ( object sender , EventArgs e )
{
SoftReset ( ) ;
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void HardResetMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
HardReset ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
#endregion
#region View
private void ViewSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2020-01-25 16:57:31 +00:00
DisplayFPSMenuItem . Checked = Config . DisplayFps ;
2019-12-20 15:29:33 +00:00
DisplayFrameCounterMenuItem . Checked = Config . DisplayFrameCounter ;
DisplayLagCounterMenuItem . Checked = Config . DisplayLagCounter ;
DisplayInputMenuItem . Checked = Config . DisplayInput ;
DisplayRerecordCountMenuItem . Checked = Config . DisplayRerecordCount ;
DisplaySubtitlesMenuItem . Checked = Config . DisplaySubtitles ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
DisplayFPSMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Display FPS" ] . Bindings ;
DisplayFrameCounterMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Frame Counter" ] . Bindings ;
DisplayLagCounterMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Lag Counter" ] . Bindings ;
DisplayInputMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Input Display" ] . Bindings ;
SwitchToFullscreenMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Full Screen" ] . Bindings ;
2013-10-27 07:54:00 +00:00
2020-01-25 16:57:31 +00:00
DisplayStatusBarMenuItem . Checked = Config . DispChromeStatusBarWindowed ;
2019-12-29 21:05:45 +00:00
DisplayLogWindowMenuItem . Checked = Tools . IsLoaded < LogWindow > ( ) ;
2014-11-30 20:29:30 +00:00
2016-12-04 17:27:26 +00:00
DisplayLagCounterMenuItem . Enabled = Emulator . CanPollInput ( ) ;
2015-09-05 20:48:37 +00:00
2019-12-20 15:29:33 +00:00
DisplayMessagesMenuItem . Checked = Config . DisplayMessages ;
2015-09-08 20:56:20 +00:00
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void WindowSizeSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
x1MenuItem . Checked =
x2MenuItem . Checked =
x3MenuItem . Checked =
x4MenuItem . Checked =
x5MenuItem . Checked = false ;
2019-12-20 15:29:33 +00:00
switch ( Config . TargetZoomFactors [ Emulator . SystemId ] )
2013-10-27 07:54:00 +00:00
{
2017-05-22 16:50:40 +00:00
case 1 :
x1MenuItem . Checked = true ;
break ;
case 2 :
x2MenuItem . Checked = true ;
break ;
case 3 :
x3MenuItem . Checked = true ;
break ;
case 4 :
x4MenuItem . Checked = true ;
break ;
case 5 :
x5MenuItem . Checked = true ;
break ;
case 10 :
mzMenuItem . Checked = true ;
break ;
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void WindowSize_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
if ( sender = = x1MenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 1 ;
if ( sender = = x2MenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 2 ;
if ( sender = = x3MenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 3 ;
if ( sender = = x4MenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 4 ;
if ( sender = = x5MenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 5 ;
if ( sender = = mzMenuItem ) Config . TargetZoomFactors [ Emulator . SystemId ] = 10 ;
2013-10-26 20:33:25 +00:00
2013-10-27 07:45:59 +00:00
FrameBufferResized ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void SwitchToFullscreenMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleFullscreen ( ) ;
}
2013-10-26 20:33:25 +00:00
2017-05-22 16:14:38 +00:00
private void DisplayFpsMenuItem_Click ( object sender , EventArgs e )
2013-10-27 07:54:00 +00:00
{
2017-05-22 16:14:38 +00:00
ToggleFps ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayFrameCounterMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleFrameCounter ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayLagCounterMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleLagCounter ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayInputMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleInputDisplay ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayRerecordsMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
Config . DisplayRerecordCount ^ = true ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplaySubtitlesMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
Config . DisplaySubtitles ^ = true ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayStatusBarMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2020-01-25 16:57:31 +00:00
Config . DispChromeStatusBarWindowed ^ = true ;
2015-06-06 22:31:56 +00:00
SetStatusBar ( ) ;
}
2014-01-01 03:03:10 +00:00
2017-05-22 14:04:47 +00:00
private void DisplayMessagesMenuItem_Click ( object sender , EventArgs e )
2015-06-06 22:31:56 +00:00
{
2019-12-20 15:29:33 +00:00
Config . DisplayMessages ^ = true ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayLogWindowMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-29 21:05:45 +00:00
Tools . Load < LogWindow > ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
#endregion
#region Config
private void ConfigSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2016-12-04 17:27:26 +00:00
ControllersMenuItem . Enabled = Emulator . ControllerDefinition . Any ( ) ;
RewindOptionsMenuItem . Enabled = Emulator . HasSavestates ( ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void FrameSkipMenuItem_DropDownOpened ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
MinimizeSkippingMenuItem . Checked = Config . AutoMinimizeSkipping ;
ClockThrottleMenuItem . Checked = Config . ClockThrottle ;
VsyncThrottleMenuItem . Checked = Config . VSyncThrottle ;
NeverSkipMenuItem . Checked = Config . FrameSkip = = 0 ;
Frameskip1MenuItem . Checked = Config . FrameSkip = = 1 ;
Frameskip2MenuItem . Checked = Config . FrameSkip = = 2 ;
Frameskip3MenuItem . Checked = Config . FrameSkip = = 3 ;
Frameskip4MenuItem . Checked = Config . FrameSkip = = 4 ;
Frameskip5MenuItem . Checked = Config . FrameSkip = = 5 ;
Frameskip6MenuItem . Checked = Config . FrameSkip = = 6 ;
Frameskip7MenuItem . Checked = Config . FrameSkip = = 7 ;
Frameskip8MenuItem . Checked = Config . FrameSkip = = 8 ;
Frameskip9MenuItem . Checked = Config . FrameSkip = = 9 ;
2013-10-27 07:54:00 +00:00
MinimizeSkippingMenuItem . Enabled = ! NeverSkipMenuItem . Checked ;
2017-05-22 16:14:38 +00:00
if ( ! MinimizeSkippingMenuItem . Enabled )
{
MinimizeSkippingMenuItem . Checked = true ;
}
2019-12-20 15:29:33 +00:00
AudioThrottleMenuItem . Enabled = Config . SoundEnabled ;
AudioThrottleMenuItem . Checked = Config . SoundThrottle ;
VsyncEnabledMenuItem . Checked = Config . VSync ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
Speed100MenuItem . Checked = Config . SpeedPercent = = 100 ;
Speed100MenuItem . Image = ( Config . SpeedPercentAlternate = = 100 ) ? Properties . Resources . FastForward : null ;
Speed150MenuItem . Checked = Config . SpeedPercent = = 150 ;
Speed150MenuItem . Image = ( Config . SpeedPercentAlternate = = 150 ) ? Properties . Resources . FastForward : null ;
Speed400MenuItem . Checked = Config . SpeedPercent = = 400 ;
Speed400MenuItem . Image = ( Config . SpeedPercentAlternate = = 400 ) ? Properties . Resources . FastForward : null ;
Speed200MenuItem . Checked = Config . SpeedPercent = = 200 ;
Speed200MenuItem . Image = ( Config . SpeedPercentAlternate = = 200 ) ? Properties . Resources . FastForward : null ;
Speed75MenuItem . Checked = Config . SpeedPercent = = 75 ;
Speed75MenuItem . Image = ( Config . SpeedPercentAlternate = = 75 ) ? Properties . Resources . FastForward : null ;
Speed50MenuItem . Checked = Config . SpeedPercent = = 50 ;
Speed50MenuItem . Image = ( Config . SpeedPercentAlternate = = 50 ) ? Properties . Resources . FastForward : null ;
2014-06-21 20:18:14 +00:00
Speed50MenuItem . Enabled =
Speed75MenuItem . Enabled =
Speed100MenuItem . Enabled =
Speed150MenuItem . Enabled =
Speed200MenuItem . Enabled =
2015-08-18 04:37:23 +00:00
Speed400MenuItem . Enabled =
2019-12-20 15:29:33 +00:00
Config . ClockThrottle ;
2015-08-18 04:37:23 +00:00
miUnthrottled . Checked = _unthrottled ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void KeyPriorityMenuItem_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
switch ( Config . InputHotkeyOverrideOptions )
2013-10-27 07:54:00 +00:00
{
default :
case 0 :
BothHkAndControllerMenuItem . Checked = true ;
InputOverHkMenuItem . Checked = false ;
HkOverInputMenuItem . Checked = false ;
break ;
case 1 :
BothHkAndControllerMenuItem . Checked = false ;
InputOverHkMenuItem . Checked = true ;
HkOverInputMenuItem . Checked = false ;
break ;
case 2 :
BothHkAndControllerMenuItem . Checked = false ;
InputOverHkMenuItem . Checked = false ;
HkOverInputMenuItem . Checked = true ;
break ;
}
}
2013-10-26 20:33:25 +00:00
2020-01-14 17:12:52 +00:00
private void CoreMenuItem_DropDownOpened ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
2020-01-25 16:57:31 +00:00
quickNESMenuItem . Checked = Config . NesInQuickNes ;
nesHawkMenuItem . Checked = ! Config . NesInQuickNes ;
2017-05-22 14:04:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void ControllersMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
using var controller = new ControllerConfig ( Emulator , Config ) ;
2019-12-17 20:26:26 +00:00
if ( controller . ShowDialog ( ) . IsOk ( ) )
2013-10-27 07:54:00 +00:00
{
2019-12-17 20:07:57 +00:00
AddOnScreenMessage ( "Controller settings saved" ) ;
2013-10-27 07:54:00 +00:00
InitControls ( ) ;
2013-12-24 21:59:41 +00:00
InputManager . SyncControls ( ) ;
2013-10-27 07:54:00 +00:00
}
2019-12-17 20:07:57 +00:00
else
{
AddOnScreenMessage ( "Controller config aborted" ) ;
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void HotkeysMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
using var hotkeyConfig = new HotkeyConfig ( Config ) ;
2019-12-17 20:26:26 +00:00
if ( hotkeyConfig . ShowDialog ( ) . IsOk ( ) )
2013-10-27 07:54:00 +00:00
{
2019-12-17 01:33:14 +00:00
AddOnScreenMessage ( "Hotkey settings saved" ) ;
2013-10-27 07:54:00 +00:00
InitControls ( ) ;
2013-12-24 21:59:41 +00:00
InputManager . SyncControls ( ) ;
2013-10-27 07:54:00 +00:00
}
2019-12-17 01:33:14 +00:00
else
{
AddOnScreenMessage ( "Hotkey config aborted" ) ;
}
2013-10-27 07:54:00 +00:00
}
2014-05-10 14:50:47 +00:00
private void FirmwaresMenuItem_Click ( object sender , EventArgs e )
{
2019-10-27 16:42:05 +00:00
if ( e is RomLoader . RomErrorArgs args )
2015-07-12 19:30:26 +00:00
{
2020-03-14 17:20:28 +00:00
using var configForm = new FirmwaresConfig ( this , Config , true , args . RomPath ) ;
2019-11-02 04:29:09 +00:00
var result = configForm . ShowDialog ( ) ;
2015-07-15 06:31:03 +00:00
args . Retry = result = = DialogResult . Retry ;
2015-07-12 19:30:26 +00:00
}
else
{
2020-03-14 17:20:28 +00:00
using var configForm = new FirmwaresConfig ( this , Config ) ;
2019-11-02 04:29:09 +00:00
configForm . ShowDialog ( ) ;
2015-07-12 19:30:26 +00:00
}
2014-05-10 14:50:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void MessagesMenuItem_Click ( object sender , EventArgs e )
{
2019-12-21 20:16:23 +00:00
using var form = new MessageConfig ( Config ) ;
2019-12-17 20:15:09 +00:00
var result = form . ShowDialog ( ) ;
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( result . IsOk ( )
2019-12-17 20:15:09 +00:00
? "Message settings saved"
: "Message config aborted" ) ;
2013-10-27 07:54:00 +00:00
}
private void PathsMenuItem_Click ( object sender , EventArgs e )
{
2020-02-08 15:12:45 +00:00
using var form = new PathConfig ( this , Config ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2013-10-27 07:54:00 +00:00
}
private void SoundMenuItem_Click ( object sender , EventArgs e )
{
2019-12-31 23:14:04 +00:00
using var form = new SoundConfig ( Config ) { Owner = this } ;
2019-12-17 20:26:26 +00:00
if ( form . ShowDialog ( ) . IsOk ( ) )
2013-10-27 07:54:00 +00:00
{
2019-12-22 15:31:32 +00:00
Sound . StartSound ( ) ;
AddOnScreenMessage ( "Sound settings saved" ) ;
2013-10-27 07:54:00 +00:00
RewireSound ( ) ;
}
2019-12-22 15:31:32 +00:00
else
{
AddOnScreenMessage ( "Sound config aborted" ) ;
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void AutofireMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 16:07:08 +00:00
using var form = new AutofireConfig ( Config , AutoFireController , AutofireStickyXORAdapter ) ;
2019-12-17 00:22:41 +00:00
var result = form . ShowDialog ( ) ;
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( result . IsOk ( )
2019-12-17 00:22:41 +00:00
? "Autofire settings saved"
: "Autofire config aborted" ) ;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void RewindOptionsMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-22 20:23:00 +00:00
if ( Emulator . HasSavestates ( ) )
{
2019-12-22 20:25:06 +00:00
using var form = new RewindConfig ( Rewinder , Config , Emulator . AsStatable ( ) ) ;
2019-12-22 20:23:00 +00:00
AddOnScreenMessage ( form . ShowDialog ( ) . IsOk ( )
? "Rewind and State settings saved"
: "Rewind config aborted" ) ;
}
2013-10-26 20:33:25 +00:00
}
2014-05-10 14:50:47 +00:00
private void FileExtensionsMenuItem_Click ( object sender , EventArgs e )
2013-10-26 20:33:25 +00:00
{
2019-12-20 15:29:33 +00:00
using var form = new FileExtensionPreferences ( Config ) ;
2019-12-17 00:51:06 +00:00
var result = form . ShowDialog ( ) ;
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( result . IsOk ( )
2019-12-17 00:51:06 +00:00
? "Rom Extension Preferences changed"
: "Rom Extension Preferences cancelled" ) ;
2014-05-10 14:50:47 +00:00
}
private void CustomizeMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
using var form = new EmuHawkOptions ( this , Config ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2013-10-26 20:33:25 +00:00
}
2014-07-29 01:33:54 +00:00
private void ProfilesMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
using var form = new ProfileConfig ( this , Emulator , Config ) ;
2019-12-17 20:26:26 +00:00
if ( form . ShowDialog ( ) . IsOk ( ) )
2014-07-29 01:33:54 +00:00
{
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( "Profile settings saved" ) ;
2017-05-22 16:14:38 +00:00
// We hide the FirstBoot items since the user setup a Profile
// Is it a bad thing to do this constantly?
2019-12-20 15:29:33 +00:00
Config . FirstBoot = false ;
2014-10-16 03:18:38 +00:00
ProfileFirstBootLabel . Visible = false ;
2014-07-29 01:33:54 +00:00
}
else
{
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( "Profile config aborted" ) ;
2014-07-29 01:33:54 +00:00
}
}
2015-01-02 22:57:27 +00:00
private void ClockThrottleMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
Config . ClockThrottle ^ = true ;
if ( Config . ClockThrottle )
2013-10-27 07:54:00 +00:00
{
2019-12-20 15:29:33 +00:00
var old = Config . SoundThrottle ;
Config . SoundThrottle = false ;
2013-10-27 07:54:00 +00:00
if ( old )
{
RewireSound ( ) ;
}
2017-05-22 16:14:38 +00:00
2019-12-20 15:29:33 +00:00
old = Config . VSyncThrottle ;
Config . VSyncThrottle = false ;
2013-10-27 07:54:00 +00:00
if ( old )
{
2015-02-22 03:53:07 +00:00
PresentationPanel . Resized = true ;
2013-10-27 07:54:00 +00:00
}
}
2014-05-06 01:27:56 +00:00
2015-08-18 04:49:24 +00:00
ThrottleMessage ( ) ;
2012-07-12 19:23:39 +00:00
}
2013-10-27 07:54:00 +00:00
private void AudioThrottleMenuItem_Click ( object sender , EventArgs e )
2012-11-12 17:57:11 +00:00
{
2019-12-20 15:29:33 +00:00
Config . SoundThrottle ^ = true ;
2013-10-27 07:54:00 +00:00
RewireSound ( ) ;
2019-12-20 15:29:33 +00:00
if ( Config . SoundThrottle )
2012-11-12 17:57:11 +00:00
{
2019-12-20 15:29:33 +00:00
Config . ClockThrottle = false ;
var old = Config . VSyncThrottle ;
Config . VSyncThrottle = false ;
2013-10-27 07:54:00 +00:00
if ( old )
{
2015-02-22 03:53:07 +00:00
PresentationPanel . Resized = true ;
2013-10-27 07:54:00 +00:00
}
2012-11-12 17:57:11 +00:00
}
2015-08-18 04:49:24 +00:00
ThrottleMessage ( ) ;
2012-11-12 17:57:11 +00:00
}
2013-10-27 07:54:00 +00:00
private void VsyncThrottleMenuItem_Click ( object sender , EventArgs e )
2012-11-12 17:57:11 +00:00
{
2019-12-20 15:29:33 +00:00
Config . VSyncThrottle ^ = true ;
2015-02-22 03:53:07 +00:00
PresentationPanel . Resized = true ;
2019-12-20 15:29:33 +00:00
if ( Config . VSyncThrottle )
2013-10-27 07:54:00 +00:00
{
2019-12-20 15:29:33 +00:00
Config . ClockThrottle = false ;
var old = Config . SoundThrottle ;
Config . SoundThrottle = false ;
2013-10-27 07:54:00 +00:00
if ( old )
{
RewireSound ( ) ;
}
}
2014-05-10 14:50:47 +00:00
2019-12-20 15:29:33 +00:00
if ( ! Config . VSync )
2015-08-18 04:49:24 +00:00
{
2019-12-20 15:29:33 +00:00
Config . VSync = true ;
2015-08-18 04:49:24 +00:00
VsyncMessage ( ) ;
}
ThrottleMessage ( ) ;
2012-11-12 17:57:11 +00:00
}
2013-10-27 07:54:00 +00:00
private void VsyncEnabledMenuItem_Click ( object sender , EventArgs e )
2012-11-12 17:57:11 +00:00
{
2019-12-20 15:29:33 +00:00
Config . VSync ^ = true ;
if ( ! Config . VSyncThrottle ) // when vsync throttle is on, vsync is forced to on, so no change to make here
2013-10-26 20:33:25 +00:00
{
2015-02-22 03:53:07 +00:00
PresentationPanel . Resized = true ;
2013-10-26 20:33:25 +00:00
}
2015-08-18 04:49:24 +00:00
VsyncMessage ( ) ;
2012-11-12 17:57:11 +00:00
}
2017-05-22 14:04:47 +00:00
private void UnthrottledMenuItem_Click ( object sender , EventArgs e )
{
_unthrottled ^ = true ;
ThrottleMessage ( ) ;
}
2013-10-27 07:54:00 +00:00
private void MinimizeSkippingMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
Config . AutoMinimizeSkipping ^ = true ;
2011-02-21 09:48:53 +00:00
}
2019-12-20 15:29:33 +00:00
private void NeverSkipMenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 0 ; FrameSkipMessage ( ) ; }
private void Frameskip1MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 1 ; FrameSkipMessage ( ) ; }
private void Frameskip2MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 2 ; FrameSkipMessage ( ) ; }
private void Frameskip3MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 3 ; FrameSkipMessage ( ) ; }
private void Frameskip4MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 4 ; FrameSkipMessage ( ) ; }
private void Frameskip5MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 5 ; FrameSkipMessage ( ) ; }
private void Frameskip6MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 6 ; FrameSkipMessage ( ) ; }
private void Frameskip7MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 7 ; FrameSkipMessage ( ) ; }
private void Frameskip8MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 8 ; FrameSkipMessage ( ) ; }
private void Frameskip9MenuItem_Click ( object sender , EventArgs e ) { Config . FrameSkip = 9 ; FrameSkipMessage ( ) ; }
2013-10-27 07:54:00 +00:00
private void Speed50MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 50 ) ; }
private void Speed75MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 75 ) ; }
private void Speed100MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 100 ) ; }
private void Speed150MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 150 ) ; }
private void Speed200MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 200 ) ; }
2015-08-18 04:37:23 +00:00
private void Speed400MenuItem_Click ( object sender , EventArgs e ) { ClickSpeedItem ( 400 ) ; }
2013-10-27 07:54:00 +00:00
private void BothHkAndControllerMenuItem_Click ( object sender , EventArgs e )
2012-07-12 19:02:30 +00:00
{
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 0 ;
2013-10-27 07:54:00 +00:00
UpdateKeyPriorityIcon ( ) ;
2012-07-12 19:02:30 +00:00
}
2013-10-27 07:54:00 +00:00
private void InputOverHkMenuItem_Click ( object sender , EventArgs e )
2012-07-12 18:39:24 +00:00
{
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 1 ;
2013-10-27 07:54:00 +00:00
UpdateKeyPriorityIcon ( ) ;
2012-07-12 18:39:24 +00:00
}
2013-10-27 07:54:00 +00:00
private void HkOverInputMenuItem_Click ( object sender , EventArgs e )
2011-06-26 01:22:52 +00:00
{
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 2 ;
2013-10-27 07:54:00 +00:00
UpdateKeyPriorityIcon ( ) ;
2011-06-26 01:22:52 +00:00
}
2011-02-21 09:48:53 +00:00
2017-06-04 17:53:31 +00:00
private void CoresSubMenu_DropDownOpened ( object sender , EventArgs e )
2014-05-10 14:50:47 +00:00
{
2020-01-25 16:57:31 +00:00
GBInSGBMenuItem . Checked = Config . GbAsSgb ;
AllowGameDbCoreOverridesMenuItem . Checked = Config . CoreForcingViaGameDb ;
2017-06-04 17:53:31 +00:00
}
2014-07-31 23:07:02 +00:00
2017-06-04 17:53:31 +00:00
private void NesCoreSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
QuicknesCoreMenuItem . Checked = Config . NesInQuickNes ;
NesCoreMenuItem . Checked = ! Config . NesInQuickNes & & ! Config . UseSubNESHawk ;
2019-12-20 15:29:33 +00:00
SubNesHawkMenuItem . Checked = Config . UseSubNESHawk ;
2014-05-10 14:50:47 +00:00
}
2019-12-29 13:29:18 +00:00
private void QuickNesCorePick_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . NesInQuickNes = true ;
2019-12-29 13:29:18 +00:00
Config . UseSubNESHawk = false ;
if ( Emulator . SystemId = = "NES" )
{
FlagNeedsReboot ( ) ;
}
}
2017-06-04 17:53:31 +00:00
private void NesCorePick_Click ( object sender , EventArgs e )
2014-05-10 14:50:47 +00:00
{
2020-01-25 16:57:31 +00:00
Config . NesInQuickNes = false ;
2019-12-20 15:29:33 +00:00
Config . UseSubNESHawk = false ;
2014-07-31 23:07:02 +00:00
2017-06-04 17:53:31 +00:00
if ( Emulator . SystemId = = "NES" )
2014-07-31 23:07:02 +00:00
{
FlagNeedsReboot ( ) ;
}
2014-05-10 14:50:47 +00:00
}
2019-06-17 23:22:49 +00:00
private void SubNesCorePick_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . UseSubNESHawk = true ;
2020-01-25 16:57:31 +00:00
Config . NesInQuickNes = false ;
2019-06-17 23:22:49 +00:00
if ( ! Emulator . IsNull ( ) )
{
FlagNeedsReboot ( ) ;
}
}
2020-02-23 14:54:42 +00:00
private void SubGBCorePick_Click ( object sender , EventArgs e )
{
Config . UseSubGBHawk ^ = true ;
if ( ! Emulator . IsNull ( ) )
{
FlagNeedsReboot ( ) ;
}
}
2016-11-12 14:42:15 +00:00
private void CoreSNESSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Coresnes9xMenuItem . Checked = Config . SnesInSnes9x ;
CorebsnesMenuItem . Checked = ! Config . SnesInSnes9x ;
2016-11-12 14:42:15 +00:00
}
2017-06-04 17:25:01 +00:00
private void CoreSnesToggle_Click ( object sender , EventArgs e )
2014-07-28 23:58:52 +00:00
{
2020-01-25 16:57:31 +00:00
Config . SnesInSnes9x ^ = true ;
2014-07-31 23:07:02 +00:00
2017-06-04 17:53:31 +00:00
if ( Emulator . SystemId = = "SNES" )
{
FlagNeedsReboot ( ) ;
}
}
private void GbaCoreSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
VbaNextCoreMenuItem . Checked = ! Config . GbaUsemGba ;
MgbaCoreMenuItem . Checked = Config . GbaUsemGba ;
2017-06-04 17:53:31 +00:00
}
private void GbaCorePick_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . GbaUsemGba ^ = true ;
2017-06-04 17:53:31 +00:00
if ( Emulator . SystemId = = "GBA" )
2014-07-31 23:07:02 +00:00
{
FlagNeedsReboot ( ) ;
}
2014-07-28 23:58:52 +00:00
}
2017-06-30 00:34:02 +00:00
private void SGBCoreSubmenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
SgbBsnesMenuItem . Checked = Config . SgbUseBsnes ;
SgbSameBoyMenuItem . Checked = ! Config . SgbUseBsnes ;
2017-06-30 00:34:02 +00:00
}
2017-11-19 15:17:23 +00:00
private void GBCoreSubmenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
GBGambatteMenuItem . Checked = ! Config . GbUseGbHawk ;
GBGBHawkMenuItem . Checked = Config . GbUseGbHawk ;
2020-02-23 14:54:42 +00:00
SubGBHawkMenuItem . Checked = Config . UseSubGBHawk ;
2017-11-19 15:17:23 +00:00
}
2017-06-30 00:34:02 +00:00
private void SgbCorePick_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . SgbUseBsnes ^ = true ;
2017-06-30 00:34:02 +00:00
// TODO: only flag if one of these cores
if ( ! Emulator . IsNull ( ) )
{
FlagNeedsReboot ( ) ;
}
}
2017-11-19 15:17:23 +00:00
private void GBCorePick_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . GbUseGbHawk ^ = true ;
2020-02-23 14:54:42 +00:00
Config . UseSubGBHawk = false ;
2017-11-19 15:17:23 +00:00
// TODO: only flag if one of these cores
if ( ! Emulator . IsNull ( ) )
{
FlagNeedsReboot ( ) ;
}
}
2017-06-04 17:53:31 +00:00
private void GbInSgbMenuItem_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . GbAsSgb ^ = true ;
2017-06-04 17:53:31 +00:00
if ( ! Emulator . IsNull ( ) )
2017-05-27 13:56:25 +00:00
{
FlagNeedsReboot ( ) ;
}
}
2020-01-14 17:12:52 +00:00
private void AllowGameDBCoreOverridesMenuItem_Click ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
2020-01-25 16:57:31 +00:00
Config . CoreForcingViaGameDb ^ = true ;
2017-05-22 14:04:47 +00:00
}
2014-05-10 14:50:47 +00:00
private void N64VideoPluginSettingsMenuItem_Click ( object sender , EventArgs e )
{
N64PluginSettingsMenuItem_Click ( sender , e ) ;
}
2013-10-27 07:54:00 +00:00
2017-05-22 14:04:47 +00:00
private void SetLibretroCoreMenuItem_Click ( object sender , EventArgs e )
{
RunLibretroCoreChooser ( ) ;
}
2013-10-27 07:54:00 +00:00
private void SaveConfigMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2013-10-27 07:54:00 +00:00
SaveConfig ( ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Saved settings" ) ;
2011-02-21 09:48:53 +00:00
}
2016-01-27 16:07:26 +00:00
private void SaveConfigAsMenuItem_Click ( object sender , EventArgs e )
{
var path = PathManager . DefaultIniPath ;
2019-11-02 04:29:09 +00:00
using var sfd = new SaveFileDialog
2016-01-27 16:07:26 +00:00
{
InitialDirectory = Path . GetDirectoryName ( path ) ,
FileName = Path . GetFileName ( path ) ,
2020-02-20 21:04:30 +00:00
Filter = ConfigFileFSFilterString
2016-01-27 16:07:26 +00:00
} ;
2019-12-17 20:26:26 +00:00
if ( sfd . ShowHawkDialog ( ) . IsOk ( ) )
2016-01-27 16:07:26 +00:00
{
SaveConfig ( sfd . FileName ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Copied settings" ) ;
2016-01-27 16:07:26 +00:00
}
}
2013-10-27 07:54:00 +00:00
private void LoadConfigMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 16:08:20 +00:00
Config = ConfigService . Load < Config > ( PathManager . DefaultIniPath ) ;
2019-12-20 15:29:33 +00:00
Config . ResolveDefaults ( ) ;
2017-05-31 13:52:55 +00:00
InitControls ( ) ; // rebind hotkeys
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( $"Config file loaded: {PathManager.DefaultIniPath}" ) ;
2011-02-21 09:48:53 +00:00
}
2016-01-27 16:07:26 +00:00
private void LoadConfigFromMenuItem_Click ( object sender , EventArgs e )
{
var path = PathManager . DefaultIniPath ;
2019-11-02 04:29:09 +00:00
using var ofd = new OpenFileDialog
2016-01-27 16:07:26 +00:00
{
InitialDirectory = Path . GetDirectoryName ( path ) ,
FileName = Path . GetFileName ( path ) ,
2020-02-20 21:04:30 +00:00
Filter = ConfigFileFSFilterString
2016-01-27 16:07:26 +00:00
} ;
2019-12-17 20:26:26 +00:00
if ( ofd . ShowHawkDialog ( ) . IsOk ( ) )
2016-01-27 16:07:26 +00:00
{
2019-12-20 16:08:20 +00:00
Config = ConfigService . Load < Config > ( ofd . FileName ) ;
2019-12-20 15:29:33 +00:00
Config . ResolveDefaults ( ) ;
2017-05-31 13:52:55 +00:00
InitControls ( ) ; // rebind hotkeys
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( $"Config file loaded: {ofd.FileName}" ) ;
2016-01-27 16:07:26 +00:00
}
}
2013-10-27 07:54:00 +00:00
#endregion
#region Tools
2014-12-06 00:03:36 +00:00
private void ToolsSubMenu_DropDownOpened ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
ToolBoxMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "ToolBox" ] . Bindings ;
RamWatchMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "RAM Watch" ] . Bindings ;
RamSearchMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "RAM Search" ] . Bindings ;
HexEditorMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Hex Editor" ] . Bindings ;
LuaConsoleMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Lua Console" ] . Bindings ;
CheatsMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Cheats" ] . Bindings ;
TAStudioMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "TAStudio" ] . Bindings ;
VirtualPadMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Virtual Pad" ] . Bindings ;
TraceLoggerMenuItem . ShortcutKeyDisplayString = Config . HotkeyBindings [ "Trace Logger" ] . Bindings ;
TraceLoggerMenuItem . Enabled = Tools . IsAvailable < TraceLogger > ( ) ;
CodeDataLoggerMenuItem . Enabled = Tools . IsAvailable < CDL > ( ) ;
2014-09-01 18:43:41 +00:00
2019-12-20 15:29:33 +00:00
TAStudioMenuItem . Enabled = Tools . IsAvailable < TAStudio > ( ) ;
2014-09-01 18:43:41 +00:00
2019-12-20 15:29:33 +00:00
CheatsMenuItem . Enabled = Tools . IsAvailable < Cheats > ( ) ;
HexEditorMenuItem . Enabled = Tools . IsAvailable < HexEditor > ( ) ;
RamSearchMenuItem . Enabled = Tools . IsAvailable < RamSearch > ( ) ;
RamWatchMenuItem . Enabled = Tools . IsAvailable < RamWatch > ( ) ;
2014-09-01 18:43:41 +00:00
2019-12-20 15:29:33 +00:00
DebuggerMenuItem . Enabled = Tools . IsAvailable < GenericDebugger > ( ) ;
2014-12-06 00:03:36 +00:00
2020-01-14 17:12:52 +00:00
BatchRunnerMenuItem . Visible = VersionInfo . DeveloperBuild ;
2015-06-15 22:12:24 +00:00
2019-12-20 15:29:33 +00:00
BasicBotMenuItem . Enabled = Tools . IsAvailable < BasicBot > ( ) ;
2015-11-22 16:37:00 +00:00
2020-01-14 17:12:52 +00:00
GameSharkConverterMenuItem . Enabled = Tools . IsAvailable < GameShark > ( ) ;
2020-01-12 17:00:11 +00:00
MacroToolMenuItem . Enabled = MovieSession . Movie . IsActive ( ) & & Tools . IsAvailable < MacroInputTool > ( ) ;
VirtualPadMenuItem . Enabled = Emulator . ControllerDefinition . Any ( ) ;
2015-11-21 00:03:48 +00:00
}
2020-01-14 17:12:52 +00:00
private void ExternalToolMenuItem_DropDownOpening ( object sender , EventArgs e )
2015-11-21 00:03:48 +00:00
{
2020-01-14 17:12:52 +00:00
ExternalToolMenuItem . DropDownItems . Clear ( ) ;
2015-12-04 13:10:04 +00:00
2020-01-14 17:12:52 +00:00
foreach ( var item in ExternalToolManager . ToolStripMenu )
2015-11-21 00:03:48 +00:00
{
2020-01-31 15:53:12 +00:00
if ( item . Tag is ValueTuple < string , string > tuple )
2015-11-21 00:03:48 +00:00
{
2020-01-31 15:53:12 +00:00
if ( item . Enabled )
2015-11-21 00:03:48 +00:00
{
2020-01-31 15:53:12 +00:00
item . Click + = ( clickEventSender , clickEventArgs ) = > Tools . LoadExternalToolForm ( tuple . Item1 , tuple . Item2 ) ;
}
2015-12-04 13:10:04 +00:00
}
else
{
item . Image = Properties . Resources . ExclamationRed ;
2015-11-22 16:56:08 +00:00
}
2017-05-22 16:14:38 +00:00
2020-01-14 17:12:52 +00:00
ExternalToolMenuItem . DropDownItems . Add ( item ) ;
2015-11-22 16:56:08 +00:00
}
2019-10-27 16:42:05 +00:00
2020-01-14 17:12:52 +00:00
if ( ExternalToolMenuItem . DropDownItems . Count = = 0 )
2015-11-22 16:37:00 +00:00
{
2020-01-14 17:12:52 +00:00
ExternalToolMenuItem . DropDownItems . Add ( "None" ) ;
2015-11-22 16:37:00 +00:00
}
2011-02-21 09:48:53 +00:00
}
2013-10-27 07:54:00 +00:00
private void ToolBoxMenuItem_Click ( object sender , EventArgs e )
2013-09-14 02:31:21 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < ToolBox > ( ) ;
2013-09-14 02:31:21 +00:00
}
2011-09-19 00:39:28 +00:00
2013-10-27 07:54:00 +00:00
private void RamWatchMenuItem_Click ( object sender , EventArgs e )
2013-09-14 02:31:21 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadRamWatch ( true ) ;
2013-09-14 02:31:21 +00:00
}
2011-09-19 00:39:28 +00:00
2013-10-27 07:54:00 +00:00
private void RamSearchMenuItem_Click ( object sender , EventArgs e )
2013-09-14 02:31:21 +00:00
{
2019-12-20 15:29:33 +00:00
var ramSearch = Tools . Load < RamSearch > ( ) ;
2019-11-04 04:30:05 +00:00
if ( OSTailoredCode . IsUnixHost )
2019-05-18 10:25:33 +00:00
{
// this is apparently needed for weird mono-forms-on-different-thread issues
2019-10-27 16:42:05 +00:00
// don't do .Show() within Load<T>() for RamSearch - instead put an instance of it here on MainForm, then show here
2019-05-18 10:25:33 +00:00
// the mono winforms implementation is.... weird and buggy
ramSearch . Show ( ) ;
}
2013-09-14 02:31:21 +00:00
}
2011-09-19 00:39:28 +00:00
2017-05-22 14:04:47 +00:00
private void LuaConsoleMenuItem_Click ( object sender , EventArgs e )
{
OpenLuaConsole ( ) ;
}
private void TAStudioMenuItem_Click ( object sender , EventArgs e )
{
if ( ! Emulator . CanPollInput ( ) )
{
MessageBox . Show ( "Current core does not support input polling. TAStudio can't be used." ) ;
return ;
}
2019-12-20 15:29:33 +00:00
Tools . Load < TAStudio > ( ) ;
2017-05-22 14:04:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void HexEditorMenuItem_Click ( object sender , EventArgs e )
2013-09-14 02:31:21 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < HexEditor > ( ) ;
2013-09-14 02:31:21 +00:00
}
2011-09-19 00:39:28 +00:00
2013-10-27 07:54:00 +00:00
private void TraceLoggerMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < TraceLogger > ( ) ;
2011-02-21 09:48:53 +00:00
}
2014-12-06 00:03:36 +00:00
private void DebuggerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < GenericDebugger > ( ) ;
2014-12-06 00:03:36 +00:00
}
2017-05-22 14:04:47 +00:00
private void CodeDataLoggerMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < CDL > ( ) ;
2011-02-21 09:48:53 +00:00
}
2015-03-08 20:11:02 +00:00
private void MacroToolMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < MacroInputTool > ( ) ;
2015-03-08 20:11:02 +00:00
}
2013-10-27 07:54:00 +00:00
private void VirtualPadMenuItem_Click ( object sender , EventArgs e )
2012-09-08 19:02:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < VirtualpadTool > ( ) ;
2012-09-08 19:02:28 +00:00
}
2017-05-22 14:04:47 +00:00
private void BasicBotMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < BasicBot > ( ) ;
2017-05-22 14:04:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void CheatsMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < Cheats > ( ) ;
2013-10-27 07:54:00 +00:00
}
2011-02-21 09:48:53 +00:00
2017-05-22 14:04:47 +00:00
private void CheatCodeConverterMenuItem_Click ( object sender , EventArgs e )
2013-10-27 07:54:00 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < GameShark > ( ) ;
2017-05-22 14:04:47 +00:00
}
private void MultidiskBundlerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < MultiDiskBundler > ( ) ;
2015-11-22 16:37:00 +00:00
}
2015-10-17 18:44:36 +00:00
2020-01-14 17:12:52 +00:00
private void BatchRunnerMenuItem_Click ( object sender , EventArgs e )
2014-05-10 14:50:47 +00:00
{
2019-11-02 04:29:09 +00:00
using var form = new BatchRun ( ) ;
form . ShowDialog ( ) ;
2014-05-10 14:50:47 +00:00
}
2013-10-27 07:54:00 +00:00
#endregion
2013-10-27 13:53:28 +00:00
#region NES
2020-01-14 17:12:52 +00:00
private void QuickNesMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2020-01-25 16:57:31 +00:00
Config . NesInQuickNes = true ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2020-01-14 17:12:52 +00:00
private void NesHawkMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2020-01-25 16:57:31 +00:00
Config . NesInQuickNes = false ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2020-01-14 17:12:52 +00:00
private void NesSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-12-20 22:49:35 +00:00
{
2017-05-01 02:01:37 +00:00
var boardName = Emulator . HasBoardInfo ( ) ? Emulator . AsBoardInfo ( ) . BoardName : null ;
FDSControlsMenuItem . Enabled = boardName = = "FDS" ;
2014-01-06 23:56:30 +00:00
2016-12-04 17:27:26 +00:00
VSControlsMenuItem . Enabled =
VSSettingsMenuItem . Enabled =
2019-12-15 22:55:40 +00:00
( Emulator is NES nes & & nes . IsVS )
| | ( Emulator is SubNESHawk sub & & sub . IsVs ) ;
2016-10-30 02:35:46 +00:00
2019-12-20 15:29:33 +00:00
NESSoundChannelsMenuItem . Enabled = Tools . IsAvailable < NESSoundConfig > ( ) ;
2019-12-15 22:47:48 +00:00
MovieSettingsMenuItem . Enabled = ( Emulator is NES | | Emulator is SubNESHawk )
2019-12-21 22:34:29 +00:00
& & ! MovieSession . Movie . IsActive ( ) ;
2014-05-16 00:24:40 +00:00
2019-12-20 15:29:33 +00:00
NesControllerSettingsMenuItem . Enabled = Tools . IsAvailable < NesControllerSettings > ( )
2019-12-21 22:34:29 +00:00
& & ! MovieSession . Movie . IsActive ( ) ;
2014-10-29 22:28:14 +00:00
2020-01-14 17:12:52 +00:00
BarcodeReaderMenuItem . Enabled = ServiceInjector . IsAvailable ( Emulator . ServiceProvider , typeof ( BarcodeEntry ) ) ;
2015-07-24 16:26:14 +00:00
2020-01-14 17:12:52 +00:00
MusicRipperMenuItem . Enabled = Tools . IsAvailable < NESMusicRipper > ( ) ;
2013-12-20 22:49:35 +00:00
}
private void FdsControlsMenuItem_DropDownOpened ( object sender , EventArgs e )
{
2017-05-01 02:01:37 +00:00
var boardName = Emulator . HasBoardInfo ( ) ? Emulator . AsBoardInfo ( ) . BoardName : null ;
FdsEjectDiskMenuItem . Enabled = boardName = = "FDS" ;
2013-12-20 22:49:35 +00:00
2014-01-20 17:18:55 +00:00
while ( FDSControlsMenuItem . DropDownItems . Count > 1 )
2013-12-20 22:49:35 +00:00
{
2014-01-20 17:18:55 +00:00
FDSControlsMenuItem . DropDownItems . RemoveAt ( 1 ) ;
2013-12-20 22:49:35 +00:00
}
for ( int i = 0 ; i < 16 ; i + + )
{
2019-03-18 14:06:37 +00:00
var str = $"FDS Insert {i}" ;
2016-12-04 17:27:26 +00:00
if ( Emulator . ControllerDefinition . BoolButtons . Contains ( str ) )
2013-12-20 22:49:35 +00:00
{
2019-03-18 14:06:37 +00:00
FdsInsertDiskMenuAdd ( $"Insert Disk {i}" , str , $"FDS Disk {i} inserted." ) ;
2013-12-20 22:49:35 +00:00
}
}
}
2020-01-14 17:12:52 +00:00
private void NesPpuViewerMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < NesPPU > ( ) ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void NesNametableViewerMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < NESNameTableViewer > ( ) ;
2011-02-21 09:48:53 +00:00
}
2017-05-22 16:14:38 +00:00
private void MusicRipperMenuItem_Click ( object sender , EventArgs e )
2015-05-08 00:56:46 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < NESMusicRipper > ( ) ;
2015-05-08 00:56:46 +00:00
}
2020-01-14 17:12:52 +00:00
private void NesGameGenieCodesMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadGameGenieEc ( ) ;
2013-10-27 13:53:28 +00:00
}
2013-10-27 07:54:00 +00:00
2020-01-14 17:12:52 +00:00
private void NesGraphicSettingsMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-15 22:36:46 +00:00
if ( Emulator is NES nes )
2017-05-22 16:14:38 +00:00
{
2019-12-21 18:49:24 +00:00
using var form = new NESGraphicsConfig ( this , Config , nes . GetSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( this ) ;
2017-05-22 16:14:38 +00:00
}
2019-12-15 22:36:46 +00:00
else if ( Emulator is SubNESHawk sub )
2019-01-12 15:32:01 +00:00
{
2019-12-21 18:49:24 +00:00
using var form = new NESGraphicsConfig ( this , Config , sub . GetSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( this ) ;
2019-01-12 15:32:01 +00:00
}
2019-12-15 23:01:25 +00:00
else if ( Emulator is QuickNES quickNes )
2017-05-22 16:14:38 +00:00
{
2019-12-22 20:09:58 +00:00
using var form = new QuickNesConfig ( this , Config , quickNes . GetSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( this ) ;
2017-05-22 16:14:38 +00:00
}
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void NesSoundChannelsMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < NESSoundConfig > ( ) ;
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:14:38 +00:00
private void VsSettingsMenuItem_Click ( object sender , EventArgs e )
2016-11-05 22:32:58 +00:00
{
2019-10-27 16:42:05 +00:00
if ( Emulator is NES nes & & nes . IsVS )
2016-12-04 17:27:26 +00:00
{
2019-12-15 22:55:40 +00:00
using var form = new NesVsSettings ( this , nes . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowHawkDialog ( ) ;
}
else if ( Emulator is SubNESHawk sub & & sub . IsVs )
{
using var form = new NesVsSettings ( this , sub . GetSyncSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowHawkDialog ( ) ;
2016-12-04 17:27:26 +00:00
}
2016-11-05 22:32:58 +00:00
}
2013-12-20 22:49:35 +00:00
private void FdsEjectDiskMenuItem_Click ( object sender , EventArgs e )
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . Mode ! = MovieMode . Play )
2013-12-20 22:49:35 +00:00
{
2019-12-20 16:07:08 +00:00
ClickyVirtualPadController . Click ( "FDS Eject" ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "FDS disk ejected." ) ;
2013-12-20 22:49:35 +00:00
}
}
2017-05-22 16:14:38 +00:00
private void VsInsertCoinP1MenuItem_Click ( object sender , EventArgs e )
2016-10-30 02:35:46 +00:00
{
2019-12-15 22:55:40 +00:00
if ( Emulator is NES nes & & nes . IsVS
| | Emulator is SubNESHawk sub & & sub . IsVs )
2016-10-30 02:35:46 +00:00
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . Mode ! = MovieMode . Play )
2016-10-30 02:35:46 +00:00
{
2019-12-20 16:07:08 +00:00
ClickyVirtualPadController . Click ( "Insert Coin P1" ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "P1 Coin Inserted" ) ;
2016-10-30 02:35:46 +00:00
}
}
}
2017-05-22 16:14:38 +00:00
private void VsInsertCoinP2MenuItem_Click ( object sender , EventArgs e )
2016-10-30 02:35:46 +00:00
{
2019-12-15 22:55:40 +00:00
if ( Emulator is NES nes & & nes . IsVS
| | Emulator is SubNESHawk sub & & sub . IsVs )
2016-10-30 02:35:46 +00:00
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . Mode ! = MovieMode . Play )
2016-10-30 02:35:46 +00:00
{
2019-12-20 16:07:08 +00:00
ClickyVirtualPadController . Click ( "Insert Coin P2" ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "P2 Coin Inserted" ) ;
2016-10-30 02:35:46 +00:00
}
}
}
2017-05-22 16:14:38 +00:00
private void VsServiceSwitchMenuItem_Click ( object sender , EventArgs e )
2016-10-30 02:35:46 +00:00
{
2019-12-15 22:55:40 +00:00
if ( Emulator is NES nes & & nes . IsVS
| | Emulator is SubNESHawk sub & & sub . IsVs )
2016-10-30 02:35:46 +00:00
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . Mode ! = MovieMode . Play )
2016-10-30 02:35:46 +00:00
{
2019-12-20 16:07:08 +00:00
ClickyVirtualPadController . Click ( "Service Switch" ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Service Switch Pressed" ) ;
2016-10-30 02:35:46 +00:00
}
}
}
2014-05-16 00:24:40 +00:00
private void NesControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-15 22:40:43 +00:00
if ( Emulator is NES nes )
2017-05-22 16:14:38 +00:00
{
2019-12-15 22:40:43 +00:00
using var form = new NesControllerSettings ( this , nes . GetSyncSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2017-05-22 16:14:38 +00:00
}
2019-12-15 22:40:43 +00:00
else if ( Emulator is SubNESHawk sub )
2019-01-12 15:32:01 +00:00
{
2019-12-15 22:40:43 +00:00
using var form = new NesControllerSettings ( this , sub . GetSyncSettings ( ) . Clone ( ) ) ;
2019-11-02 04:29:09 +00:00
form . ShowDialog ( ) ;
2019-01-12 15:32:01 +00:00
}
2016-12-04 17:27:26 +00:00
else if ( Emulator is QuickNES )
2017-05-22 16:14:38 +00:00
{
2014-11-01 17:44:04 +00:00
GenericCoreConfig . DoDialog ( this , "QuickNES Controller Settings" , true , false ) ;
2017-05-22 16:14:38 +00:00
}
2014-05-16 00:24:40 +00:00
}
2014-01-06 23:56:30 +00:00
private void MovieSettingsMenuItem_Click ( object sender , EventArgs e )
2014-01-01 03:03:10 +00:00
{
2019-12-15 22:47:48 +00:00
if ( Emulator is NES nes )
{
using var dlg = new NESSyncSettingsForm ( this , nes . GetSyncSettings ( ) . Clone ( ) , nes . HasMapperProperties ) ;
dlg . ShowDialog ( this ) ;
}
else if ( Emulator is SubNESHawk sub )
{
using var dlg = new NESSyncSettingsForm ( this , sub . GetSyncSettings ( ) . Clone ( ) , sub . HasMapperProperties ) ;
dlg . ShowDialog ( this ) ;
}
2014-01-01 03:03:10 +00:00
}
2017-05-22 16:14:38 +00:00
private void BarcodeReaderMenuItem_Click ( object sender , EventArgs e )
2015-02-01 14:48:49 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < BarcodeEntry > ( ) ;
2015-02-01 14:48:49 +00:00
}
2014-01-01 03:03:10 +00:00
2013-10-27 13:53:28 +00:00
#endregion
#region PCE
2020-01-14 17:12:52 +00:00
private void PceSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2016-12-04 17:27:26 +00:00
var s = ( ( PCEngine ) Emulator ) . GetSettings ( ) ;
2013-12-22 20:41:21 +00:00
2019-12-21 22:34:29 +00:00
PceControllerSettingsMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
2013-12-22 20:41:21 +00:00
PCEAlwaysPerformSpriteLimitMenuItem . Checked = s . SpriteLimit ;
PCEAlwaysEqualizeVolumesMenuItem . Checked = s . EqualizeVolume ;
PCEArcadeCardRewindEnableMenuItem . Checked = s . ArcadeCardRewindHack ;
2013-10-27 13:53:28 +00:00
}
2014-06-28 22:48:07 +00:00
private void PceControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-16 23:06:29 +00:00
if ( Emulator is PCEngine pce )
2014-06-28 22:48:07 +00:00
{
2019-12-16 23:06:29 +00:00
using var dlg = new PCEControllerConfig ( this , pce . GetSyncSettings ( ) . Clone ( ) ) ;
2014-08-03 22:05:32 +00:00
dlg . ShowDialog ( ) ;
2014-06-28 22:48:07 +00:00
}
}
2017-05-22 16:14:38 +00:00
private void PceGraphicsSettingsMenuItem_Click ( object sender , EventArgs e )
2014-06-28 22:48:07 +00:00
{
2019-12-16 23:06:29 +00:00
if ( Emulator is PCEngine pce )
{
using var form = new PCEGraphicsConfig ( this , pce . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2014-06-28 22:48:07 +00:00
}
2017-05-22 16:14:38 +00:00
private void PceBgViewerMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < PceBgViewer > ( ) ;
2013-10-27 13:53:28 +00:00
}
2014-05-10 14:50:47 +00:00
private void PceTileViewerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-22 22:42:51 +00:00
Tools . Load < PceTileViewer > ( ) ;
2014-05-10 14:50:47 +00:00
}
2017-05-22 16:14:38 +00:00
private void PceSoundDebuggerMenuItem_Click ( object sender , EventArgs e )
2014-06-09 08:10:20 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < PCESoundDebugger > ( ) ;
2014-06-09 08:10:20 +00:00
}
2020-01-14 17:12:52 +00:00
private void PceAlwaysPerformSpriteLimitMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is PCEngine pce )
{
var s = pce . GetSettings ( ) ;
s . SpriteLimit ^ = true ;
PutCoreSettings ( s ) ;
}
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void PceAlwaysEqualizeVolumesMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is PCEngine pce )
{
var s = pce . GetSettings ( ) ;
s . EqualizeVolume ^ = true ;
PutCoreSettings ( s ) ;
}
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void PceArcadeCardRewindEnableMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is PCEngine pce )
{
var s = pce . GetSettings ( ) ;
s . ArcadeCardRewindHack ^ = true ;
PutCoreSettings ( s ) ;
}
2013-10-27 13:53:28 +00:00
}
#endregion
#region SMS
2020-01-14 17:12:52 +00:00
private void SmsSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-26 18:56:54 +00:00
SmsVdpViewerMenuItem . Visible = Game . System ! = "SG" ;
2014-03-22 05:57:27 +00:00
}
2017-05-22 16:14:38 +00:00
private void SmsBiosMenuItem_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2020-01-26 18:56:54 +00:00
GenericCoreConfig . DoDialog ( this , "SMS Settings" ) ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void GgGameGenieMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadGameGenieEc ( ) ;
2013-10-27 13:53:28 +00:00
}
2014-05-10 14:50:47 +00:00
private void SmsVdpViewerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-22 22:42:51 +00:00
Tools . Load < SmsVdpViewer > ( ) ;
2014-05-10 14:50:47 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region TI83
2020-01-14 17:12:52 +00:00
private void Ti83SubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-25 16:57:31 +00:00
AutoloadKeypadMenuItem . Checked = Config . Ti83AutoloadKeyPad ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void Ti83KeypadMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < TI83KeyPad > ( ) ;
2013-10-27 13:53:28 +00:00
}
private void AutoloadKeypadMenuItem_Click ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
Config . Ti83AutoloadKeyPad ^ = true ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void Ti83LoadTIFileMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is TI83 ti83 )
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
using var ofd = new OpenFileDialog
2013-10-27 13:53:28 +00:00
{
2020-02-20 21:04:30 +00:00
Filter = new FilesystemFilterSet ( new FilesystemFilter ( "TI-83 Program Files" , new [ ] { "83p" , "8xp" } ) ) . ToString ( ) ,
2020-03-15 20:12:36 +00:00
InitialDirectory = Config . PathEntries . RomAbsolutePath ( Emulator . SystemId ) ,
2020-02-20 21:04:30 +00:00
RestoreDirectory = true
2020-01-14 17:12:52 +00:00
} ;
2013-10-27 13:53:28 +00:00
2020-01-14 17:12:52 +00:00
if ( ofd . ShowDialog ( )
. IsOk ( ) )
{
try
2013-10-27 13:53:28 +00:00
{
2020-01-14 17:12:52 +00:00
ti83 . LinkPort . SendFileToCalc ( File . OpenRead ( ofd . FileName ) , true ) ;
}
catch ( IOException ex )
{
var message =
$"Invalid file format. Reason: {ex.Message} \nForce transfer? This may cause the calculator to crash." ;
2020-01-25 05:54:16 +00:00
if ( MessageBox . Show ( message , "Upload Failed" , MessageBoxButtons . YesNoCancel ,
MessageBoxIcon . Question ) = = DialogResult . Yes )
2020-01-14 17:12:52 +00:00
{
ti83 . LinkPort . SendFileToCalc ( File . OpenRead ( ofd . FileName ) , false ) ;
}
2013-10-27 13:53:28 +00:00
}
}
}
}
2020-01-14 17:12:52 +00:00
private void Ti83PaletteMenuItem_Click ( object sender , EventArgs e )
2014-05-26 14:06:54 +00:00
{
2019-12-16 23:58:50 +00:00
if ( Emulator is TI83 ti83 )
{
using var form = new TI83PaletteConfig ( this , ti83 . GetSettings ( ) . Clone ( ) ) ;
2019-12-17 20:26:26 +00:00
AddOnScreenMessage ( form . ShowDialog ( ) . IsOk ( )
2019-12-16 23:58:50 +00:00
? "Palette settings saved"
: "Palette config aborted" ) ;
}
2014-05-26 14:06:54 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region Atari
2020-01-14 17:12:52 +00:00
private void AtariSettingsMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2014-01-03 01:06:24 +00:00
GenericCoreConfig . DoDialog ( this , "Atari 2600 Settings" ) ;
2013-10-27 13:53:28 +00:00
}
#endregion
2017-06-11 22:17:34 +00:00
#region Atari7800
private void A7800SubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-21 22:34:29 +00:00
A7800ControllerSettingsMenuItem . Enabled
= A7800FilterSettingsMenuItem . Enabled
= MovieSession . Movie . NotActive ( ) ;
2017-06-11 22:17:34 +00:00
}
2020-01-14 17:12:52 +00:00
private void A7800ControllerSettingsMenuItem_Click ( object sender , EventArgs e )
2017-06-11 22:17:34 +00:00
{
2019-12-13 22:01:04 +00:00
if ( Emulator is A7800Hawk atari7800Hawk )
{
using var form = new A7800ControllerSettings ( this , atari7800Hawk . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2017-06-11 22:17:34 +00:00
}
2020-01-14 17:12:52 +00:00
private void A7800FilterSettingsMenuItem_Click ( object sender , EventArgs e )
2017-07-31 16:12:06 +00:00
{
2019-12-13 22:06:12 +00:00
if ( Emulator is A7800Hawk atari7800Hawk )
{
using var form = new A7800FilterSettings ( this , atari7800Hawk . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2017-07-31 16:12:06 +00:00
}
2017-06-11 22:17:34 +00:00
#endregion
2013-10-27 13:53:28 +00:00
#region GB
2020-01-14 17:12:52 +00:00
private void GbSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-25 16:57:31 +00:00
LoadGBInSGBMenuItem . Checked = Config . GbAsSgb ;
2019-12-21 08:26:49 +00:00
GBGPUViewerMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void GbCoreSettingsMenuItem_Click ( object sender , EventArgs e )
2014-07-29 01:33:54 +00:00
{
2019-12-20 16:07:08 +00:00
if ( Emulator is Gameboy gb )
2017-07-20 00:18:13 +00:00
{
2019-12-15 22:11:19 +00:00
GBPrefs . DoGBPrefsDialog ( this , gb ) ;
2017-07-20 00:18:13 +00:00
}
2019-10-27 16:42:05 +00:00
else // SameBoy
2017-07-20 00:18:13 +00:00
{
GenericCoreConfig . DoDialog ( this , "Gameboy Settings" ) ;
}
2014-07-29 01:33:54 +00:00
}
2017-05-22 16:50:40 +00:00
private void LoadGbInSgbMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2017-05-22 16:50:40 +00:00
SnesGbInSgbMenuItem_Click ( sender , e ) ;
2011-02-21 09:48:53 +00:00
}
2017-05-22 16:50:40 +00:00
private void GbGpuViewerMenuItem_Click ( object sender , EventArgs e )
2012-03-04 01:30:30 +00:00
{
2019-12-22 22:42:51 +00:00
Tools . Load < GbGpuView > ( ) ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void GbGameGenieMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadGameGenieEc ( ) ;
2013-10-27 13:53:28 +00:00
}
2020-01-14 17:12:52 +00:00
private void GbPrinterViewerMenuItem_Click ( object sender , EventArgs e )
2017-08-26 23:35:07 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < GBPrinterView > ( ) ;
2017-08-26 23:35:07 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region GBA
2020-01-14 17:12:52 +00:00
private void GbaCoreSettingsMenuItem_Click ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
GenericCoreConfig . DoDialog ( this , "Gameboy Advance Settings" ) ;
}
2013-10-27 13:53:28 +00:00
private void GbaGpuViewerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-22 22:42:51 +00:00
Tools . Load < GbaGpuView > ( ) ;
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:50:40 +00:00
private void UsemGBAMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2020-01-25 16:57:31 +00:00
Config . GbaUsemGba = true ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2017-05-22 16:50:40 +00:00
private void UseVbaNextMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2020-01-25 16:57:31 +00:00
Config . GbaUsemGba = false ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2019-12-21 08:26:49 +00:00
private void GBASubMenu_DropDownOpened ( object sender , EventArgs e )
{
GbaGpuViewerMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
}
2015-07-24 20:59:53 +00:00
private void GBACoreSelectionSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-25 16:57:31 +00:00
GBAmGBAMenuItem . Checked = Config . GbaUsemGba ;
GBAVBANextMenuItem . Checked = ! Config . GbaUsemGba ;
2015-07-24 20:59:53 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
2015-02-01 14:48:49 +00:00
#region PSX
2020-01-14 17:12:52 +00:00
private void PsxSubMenu_DropDownOpened ( object sender , EventArgs e )
2015-02-01 14:48:49 +00:00
{
2019-12-21 22:34:29 +00:00
PSXControllerSettingsMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
2015-02-01 14:48:49 +00:00
}
2020-01-14 17:12:52 +00:00
private void PsxControllerSettingsMenuItem_Click ( object sender , EventArgs e )
2015-02-01 14:48:49 +00:00
{
2019-12-16 23:21:49 +00:00
if ( Emulator is Octoshock psx )
{
using var form = new PSXControllerConfig ( this , psx . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2015-02-01 14:48:49 +00:00
}
2020-01-14 17:12:52 +00:00
private void PsxOptionsMenuItem_Click ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
2019-12-16 23:21:49 +00:00
if ( Emulator is Octoshock psx )
2017-05-22 14:04:47 +00:00
{
2019-12-22 20:09:58 +00:00
if ( PSXOptions . DoSettingsDialog ( this , Config , psx ) . IsOk ( ) )
2019-12-16 23:21:49 +00:00
{
FrameBufferResized ( ) ;
}
2017-05-22 14:04:47 +00:00
}
}
2020-01-14 17:12:52 +00:00
private void PsxDiscControlsMenuItem_Click ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < VirtualpadTool > ( ) . ScrollToPadSchema ( "Console" ) ;
2017-05-22 14:04:47 +00:00
}
2020-01-14 17:12:52 +00:00
private void PsxHashDiscsMenuItem_Click ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
2020-01-03 20:09:00 +00:00
if ( Emulator is Octoshock psx )
{
using var form = new PSXHashDiscs ( psx ) ;
form . ShowDialog ( ) ;
}
2017-05-22 14:04:47 +00:00
}
2015-02-01 14:48:49 +00:00
#endregion
2013-10-27 13:53:28 +00:00
#region SNES
2020-01-14 17:12:52 +00:00
private void SnesSubMenu_DropDownOpened ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2017-05-22 16:50:40 +00:00
if ( ( ( LibsnesCore ) Emulator ) . IsSGB )
2013-10-27 13:53:28 +00:00
{
SnesGBInSGBMenuItem . Visible = true ;
2020-01-25 16:57:31 +00:00
SnesGBInSGBMenuItem . Checked = Config . GbAsSgb ;
2013-10-27 13:53:28 +00:00
}
2013-10-27 07:54:00 +00:00
else
2013-10-27 13:53:28 +00:00
{
SnesGBInSGBMenuItem . Visible = false ;
}
2017-05-22 17:26:36 +00:00
2019-12-21 22:34:29 +00:00
SNESControllerConfigurationMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
2019-12-21 08:26:49 +00:00
SnesGfxDebuggerMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
2012-03-04 01:30:30 +00:00
}
2017-05-22 14:04:47 +00:00
private void SNESControllerConfigurationMenuItem_Click ( object sender , EventArgs e )
{
2019-12-16 23:53:54 +00:00
if ( Emulator is LibsnesCore bsnes )
{
using var form = new SNESControllerSettings ( this , bsnes . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2017-05-22 14:04:47 +00:00
}
2013-10-27 13:53:28 +00:00
private void SnesGfxDebuggerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < SNESGraphicsDebugger > ( ) ;
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:50:40 +00:00
private void SnesGbInSgbMenuItem_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-25 16:57:31 +00:00
Config . GbAsSgb ^ = true ;
2013-10-27 13:53:28 +00:00
FlagNeedsReboot ( ) ;
}
private void SnesGameGenieMenuItem_Click ( object sender , EventArgs e )
2013-10-27 07:54:00 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadGameGenieEc ( ) ;
2011-03-21 00:54:30 +00:00
}
2013-10-27 13:53:28 +00:00
private void SnesOptionsMenuItem_Click ( object sender , EventArgs e )
2011-06-26 01:22:52 +00:00
{
2019-12-16 23:53:54 +00:00
if ( Emulator is LibsnesCore bsnes )
{
SNESOptions . DoSettingsDialog ( this , bsnes ) ;
}
2011-06-26 01:22:52 +00:00
}
2019-10-27 16:42:05 +00:00
private void Snes9xSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Snes9x Settings" ) ;
}
2013-10-27 13:53:28 +00:00
#endregion
#region Coleco
private void ColecoSubMenu_DropDownOpened ( object sender , EventArgs e )
2011-06-26 01:22:52 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is ColecoVision coleco )
{
var ss = coleco . GetSyncSettings ( ) ;
ColecoSkipBiosMenuItem . Checked = ss . SkipBiosIntro ;
ColecoUseSGMMenuItem . Checked = ss . UseSGM ;
ColecoControllerSettingsMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
}
2011-06-26 01:22:52 +00:00
}
2013-10-27 13:53:28 +00:00
private void ColecoSkipBiosMenuItem_Click ( object sender , EventArgs e )
2012-07-12 21:56:59 +00:00
{
2020-01-14 17:12:52 +00:00
if ( Emulator is ColecoVision coleco )
{
var ss = coleco . GetSyncSettings ( ) ;
ss . SkipBiosIntro ^ = true ;
PutCoreSyncSettings ( ss ) ;
}
2012-07-12 21:56:59 +00:00
}
2018-03-03 15:55:15 +00:00
private void ColecoUseSGMMenuItem_Click ( object sender , EventArgs e )
{
2020-01-14 17:12:52 +00:00
if ( Emulator is ColecoVision coleco )
{
var ss = coleco . GetSyncSettings ( ) ;
ss . UseSGM ^ = true ;
PutCoreSyncSettings ( ss ) ;
}
2018-03-03 15:55:15 +00:00
}
2017-03-01 03:07:39 +00:00
private void ColecoControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-15 21:55:05 +00:00
if ( Emulator is ColecoVision coleco )
{
using var form = new ColecoControllerSettings ( this , coleco . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2017-03-01 03:07:39 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region N64
2014-05-10 13:49:00 +00:00
private void N64SubMenu_DropDownOpened ( object sender , EventArgs e )
{
N64PluginSettingsMenuItem . Enabled =
N64ControllerSettingsMenuItem . Enabled =
2019-12-21 22:34:29 +00:00
N64ExpansionSlotMenuItem . Enabled =
MovieSession . Movie . NotActive ( ) ;
2014-05-17 20:18:29 +00:00
2019-12-20 15:29:33 +00:00
N64CircularAnalogRangeMenuItem . Checked = Config . N64UseCircularAnalogConstraint ;
2014-08-03 02:22:56 +00:00
2016-12-04 17:27:26 +00:00
var s = ( ( N64 ) Emulator ) . GetSettings ( ) ;
2014-08-03 13:06:53 +00:00
MupenStyleLagMenuItem . Checked = s . UseMupenStyleLag ;
2014-09-06 23:03:34 +00:00
2017-05-22 16:50:40 +00:00
N64ExpansionSlotMenuItem . Checked = ( ( N64 ) Emulator ) . UsingExpansionSlot ;
N64ExpansionSlotMenuItem . Enabled = ! ( ( N64 ) Emulator ) . IsOverridingUserExpansionSlotSetting ;
2014-05-10 13:49:00 +00:00
}
2013-10-27 13:53:28 +00:00
private void N64PluginSettingsMenuItem_Click ( object sender , EventArgs e )
2011-06-26 01:22:52 +00:00
{
2019-12-22 19:34:14 +00:00
using var form = new N64VideoPluginConfig ( this , Config , Game , Emulator ) ;
2019-12-17 20:26:26 +00:00
if ( form . ShowDialog ( ) . IsOk ( ) )
2014-07-20 13:29:06 +00:00
{
2016-12-04 17:27:26 +00:00
if ( Emulator . IsNull ( ) )
2014-07-31 23:07:02 +00:00
{
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Plugin settings saved" ) ;
2014-07-31 23:07:02 +00:00
}
else
{
2019-10-27 16:42:05 +00:00
// Do nothing, Reboot is being flagged already if they changed anything
2014-07-31 23:07:02 +00:00
}
2014-07-20 13:29:06 +00:00
}
else
{
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Plugin settings aborted" ) ;
2014-07-20 13:29:06 +00:00
}
}
2014-05-10 13:49:00 +00:00
private void N64ControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-15 22:20:08 +00:00
if ( Emulator is N64 n64 )
2014-05-10 13:49:00 +00:00
{
2019-12-15 22:20:08 +00:00
using var form = new N64ControllersSetup ( this , n64 . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
2014-05-10 13:49:00 +00:00
}
}
2014-05-17 20:18:29 +00:00
private void N64CircularAnalogRangeMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . N64UseCircularAnalogConstraint ^ = true ;
2014-05-17 20:18:29 +00:00
}
2014-08-03 02:22:56 +00:00
private void MupenStyleLagMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var n64 = ( N64 ) Emulator ;
2014-10-19 01:22:47 +00:00
var s = n64 . GetSettings ( ) ;
2014-08-03 13:06:53 +00:00
s . UseMupenStyleLag ^ = true ;
2014-10-19 01:22:47 +00:00
n64 . PutSettings ( s ) ;
2014-08-03 02:22:56 +00:00
}
2014-09-06 23:03:34 +00:00
private void N64ExpansionSlotMenuItem_Click ( object sender , EventArgs e )
{
2020-01-14 17:12:52 +00:00
if ( Emulator is N64 n64 )
{
var ss = n64 . GetSyncSettings ( ) ;
ss . DisableExpansionSlot ^ = true ;
n64 . PutSyncSettings ( ss ) ;
FlagNeedsReboot ( ) ;
}
2014-09-06 23:03:34 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region Saturn
private void SaturnPreferencesMenuItem_Click ( object sender , EventArgs e )
2011-06-26 01:22:52 +00:00
{
2014-05-28 17:31:22 +00:00
GenericCoreConfig . DoDialog ( this , "Saturn Settings" ) ;
2013-10-27 13:53:28 +00:00
}
#endregion
2013-12-23 16:58:20 +00:00
#region DGB
2017-05-22 16:14:38 +00:00
private void DgbSettingsMenuItem_Click ( object sender , EventArgs e )
2013-12-23 16:58:20 +00:00
{
2019-12-15 22:11:19 +00:00
if ( Emulator is GambatteLink gambatte )
{
DGBPrefs . DoDGBPrefsDialog ( this , gambatte ) ;
}
2013-12-23 16:58:20 +00:00
}
2019-01-03 23:31:35 +00:00
private void DgbHawkSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Gameboy Settings" ) ;
}
2013-12-23 16:58:20 +00:00
#endregion
2019-02-09 18:41:23 +00:00
2019-09-08 20:35:39 +00:00
#region GB3x
private void GB3xSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Gameboy Settings" ) ;
}
#endregion
2019-10-04 17:52:29 +00:00
#region GB4x
private void GB4xSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Gameboy Settings" ) ;
}
#endregion
2019-02-09 18:41:23 +00:00
#region GGL
2020-01-14 17:12:52 +00:00
private void GgSettingsMenuItem_Click ( object sender , EventArgs e )
2019-02-09 18:41:23 +00:00
{
GenericCoreConfig . DoDialog ( this , "Game Gear Settings" ) ;
}
#endregion
2013-12-23 16:58:20 +00:00
2019-07-06 12:56:25 +00:00
#region Vectrex
private void VectrexSettingsMenuItem_Click ( object sender , EventArgs e )
{
2020-01-25 21:13:03 +00:00
GenericCoreConfig . DoDialog ( this , "Vectrex Settings" , true , false ) ;
2019-07-06 12:56:25 +00:00
}
#endregion
2020-01-10 20:51:56 +00:00
#region MSX
2020-01-14 17:12:52 +00:00
private void MsxSettingsMenuItem_Click ( object sender , EventArgs e )
2020-01-10 20:51:56 +00:00
{
GenericCoreConfig . DoDialog ( this , "MSX Settings" ) ;
}
#endregion
2019-11-28 22:02:26 +00:00
#region O2Hawk
private void O2HawkSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-11-29 15:38:43 +00:00
GenericCoreConfig . DoDialog ( this , "Odyssey Settings" ) ;
2019-11-28 22:02:26 +00:00
}
#endregion
2013-12-23 23:03:12 +00:00
#region GEN
2014-05-10 14:50:47 +00:00
private void GenVdpViewerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-22 22:42:51 +00:00
Tools . Load < GenVdpViewer > ( ) ;
2014-05-10 14:50:47 +00:00
}
private void GenesisSettingsMenuItem_Click ( object sender , EventArgs e )
2013-12-23 23:03:12 +00:00
{
2014-01-03 01:06:24 +00:00
GenericCoreConfig . DoDialog ( this , "Genesis Settings" ) ;
2013-12-23 23:03:12 +00:00
}
#endregion
2014-07-29 01:33:54 +00:00
#region Wondersawn
2019-10-27 16:42:05 +00:00
private void WonderSwanSettingsMenuItem_Click ( object sender , EventArgs e )
2014-07-29 01:33:54 +00:00
{
GenericCoreConfig . DoDialog ( this , "WonderSwan Settings" ) ;
}
#endregion
2015-04-13 00:46:11 +00:00
#region Apple II
2017-05-22 16:14:38 +00:00
private void AppleIISettingsMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
GenericCoreConfig . DoDialog ( this , "Apple II Settings" ) ;
}
2015-04-13 00:46:11 +00:00
private void AppleSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
if ( Emulator is AppleII )
2015-04-13 00:46:11 +00:00
{
2017-05-22 16:14:38 +00:00
AppleDisksSubMenu . Enabled = ( ( AppleII ) Emulator ) . DiskCount > 1 ;
2015-04-13 00:46:11 +00:00
}
}
private void AppleDisksSubMenu_DropDownOpened ( object sender , EventArgs e )
{
AppleDisksSubMenu . DropDownItems . Clear ( ) ;
2019-10-27 16:42:05 +00:00
if ( Emulator is AppleII appleII )
2015-04-13 00:46:11 +00:00
{
for ( int i = 0 ; i < appleII . DiskCount ; i + + )
{
var menuItem = new ToolStripMenuItem
{
2019-03-18 14:06:37 +00:00
Name = $"Disk{i + 1}" ,
Text = $"Disk{i + 1}" ,
2015-04-13 00:46:11 +00:00
Checked = appleII . CurrentDisk = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
appleII . SetDisk ( dummy ) ;
} ;
AppleDisksSubMenu . DropDownItems . Add ( menuItem ) ;
}
}
}
#endregion
2015-10-10 16:20:59 +00:00
#region C64
2017-05-16 00:52:05 +00:00
private void C64SubMenu_DropDownOpened ( object sender , EventArgs e )
{
2020-01-14 17:12:52 +00:00
if ( Emulator is C64 c64 )
2017-05-16 00:52:05 +00:00
{
2020-01-14 17:12:52 +00:00
C64DisksSubMenu . Enabled = c64 . DiskCount > 1 ;
2017-05-16 00:52:05 +00:00
}
}
private void C64DisksSubMenu_DropDownOpened ( object sender , EventArgs e )
{
C64DisksSubMenu . DropDownItems . Clear ( ) ;
2019-10-27 16:42:05 +00:00
if ( Emulator is C64 c64 )
2017-05-16 00:52:05 +00:00
{
for ( int i = 0 ; i < c64 . DiskCount ; i + + )
{
var menuItem = new ToolStripMenuItem
{
2019-03-18 14:06:37 +00:00
Name = $"Disk{i + 1}" ,
Text = $"Disk{i + 1}" ,
2017-05-16 00:52:05 +00:00
Checked = c64 . CurrentDisk = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
c64 . SetDisk ( dummy ) ;
} ;
C64DisksSubMenu . DropDownItems . Add ( menuItem ) ;
}
}
}
2015-10-10 16:20:59 +00:00
private void C64SettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "C64 Settings" ) ;
}
#endregion
2016-12-03 23:44:25 +00:00
#region Intv
2019-10-27 16:42:05 +00:00
private void IntVSubMenu_DropDownOpened ( object sender , EventArgs e )
2017-05-22 17:26:36 +00:00
{
2019-12-21 22:34:29 +00:00
IntVControllerSettingsMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
2017-05-22 17:26:36 +00:00
}
2016-12-03 23:44:25 +00:00
private void IntVControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-15 22:13:31 +00:00
if ( Emulator is Intellivision intv )
{
using var form = new IntvControllerSettings ( this , intv . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2016-12-03 23:44:25 +00:00
}
2019-10-27 16:42:05 +00:00
#endregion
#region VirtualBoy
private void VirtualBoySettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "VirtualBoy Settings" ) ;
}
#endregion
#region NeoGeoPocket
private void NeoGeoSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "NeoPop Settings" ) ;
}
#endregion
#region PC - FX
private void PCFXSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "PC-FX Settings" ) ;
}
#endregion
#region ZXSpectrum
private void ZXSpectrumControllerConfigurationMenuItem_Click ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum zxs )
{
using var form = new ZxSpectrumJoystickSettings ( this , zxs . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
private void ZXSpectrumCoreEmulationSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum speccy )
{
using var form = new ZxSpectrumCoreEmulationSettings ( this , speccy . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
private void ZXSpectrumNonSyncSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum speccy )
{
using var form = new ZxSpectrumNonSyncSettings ( this , speccy . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
private void ZXSpectrumAudioSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum speccy )
{
using var form = new ZxSpectrumAudioSettings ( this , speccy . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
private void ZXSpectrumPokeMemoryMenuItem_Click ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum speccy )
{
using var form = new ZxSpectrumPokeMemory ( this , speccy ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
private void ZXSpectrumMediaMenuItem_DropDownOpened ( object sender , EventArgs e )
{
2019-12-17 00:14:21 +00:00
if ( Emulator is ZXSpectrum speccy )
2019-10-27 16:42:05 +00:00
{
2019-12-17 00:14:21 +00:00
ZXSpectrumTapesSubMenu . Enabled = speccy . _tapeInfo . Count > 0 ;
ZXSpectrumDisksSubMenu . Enabled = speccy . _diskInfo . Count > 0 ;
2019-10-27 16:42:05 +00:00
}
}
private void ZXSpectrumTapesSubMenu_DropDownOpened ( object sender , EventArgs e )
{
ZXSpectrumTapesSubMenu . DropDownItems . Clear ( ) ;
2018-07-18 12:53:08 +00:00
2019-12-17 00:14:21 +00:00
var items = new List < ToolStripMenuItem > ( ) ;
2018-09-19 16:46:58 +00:00
2019-10-27 16:42:05 +00:00
if ( Emulator is ZXSpectrum speccy )
{
var tapeMediaIndex = speccy . _machine . TapeMediaIndex ;
for ( int i = 0 ; i < speccy . _tapeInfo . Count ; i + + )
{
string name = speccy . _tapeInfo [ i ] . Name ;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}" ,
Text = $"{i}: {name}" ,
Checked = tapeMediaIndex = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
speccy . _machine . TapeMediaIndex = dummy ;
} ;
items . Add ( menuItem ) ;
}
}
ZXSpectrumTapesSubMenu . DropDownItems . AddRange ( items . ToArray ( ) ) ;
}
private void ZXSpectrumDisksSubMenu_DropDownOpened ( object sender , EventArgs e )
{
ZXSpectrumDisksSubMenu . DropDownItems . Clear ( ) ;
var items = new List < ToolStripMenuItem > ( ) ;
if ( Emulator is ZXSpectrum speccy )
{
var diskMediaIndex = speccy . _machine . DiskMediaIndex ;
for ( int i = 0 ; i < speccy . _diskInfo . Count ; i + + )
{
string name = speccy . _diskInfo [ i ] . Name ;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}" ,
Text = $"{i}: {name}" ,
Checked = diskMediaIndex = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
speccy . _machine . DiskMediaIndex = dummy ;
} ;
items . Add ( menuItem ) ;
}
}
ZXSpectrumDisksSubMenu . DropDownItems . AddRange ( items . ToArray ( ) ) ;
}
private void ZXSpectrumExportSnapshotMenuItemMenuItem_Click ( object sender , EventArgs e )
{
2019-11-02 04:29:09 +00:00
using var zxSnapExpDialog = new SaveFileDialog
2019-10-27 16:42:05 +00:00
{
2020-02-20 21:04:30 +00:00
DefaultExt = "szx" ,
Filter = new FilesystemFilter ( "ZX-State files" , new [ ] { "szx" } ) . ToString ( ) ,
RestoreDirectory = true ,
SupportMultiDottedExtensions = true ,
Title = "EXPERIMENTAL - Export 3rd party snapshot formats"
2019-10-27 16:42:05 +00:00
} ;
try
{
2019-12-17 20:26:26 +00:00
if ( zxSnapExpDialog . ShowDialog ( ) . IsOk ( ) )
2019-10-27 16:42:05 +00:00
{
var speccy = ( ZXSpectrum ) Emulator ;
var snap = speccy . GetSZXSnapshot ( ) ;
File . WriteAllBytes ( zxSnapExpDialog . FileName , snap ) ;
}
}
catch ( Exception ex )
{
var ee = ex ;
}
}
#endregion
#region AmstradCPC
2020-01-14 17:12:52 +00:00
private void AmstradCpcCoreEmulationSettingsMenuItem_Click ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2019-12-15 21:52:04 +00:00
if ( Emulator is AmstradCPC cpc )
{
using var form = new AmstradCpcCoreEmulationSettings ( this , cpc . GetSyncSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
2020-01-14 17:12:52 +00:00
private void AmstradCpcAudioSettingsMenuItem_Click ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2019-12-15 21:52:04 +00:00
if ( Emulator is AmstradCPC cpc )
{
using var form = new AmstradCpcAudioSettings ( this , cpc . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
2020-01-14 17:12:52 +00:00
private void AmstradCpcPokeMemoryMenuItem_Click ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2019-12-15 21:52:04 +00:00
if ( Emulator is AmstradCPC cpc )
{
using var form = new AmstradCpcPokeMemory ( this , cpc ) ;
form . ShowDialog ( ) ;
}
2019-10-27 16:42:05 +00:00
}
2020-01-14 17:12:52 +00:00
private void AmstradCpcMediaMenuItem_DropDownOpened ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2018-09-19 16:46:58 +00:00
if ( Emulator is AmstradCPC )
2019-10-27 16:42:05 +00:00
{
AmstradCPCTapesSubMenu . Enabled = ( ( AmstradCPC ) Emulator ) . _tapeInfo . Count > 0 ;
AmstradCPCDisksSubMenu . Enabled = ( ( AmstradCPC ) Emulator ) . _diskInfo . Count > 0 ;
}
}
2020-01-14 17:12:52 +00:00
private void AmstradCpcTapesSubMenu_DropDownOpened ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
AmstradCPCTapesSubMenu . DropDownItems . Clear ( ) ;
var items = new List < ToolStripMenuItem > ( ) ;
if ( Emulator is AmstradCPC ams )
{
var tapeMediaIndex = ams . _machine . TapeMediaIndex ;
for ( int i = 0 ; i < ams . _tapeInfo . Count ; i + + )
{
string name = ams . _tapeInfo [ i ] . Name ;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}" ,
Text = $"{i}: {name}" ,
Checked = tapeMediaIndex = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
ams . _machine . TapeMediaIndex = dummy ;
} ;
2018-07-18 12:53:08 +00:00
2018-09-19 16:46:58 +00:00
items . Add ( menuItem ) ;
}
2019-10-27 16:42:05 +00:00
}
2018-09-19 16:46:58 +00:00
AmstradCPCTapesSubMenu . DropDownItems . AddRange ( items . ToArray ( ) ) ;
}
2018-07-18 12:53:08 +00:00
2020-01-14 17:12:52 +00:00
private void AmstradCpcDisksSubMenu_DropDownOpened ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2018-09-19 16:46:58 +00:00
AmstradCPCDisksSubMenu . DropDownItems . Clear ( ) ;
2018-07-18 12:53:08 +00:00
2019-10-27 16:42:05 +00:00
var items = new List < ToolStripMenuItem > ( ) ;
2018-09-19 16:46:58 +00:00
2019-10-27 16:42:05 +00:00
if ( Emulator is AmstradCPC ams )
{
var diskMediaIndex = ams . _machine . DiskMediaIndex ;
for ( int i = 0 ; i < ams . _diskInfo . Count ; i + + )
{
string name = ams . _diskInfo [ i ] . Name ;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}" ,
Text = $"{i}: {name}" ,
Checked = diskMediaIndex = = i
} ;
int dummy = i ;
menuItem . Click + = ( o , ev ) = >
{
ams . _machine . DiskMediaIndex = dummy ;
} ;
2018-07-18 12:53:08 +00:00
2018-09-19 16:46:58 +00:00
items . Add ( menuItem ) ;
}
2019-10-27 16:42:05 +00:00
}
2018-09-19 16:46:58 +00:00
AmstradCPCDisksSubMenu . DropDownItems . AddRange ( items . ToArray ( ) ) ;
}
2018-07-18 12:53:08 +00:00
2020-01-14 17:12:52 +00:00
private void AmstradCpcNonSyncSettingsMenuItem_Click ( object sender , EventArgs e )
2019-10-27 16:42:05 +00:00
{
2019-12-15 21:52:04 +00:00
if ( Emulator is AmstradCPC cpc )
{
using var form = new AmstradCpcNonSyncSettings ( this , cpc . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2019-12-07 14:44:49 +00:00
}
#endregion
#region Arcade
private void ArcadeSettingsMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Arcade Settings" ) ;
2019-10-27 16:42:05 +00:00
}
2018-07-18 12:53:08 +00:00
2019-10-27 16:42:05 +00:00
#endregion
2016-12-03 23:44:25 +00:00
2019-10-27 16:42:05 +00:00
#region Help
2013-10-27 07:54:00 +00:00
2019-10-27 16:42:05 +00:00
private void HelpSubMenu_DropDownOpened ( object sender , EventArgs e )
2017-05-22 14:04:47 +00:00
{
FeaturesMenuItem . Visible = VersionInfo . DeveloperBuild ;
}
2013-10-27 13:53:28 +00:00
private void OnlineHelpMenuItem_Click ( object sender , EventArgs e )
{
System . Diagnostics . Process . Start ( "http://tasvideos.org/BizHawk.html" ) ;
2011-06-26 01:22:52 +00:00
}
2011-06-10 23:09:10 +00:00
2013-10-27 13:53:28 +00:00
private void ForumsMenuItem_Click ( object sender , EventArgs e )
2011-06-10 23:09:10 +00:00
{
2013-10-27 13:53:28 +00:00
System . Diagnostics . Process . Start ( "http://tasvideos.org/forum/viewforum.php?f=64" ) ;
2011-06-10 23:09:10 +00:00
}
2011-06-18 17:45:18 +00:00
2017-05-22 14:04:47 +00:00
private void FeaturesMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < CoreFeatureAnalysis > ( ) ;
2017-05-22 14:04:47 +00:00
}
2013-10-27 13:53:28 +00:00
private void AboutMenuItem_Click ( object sender , EventArgs e )
2012-03-11 15:12:48 +00:00
{
2020-01-12 20:55:55 +00:00
using var form = new BizBox ( ) ;
form . ShowDialog ( ) ;
2012-03-11 15:12:48 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
2013-10-27 15:23:41 +00:00
#region Context Menu
private void MainFormContextMenu_Opening ( object sender , System . ComponentModel . CancelEventArgs e )
2012-03-11 17:08:25 +00:00
{
2013-11-27 23:35:32 +00:00
_wasPaused = EmulatorPaused ;
_didMenuPause = true ;
2013-10-27 15:23:41 +00:00
PauseEmulator ( ) ;
2012-03-11 17:08:25 +00:00
2016-12-04 17:27:26 +00:00
OpenRomContextMenuItem . Visible = Emulator . IsNull ( ) | | _inFullscreen ;
2013-10-27 13:53:28 +00:00
2019-12-17 18:01:43 +00:00
bool showMenuVisible = _inFullscreen | | ! MainMenuStrip . Visible ; // need to always be able to restore this as an emergency measure
2017-05-22 16:14:38 +00:00
2020-01-12 18:33:26 +00:00
if ( _argParser . _chromeless )
2017-05-22 16:14:38 +00:00
{
2019-10-27 16:42:05 +00:00
showMenuVisible = true ; // I decided this was always possible in chrome-less mode, we'll see what they think
2017-05-22 16:14:38 +00:00
}
2020-03-15 20:12:36 +00:00
var movieIsActive = MovieSession . Movie . IsActive ( ) ;
2013-10-27 15:23:41 +00:00
ShowMenuContextMenuItem . Visible =
ShowMenuContextMenuSeparator . Visible =
2014-12-14 01:43:46 +00:00
showMenuVisible ;
2013-10-27 13:53:28 +00:00
2016-12-04 17:27:26 +00:00
LoadLastRomContextMenuItem . Visible = Emulator . IsNull ( ) ;
2013-11-27 21:52:49 +00:00
2013-11-27 23:35:32 +00:00
StopAVContextMenuItem . Visible = _currAviWriter ! = null ;
2013-11-27 21:52:49 +00:00
2013-10-27 15:23:41 +00:00
ContextSeparator_AfterMovie . Visible =
ContextSeparator_AfterUndo . Visible =
ScreenshotContextMenuItem . Visible =
CloseRomContextMenuItem . Visible =
UndoSavestateContextMenuItem . Visible =
2016-12-04 17:27:26 +00:00
! Emulator . IsNull ( ) ;
2014-01-01 03:03:10 +00:00
RecordMovieContextMenuItem . Visible =
PlayMovieContextMenuItem . Visible =
2013-10-27 15:23:41 +00:00
LoadLastMovieContextMenuItem . Visible =
2020-03-15 20:12:36 +00:00
! Emulator . IsNull ( ) & & ! movieIsActive ;
2014-01-01 03:03:10 +00:00
2013-10-27 15:23:41 +00:00
RestartMovieContextMenuItem . Visible =
StopMovieContextMenuItem . Visible =
ViewSubtitlesContextMenuItem . Visible =
ViewCommentsContextMenuItem . Visible =
SaveMovieContextMenuItem . Visible =
2016-01-28 13:11:05 +00:00
SaveMovieAsContextMenuItem . Visible =
2020-03-15 20:12:36 +00:00
movieIsActive ;
2013-10-27 13:53:28 +00:00
2020-03-15 20:12:36 +00:00
BackupMovieContextMenuItem . Visible = movieIsActive ;
2013-12-10 17:59:04 +00:00
2020-03-15 20:12:36 +00:00
StopNoSaveContextMenuItem . Visible = movieIsActive & & MovieSession . Movie . Changes ;
2013-10-27 13:53:28 +00:00
2020-03-15 20:12:36 +00:00
AddSubtitleContextMenuItem . Visible = ! Emulator . IsNull ( ) & & movieIsActive & & ! MovieSession . ReadOnly ;
2013-10-27 13:53:28 +00:00
2013-11-27 23:35:32 +00:00
ConfigContextMenuItem . Visible = _inFullscreen ;
2014-01-01 03:03:10 +00:00
2020-03-15 20:12:36 +00:00
ClearSRAMContextMenuItem . Visible = File . Exists ( Config . PathEntries . SaveRamAbsolutePath ( Game , movieIsActive ) ) ;
2013-10-27 13:53:28 +00:00
2013-10-27 15:23:41 +00:00
ContextSeparator_AfterROM . Visible = OpenRomContextMenuItem . Visible | | LoadLastRomContextMenuItem . Visible ;
2013-10-27 13:53:28 +00:00
2019-12-20 15:29:33 +00:00
LoadLastRomContextMenuItem . Enabled = ! Config . RecentRoms . Empty ;
LoadLastMovieContextMenuItem . Enabled = ! Config . RecentMovies . Empty ;
2013-10-27 13:53:28 +00:00
2020-03-15 20:12:36 +00:00
if ( movieIsActive )
2013-10-27 15:23:41 +00:00
{
2019-12-20 16:07:08 +00:00
if ( MovieSession . ReadOnly )
2013-10-27 15:23:41 +00:00
{
ViewSubtitlesContextMenuItem . Text = "View Subtitles" ;
ViewCommentsContextMenuItem . Text = "View Comments" ;
}
else
{
ViewSubtitlesContextMenuItem . Text = "Edit Subtitles" ;
ViewCommentsContextMenuItem . Text = "Edit Comments" ;
}
}
2013-10-27 13:53:28 +00:00
2020-03-15 20:12:36 +00:00
var file = new FileInfo ( $"{SaveStatePrefix()}.QuickSave{Config.SaveSlot}.State.bak" ) ;
2014-01-01 03:03:10 +00:00
2013-10-27 15:23:41 +00:00
if ( file . Exists )
{
UndoSavestateContextMenuItem . Enabled = true ;
2019-12-20 15:29:33 +00:00
if ( _stateSlots . IsRedo ( Config . SaveSlot ) )
2013-10-27 15:23:41 +00:00
{
2019-12-20 15:29:33 +00:00
UndoSavestateContextMenuItem . Text = $"Redo Save to slot {Config.SaveSlot}" ;
2013-10-27 15:23:41 +00:00
UndoSavestateContextMenuItem . Image = Properties . Resources . redo ;
}
else
{
2019-12-20 15:29:33 +00:00
UndoSavestateContextMenuItem . Text = $"Undo Save to slot {Config.SaveSlot}" ;
2013-10-27 15:23:41 +00:00
UndoSavestateContextMenuItem . Image = Properties . Resources . undo ;
}
}
else
{
UndoSavestateContextMenuItem . Enabled = false ;
UndoSavestateContextMenuItem . Text = "Undo Savestate" ;
UndoSavestateContextMenuItem . Image = Properties . Resources . undo ;
}
2013-10-27 13:53:28 +00:00
2014-12-14 01:43:46 +00:00
ShowMenuContextMenuItem . Text = MainMenuStrip . Visible ? "Hide Menu" : "Show Menu" ;
2011-06-18 17:45:18 +00:00
}
2013-10-27 15:23:41 +00:00
private void MainFormContextMenu_Closing ( object sender , ToolStripDropDownClosingEventArgs e )
2011-06-18 17:45:18 +00:00
{
2013-11-27 23:35:32 +00:00
if ( ! _wasPaused )
2013-10-27 15:23:41 +00:00
{
UnpauseEmulator ( ) ;
}
2011-06-18 17:45:18 +00:00
}
2014-05-10 14:50:47 +00:00
private void DisplayConfigMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
using var window = new DisplayConfig ( Config ) ;
2019-12-17 20:26:26 +00:00
if ( window . ShowDialog ( ) . IsOk ( ) )
2014-06-29 02:28:48 +00:00
{
2019-12-20 16:07:08 +00:00
DisplayManager . RefreshUserShader ( ) ;
2014-05-23 00:50:19 +00:00
FrameBufferResized ( ) ;
2014-12-14 08:48:23 +00:00
SynchChrome ( ) ;
2015-08-30 13:44:46 +00:00
if ( window . NeedReset )
{
2019-12-17 00:45:40 +00:00
AddOnScreenMessage ( "Restart program for changed settings" ) ;
2015-08-30 13:44:46 +00:00
}
2014-06-29 02:28:48 +00:00
}
2014-05-10 14:50:47 +00:00
}
2013-10-27 15:23:41 +00:00
private void LoadLastRomContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 17:45:18 +00:00
{
2019-12-20 15:29:33 +00:00
LoadRomFromRecent ( Config . RecentRoms . MostRecent ) ;
2011-06-18 17:45:18 +00:00
}
2013-10-27 15:23:41 +00:00
private void LoadLastMovieContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 17:45:18 +00:00
{
2019-12-20 15:29:33 +00:00
LoadMoviesFromRecent ( Config . RecentMovies . MostRecent ) ;
2011-06-18 17:45:18 +00:00
}
2013-10-27 15:23:41 +00:00
private void BackupMovieContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 17:45:18 +00:00
{
2019-12-20 16:07:08 +00:00
MovieSession . Movie . SaveBackup ( ) ;
2019-12-17 20:55:26 +00:00
AddOnScreenMessage ( "Backup movie saved." ) ;
2011-06-18 17:45:18 +00:00
}
2013-10-27 15:23:41 +00:00
private void ViewSubtitlesContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 17:45:18 +00:00
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . IsActive ( ) )
2013-10-27 15:23:41 +00:00
{
2019-12-20 16:07:08 +00:00
using var form = new EditSubtitlesForm { ReadOnly = MovieSession . ReadOnly } ;
form . GetMovie ( MovieSession . Movie ) ;
2013-10-27 15:23:41 +00:00
form . ShowDialog ( ) ;
}
2011-06-18 17:45:18 +00:00
}
2013-10-27 15:23:41 +00:00
private void AddSubtitleContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 17:45:18 +00:00
{
2017-05-22 16:14:38 +00:00
// TODO: rethink this?
2013-11-27 23:35:32 +00:00
var subForm = new SubtitleMaker ( ) ;
2013-10-27 15:23:41 +00:00
subForm . DisableFrame ( ) ;
2011-07-04 19:20:11 +00:00
int index = - 1 ;
2013-11-27 23:35:32 +00:00
var sub = new Subtitle ( ) ;
2019-12-20 16:07:08 +00:00
for ( int i = 0 ; i < MovieSession . Movie . Subtitles . Count ; i + + )
2011-07-04 19:20:11 +00:00
{
2019-12-20 16:07:08 +00:00
sub = MovieSession . Movie . Subtitles [ i ] ;
2016-12-04 17:27:26 +00:00
if ( Emulator . Frame = = sub . Frame )
2011-07-04 19:20:11 +00:00
{
2017-05-22 16:14:38 +00:00
index = i ;
2011-07-04 19:20:11 +00:00
break ;
}
}
2013-10-27 15:23:41 +00:00
2011-07-04 19:20:11 +00:00
if ( index < 0 )
{
2016-12-04 17:27:26 +00:00
sub = new Subtitle { Frame = Emulator . Frame } ;
2011-07-04 19:20:11 +00:00
}
2011-06-18 17:45:18 +00:00
2013-11-28 01:33:38 +00:00
subForm . Sub = sub ;
2011-06-18 17:45:18 +00:00
2019-12-17 20:26:26 +00:00
if ( subForm . ShowDialog ( ) . IsOk ( ) )
2011-06-18 17:45:18 +00:00
{
2013-10-27 15:23:41 +00:00
if ( index > = 0 )
2012-09-03 19:42:53 +00:00
{
2019-12-20 16:07:08 +00:00
MovieSession . Movie . Subtitles . RemoveAt ( index ) ;
2012-09-03 19:42:53 +00:00
}
2011-06-18 17:45:18 +00:00
2019-12-20 16:07:08 +00:00
MovieSession . Movie . Subtitles . Add ( subForm . Sub ) ;
2011-07-31 22:29:56 +00:00
}
2013-10-27 15:23:41 +00:00
}
2011-09-24 23:00:59 +00:00
2013-10-27 15:23:41 +00:00
private void ViewCommentsContextMenuItem_Click ( object sender , EventArgs e )
{
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . IsActive ( ) )
2013-03-10 22:42:54 +00:00
{
2019-11-02 04:29:09 +00:00
using var form = new EditCommentsForm ( ) ;
2019-12-20 16:07:08 +00:00
form . GetMovie ( MovieSession . Movie ) ;
2013-10-27 15:23:41 +00:00
form . ShowDialog ( ) ;
2013-03-10 22:42:54 +00:00
}
2011-06-18 18:27:51 +00:00
}
2013-10-27 15:23:41 +00:00
private void UndoSavestateContextMenuItem_Click ( object sender , EventArgs e )
2011-06-19 01:39:36 +00:00
{
2020-03-15 20:12:36 +00:00
_stateSlots . SwapBackupSavestate ( $"{SaveStatePrefix()}.QuickSave{Config.SaveSlot}.State" ) ;
2019-12-20 15:29:33 +00:00
AddOnScreenMessage ( $"Save slot {Config.SaveSlot} restored." ) ;
2011-06-19 01:39:36 +00:00
}
2017-05-22 16:14:38 +00:00
private void ClearSramContextMenuItem_Click ( object sender , EventArgs e )
2013-10-27 15:53:37 +00:00
{
2013-11-27 23:35:32 +00:00
CloseRom ( clearSram : true ) ;
2013-10-27 15:53:37 +00:00
}
2013-10-27 15:23:41 +00:00
private void ShowMenuContextMenuItem_Click ( object sender , EventArgs e )
2011-06-18 18:27:51 +00:00
{
2013-11-03 02:51:21 +00:00
MainMenuStrip . Visible ^ = true ;
2014-12-14 01:43:46 +00:00
FrameBufferResized ( ) ;
2011-06-18 19:16:05 +00:00
}
2011-06-26 01:22:52 +00:00
2013-10-27 15:23:41 +00:00
#endregion
2013-10-27 15:53:37 +00:00
#region Status Bar
2011-07-09 19:54:24 +00:00
2013-10-27 15:53:37 +00:00
private void DumpStatusButton_Click ( object sender , EventArgs e )
2011-07-11 23:26:20 +00:00
{
2020-03-15 03:10:57 +00:00
string details = Emulator . RomDetails ( ) ;
if ( string . IsNullOrWhiteSpace ( details ) )
{
details = _defaultRomDetails ;
}
2017-05-22 16:14:38 +00:00
if ( ! string . IsNullOrEmpty ( details ) )
2012-09-03 19:42:53 +00:00
{
2019-12-29 21:05:45 +00:00
Tools . Load < LogWindow > ( ) ;
( ( LogWindow ) Tools . Get < LogWindow > ( ) ) . ShowReport ( "Dump Status Report" , details ) ;
2012-09-03 19:42:53 +00:00
}
2011-07-22 01:34:21 +00:00
}
2013-10-27 15:53:37 +00:00
private void SlotStatusButtons_MouseUp ( object sender , MouseEventArgs e )
2011-07-22 01:34:21 +00:00
{
2013-10-27 15:53:37 +00:00
int slot = 0 ;
if ( sender = = Slot1StatusButton ) slot = 1 ;
if ( sender = = Slot2StatusButton ) slot = 2 ;
if ( sender = = Slot3StatusButton ) slot = 3 ;
if ( sender = = Slot4StatusButton ) slot = 4 ;
if ( sender = = Slot5StatusButton ) slot = 5 ;
if ( sender = = Slot6StatusButton ) slot = 6 ;
if ( sender = = Slot7StatusButton ) slot = 7 ;
if ( sender = = Slot8StatusButton ) slot = 8 ;
if ( sender = = Slot9StatusButton ) slot = 9 ;
if ( sender = = Slot0StatusButton ) slot = 0 ;
2011-07-22 01:34:21 +00:00
2013-10-27 15:53:37 +00:00
if ( e . Button = = MouseButtons . Left )
2013-10-27 07:54:00 +00:00
{
2020-03-15 20:12:36 +00:00
if ( HasSlot ( slot ) )
2013-10-27 07:54:00 +00:00
{
2019-03-18 14:06:37 +00:00
LoadQuickSave ( $"QuickSave{slot}" ) ;
2013-10-27 07:54:00 +00:00
}
}
2013-10-27 15:53:37 +00:00
else if ( e . Button = = MouseButtons . Right )
2011-07-22 01:34:21 +00:00
{
2019-03-18 14:06:37 +00:00
SaveQuickSave ( $"QuickSave{slot}" ) ;
2011-07-22 01:34:21 +00:00
}
2013-10-27 13:53:28 +00:00
}
2012-10-06 12:27:56 +00:00
2013-10-27 15:53:37 +00:00
private void KeyPriorityStatusLabel_Click ( object sender , EventArgs e )
2013-10-27 13:53:28 +00:00
{
2020-01-25 16:57:31 +00:00
switch ( Config . InputHotkeyOverrideOptions )
2013-10-27 13:53:28 +00:00
{
2013-10-27 15:53:37 +00:00
default :
case 0 :
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 1 ;
2013-10-27 15:53:37 +00:00
break ;
case 1 :
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 2 ;
2013-10-27 15:53:37 +00:00
break ;
case 2 :
2020-01-25 16:57:31 +00:00
Config . InputHotkeyOverrideOptions = 0 ;
2013-10-27 15:53:37 +00:00
break ;
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:14:38 +00:00
2013-10-27 15:53:37 +00:00
UpdateKeyPriorityIcon ( ) ;
2011-07-22 01:34:21 +00:00
}
2011-07-31 21:39:54 +00:00
2011-08-09 23:27:47 +00:00
private void FreezeStatus_Click ( object sender , EventArgs e )
{
2013-10-27 15:53:37 +00:00
if ( CheatStatusButton . Visible )
2012-09-29 22:37:34 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < Cheats > ( ) ;
2012-09-29 22:37:34 +00:00
}
2011-08-09 23:27:47 +00:00
}
2014-07-29 01:33:54 +00:00
private void ProfileFirstBootLabel_Click ( object sender , EventArgs e )
{
2017-05-22 16:14:38 +00:00
// We do not check if the user is actually setting a profile here.
// This is intentional.
2019-12-20 15:29:33 +00:00
using var profileForm = new ProfileConfig ( this , Emulator , Config ) ;
2014-10-16 23:24:17 +00:00
profileForm . ShowDialog ( ) ;
2019-12-20 15:29:33 +00:00
Config . FirstBoot = false ;
2014-10-16 23:24:17 +00:00
ProfileFirstBootLabel . Visible = false ;
2014-07-29 01:33:54 +00:00
}
2019-02-10 22:22:29 +00:00
private void LinkConnectStatusBarButton_Click ( object sender , EventArgs e )
{
// toggle Link status (only outside of a movie session)
2019-12-21 22:34:29 +00:00
if ( MovieSession . Movie . Mode ! = MovieMode . Play )
2019-02-10 22:22:29 +00:00
{
Emulator . AsLinkable ( ) . LinkConnected ^ = true ;
Console . WriteLine ( "Cable connect status to {0}" , Emulator . AsLinkable ( ) . LinkConnected ) ;
}
}
2015-01-04 15:04:44 +00:00
private void UpdateNotification_Click ( object sender , EventArgs e )
{
2019-12-20 16:07:08 +00:00
Sound . StopSound ( ) ;
2015-01-04 15:04:44 +00:00
DialogResult result = MessageBox . Show ( this ,
2020-01-25 16:57:31 +00:00
$"Version {Config.UpdateLatestVersion} is now available. Would you like to open the BizHawk homepage?\r\n\r\nClick \" No \ " to hide the update notification for this version." ,
2015-01-04 15:04:44 +00:00
"New Version Available" , MessageBoxButtons . YesNoCancel , MessageBoxIcon . Question ) ;
2019-12-20 16:07:08 +00:00
Sound . StartSound ( ) ;
2015-01-04 15:04:44 +00:00
if ( result = = DialogResult . Yes )
{
2017-05-22 16:14:38 +00:00
System . Threading . ThreadPool . QueueUserWorkItem ( s = >
{
using ( System . Diagnostics . Process . Start ( VersionInfo . HomePage ) )
{
}
} ) ;
2015-01-04 15:04:44 +00:00
}
else if ( result = = DialogResult . No )
{
UpdateChecker . IgnoreNewVersion ( ) ;
UpdateChecker . BeginCheck ( skipCheck : true ) ; // Trigger event to hide new version notification
}
}
2013-10-27 15:53:37 +00:00
#endregion
#region Form Events
private void MainForm_Activated ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2019-12-20 15:29:33 +00:00
if ( ! Config . RunInBackground )
2012-10-07 19:52:09 +00:00
{
2013-11-27 23:35:32 +00:00
if ( ! _wasPaused )
2012-10-07 19:52:09 +00:00
{
2013-10-27 15:53:37 +00:00
UnpauseEmulator ( ) ;
2012-10-07 19:52:09 +00:00
}
2017-05-22 16:50:40 +00:00
2013-11-27 23:35:32 +00:00
_wasPaused = false ;
2012-10-07 19:52:09 +00:00
}
}
2013-10-27 15:53:37 +00:00
private void MainForm_Deactivate ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2019-12-20 15:29:33 +00:00
if ( ! Config . RunInBackground )
2012-10-07 19:52:09 +00:00
{
2013-10-27 15:53:37 +00:00
if ( EmulatorPaused )
2012-10-07 19:52:09 +00:00
{
2013-11-27 23:35:32 +00:00
_wasPaused = true ;
2012-10-07 19:52:09 +00:00
}
2017-05-22 16:14:38 +00:00
2013-10-27 15:53:37 +00:00
PauseEmulator ( ) ;
2012-10-07 19:52:09 +00:00
}
}
2017-05-22 16:50:40 +00:00
private void TimerMouseIdle_Tick ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2020-01-25 16:57:31 +00:00
if ( _inFullscreen & & Config . DispChromeFullscreenAutohideMouse )
2017-05-22 16:14:38 +00:00
{
2015-07-24 20:59:53 +00:00
AutohideCursor ( true ) ;
2017-05-22 16:14:38 +00:00
}
2015-07-24 20:59:53 +00:00
}
2013-10-27 15:53:37 +00:00
private void MainForm_Enter ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2015-07-24 20:59:53 +00:00
AutohideCursor ( false ) ;
}
2017-02-05 02:52:32 +00:00
public void MainForm_MouseWheel ( object sender , MouseEventArgs e )
{
MouseWheelTracker + = e . Delta ;
}
2015-07-24 20:59:53 +00:00
public void MainForm_MouseMove ( object sender , MouseEventArgs e )
{
AutohideCursor ( false ) ;
2012-10-07 19:52:09 +00:00
}
2013-10-27 15:53:37 +00:00
public void MainForm_MouseClick ( object sender , MouseEventArgs e )
2012-10-07 19:52:09 +00:00
{
2015-07-24 20:59:53 +00:00
AutohideCursor ( false ) ;
2019-12-20 15:29:33 +00:00
if ( Config . ShowContextMenu & & e . Button = = MouseButtons . Right )
2012-10-07 19:52:09 +00:00
{
2013-10-27 15:53:37 +00:00
MainFormContextMenu . Show (
2017-05-22 16:14:38 +00:00
PointToScreen ( new Point ( e . X , e . Y + MainformMenu . Height ) ) ) ;
2012-10-07 19:52:09 +00:00
}
}
2013-10-27 15:53:37 +00:00
private void MainForm_Resize ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2015-02-22 03:53:07 +00:00
PresentationPanel . Resized = true ;
2012-10-07 19:52:09 +00:00
}
2013-10-27 15:53:37 +00:00
private void MainForm_Shown ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2020-01-25 16:57:31 +00:00
if ( Emulator is TI83 & & Config . Ti83AutoloadKeyPad )
2019-11-17 17:35:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < TI83KeyPad > ( ) ;
2019-11-17 17:35:53 +00:00
}
2019-12-20 15:29:33 +00:00
Tools . AutoLoad ( ) ;
2019-11-17 17:35:53 +00:00
2019-12-20 15:29:33 +00:00
if ( Config . RecentWatches . AutoLoad )
2019-11-17 17:35:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . LoadRamWatch ( ! Config . DisplayRamWatch ) ;
2019-11-17 17:35:53 +00:00
}
2019-12-20 15:29:33 +00:00
if ( Config . RecentCheats . AutoLoad )
2019-11-17 17:35:53 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < Cheats > ( ) ;
2019-11-17 17:35:53 +00:00
}
2013-10-27 15:53:37 +00:00
HandlePlatformMenus ( ) ;
2012-10-07 19:52:09 +00:00
}
2013-10-27 15:53:37 +00:00
protected override void OnClosed ( EventArgs e )
2012-10-07 19:52:09 +00:00
{
2018-04-08 06:48:47 +00:00
_windowClosedAndSafeToExitProcess = true ;
2013-10-27 15:53:37 +00:00
base . OnClosed ( e ) ;
2012-10-07 19:52:09 +00:00
}
2013-10-27 15:53:37 +00:00
private void MainformMenu_MenuActivate ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2013-10-27 15:53:37 +00:00
HandlePlatformMenus ( ) ;
2019-12-20 15:29:33 +00:00
if ( Config . PauseWhenMenuActivated )
2012-10-07 19:52:09 +00:00
{
2013-11-27 23:35:32 +00:00
_wasPaused = EmulatorPaused ;
_didMenuPause = true ;
2013-10-27 15:53:37 +00:00
PauseEmulator ( ) ;
2012-10-07 19:52:09 +00:00
}
}
2013-10-27 15:53:37 +00:00
private void MainformMenu_MenuDeactivate ( object sender , EventArgs e )
2012-10-07 19:52:09 +00:00
{
2013-11-27 23:35:32 +00:00
if ( ! _wasPaused )
2012-10-07 19:52:09 +00:00
{
2013-10-27 15:53:37 +00:00
UnpauseEmulator ( ) ;
2012-10-07 19:52:09 +00:00
}
}
2013-07-16 01:59:59 +00:00
private static void FormDragEnter ( object sender , DragEventArgs e )
{
2020-02-03 18:42:28 +00:00
e . Set ( DragDropEffects . Copy ) ;
2013-07-16 01:59:59 +00:00
}
private void FormDragDrop ( object sender , DragEventArgs e )
{
2020-03-12 22:49:05 +00:00
Sound . StopSound ( ) ;
2014-05-26 04:50:30 +00:00
try
{
2019-11-09 19:40:15 +00:00
FormDragDrop_internal ( e ) ;
2014-05-26 04:50:30 +00:00
}
catch ( Exception ex )
{
2019-03-18 14:06:37 +00:00
MessageBox . Show ( $"Exception on drag and drop:\n{ex}" ) ;
2014-05-26 04:50:30 +00:00
}
2020-03-12 22:49:05 +00:00
finally
{
Sound . StartSound ( ) ;
}
2014-05-26 04:50:30 +00:00
}
2013-10-27 15:53:37 +00:00
#endregion
2011-02-21 09:48:53 +00:00
}
2012-03-09 21:36:55 +00:00
}