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 ;
2014-07-21 18:30:54 +00:00
using BizHawk.Emulation.Common.IEmulatorExtensions ;
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 ;
2013-12-24 01:06:17 +00:00
using BizHawk.Emulation.Cores.Sega.MasterSystem ;
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-27 15:22:30 +00:00
using BizHawk.Client.EmuHawk.WinFormExtensions ;
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 ( ) ;
RecentRomSubMenu . DropDownItems . AddRange (
2019-12-20 15:29:33 +00:00
Config . RecentRoms . RecentMenu ( LoadRomFromRecent , true , true ) ) ;
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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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 ,
2017-05-22 16:14:38 +00:00
_stateSlots . 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
2013-11-27 23:35:32 +00:00
LoadState1MenuItem . Enabled = _stateSlots . HasSlot ( 1 ) ;
LoadState2MenuItem . Enabled = _stateSlots . HasSlot ( 2 ) ;
LoadState3MenuItem . Enabled = _stateSlots . HasSlot ( 3 ) ;
LoadState4MenuItem . Enabled = _stateSlots . HasSlot ( 4 ) ;
LoadState5MenuItem . Enabled = _stateSlots . HasSlot ( 5 ) ;
LoadState6MenuItem . Enabled = _stateSlots . HasSlot ( 6 ) ;
LoadState7MenuItem . Enabled = _stateSlots . HasSlot ( 7 ) ;
LoadState8MenuItem . Enabled = _stateSlots . HasSlot ( 8 ) ;
LoadState9MenuItem . Enabled = _stateSlots . HasSlot ( 9 ) ;
LoadState0MenuItem . Enabled = _stateSlots . 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 ;
}
}
2017-08-18 22:36:26 +00:00
private void SaveRAMSubMenu_DropDownOpened ( object sender , EventArgs e )
{
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 ( ) ;
RecentMovieSubMenu . DropDownItems . AddRange (
2019-12-20 15:29:33 +00:00
Config . RecentMovies . RecentMenu ( LoadMoviesFromRecent , true ) ) ;
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 ;
CaptureOSDMenuItem . Checked = Config . AVI_CaptureOSD ;
2013-10-27 07:54:00 +00:00
2019-12-21 08:26:49 +00:00
RecordAVMenuItem . Enabled = OSTailoredCode . IsUnixHost | | ! string . IsNullOrEmpty ( Global . Config . VideoWriter ) & & _currAviWriter = = null ;
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 )
{
2019-12-20 15:29:33 +00:00
ScreenshotCaptureOSDMenuItem1 . Checked = Config . Screenshot_CaptureOSD ;
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 )
{
2019-11-02 04:29:09 +00:00
using var oac = new OpenAdvancedChooser ( this ) ;
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
}
2019-12-06 18:34:20 +00:00
else if ( oac . Result = = AdvancedRomLoaderType . MAMELaunchGame )
2019-10-29 15:37:27 +00:00
{
args . OpenAdvanced = new OpenAdvanced_MAME ( ) ;
filter = "MAME Arcade ROMs (*.zip)|*.zip" ;
}
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
{
2016-12-04 17:27:26 +00:00
InitialDirectory = PathManager . GetRomsPath ( 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-17 20:26:26 +00:00
if ( result . IsOk ( ) )
2015-11-06 14:31:50 +00:00
{
return ;
}
var file = new FileInfo ( ofd . FileName ) ;
2019-12-20 15:29:33 +00:00
Config . 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
{
2016-12-04 17:27:26 +00:00
InitialDirectory = PathManager . GetRomsPath ( Emulator . SystemId ) ,
2013-10-27 07:54:00 +00:00
Multiselect = true ,
2019-11-15 00:00:33 +00:00
Filter = ToFilter ( "Movie Files" , MovieImport . AvailableImporters ( ) ) ,
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 ,
2019-12-20 15:29:33 +00:00
PathManager . MakeAbsolutePath ( Config . PathEntries . MoviesPathFragment , null ) ,
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 )
{
2019-12-20 15:29:33 +00:00
Config . AVI_CaptureOSD ^ = 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 )
{
2019-12-20 16:07:08 +00:00
var path = $"{PathManager.ScreenshotPrefix(Game)}.{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 ) ,
Filter = "PNG File (*.png)|*.png"
} ;
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 )
{
2019-12-20 15:29:33 +00:00
Config . Screenshot_CaptureOSD ^ = 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" )
& & 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
{
2019-12-20 15:29:33 +00:00
DisplayFPSMenuItem . Checked = Config . DisplayFPS ;
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
2019-12-20 15:29:33 +00:00
DisplayStatusBarMenuItem . Checked = Config . DispChrome_StatusBarWindowed ;
DisplayLogWindowMenuItem . Checked = Config . ShowLogWindow ;
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 ;
2019-12-21 08:26:49 +00:00
DisplayLogWindowMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
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
{
2019-12-20 15:29:33 +00:00
Config . DispChrome_StatusBarWindowed ^ = 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-20 15:29:33 +00:00
Config . ShowLogWindow ^ = true ;
2013-10-27 07:54:00 +00:00
2019-12-20 15:29:33 +00:00
if ( Config . ShowLogWindow )
2013-10-27 07:54:00 +00:00
{
2014-05-06 01:27:56 +00:00
LogConsole . ShowConsole ( ) ;
2013-10-27 07:54:00 +00:00
}
else
{
2014-05-06 01:27:56 +00:00
LogConsole . HideConsole ( ) ;
2013-10-27 07:54:00 +00:00
}
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 )
{
2019-12-20 15:29:33 +00:00
switch ( Config . Input_Hotkey_OverrideOptions )
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
2017-05-22 14:04:47 +00:00
private void CoreToolStripMenuItem_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
quickNESToolStripMenuItem . Checked = Config . NES_InQuickNES ;
nesHawkToolStripMenuItem . Checked = ! Config . NES_InQuickNES ;
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
{
2019-11-02 04:29:09 +00:00
using var configForm = new FirmwaresConfig ( true , args . RomPath ) ;
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
{
2019-11-02 04:29:09 +00:00
using var configForm = new FirmwaresConfig ( ) ;
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 )
{
2019-12-20 15:29:33 +00:00
using var form = new PathConfig ( 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-20 15:29:33 +00:00
using var form = new SoundConfig ( Config ) ;
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-11-02 04:29:09 +00:00
using var form = new RewindConfig ( ) ;
2019-12-17 20:30:31 +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
{
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 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
{
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 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
{
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 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
{
2019-12-20 15:29:33 +00:00
GBInSGBMenuItem . Checked = Config . GB_AsSGB ;
allowGameDBCoreOverridesToolStripMenuItem . 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 )
{
2019-12-20 15:29:33 +00:00
QuicknesCoreMenuItem . Checked = Config . NES_InQuickNES ;
NesCoreMenuItem . Checked = ! Config . NES_InQuickNES & & ! Config . UseSubNESHawk ;
SubNesHawkMenuItem . Checked = Config . UseSubNESHawk ;
2014-05-10 14:50:47 +00:00
}
2017-06-04 17:53:31 +00:00
private void NesCorePick_Click ( object sender , EventArgs e )
2014-05-10 14:50:47 +00:00
{
2019-12-20 15:29:33 +00:00
Config . NES_InQuickNES ^ = true ;
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 ;
Config . NES_InQuickNES = false ;
2019-06-17 23:22:49 +00:00
if ( ! Emulator . IsNull ( ) )
{
FlagNeedsReboot ( ) ;
}
}
2016-11-12 14:42:15 +00:00
private void CoreSNESSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Coresnes9xMenuItem . Checked = Config . SNES_InSnes9x ;
CorebsnesMenuItem . Checked = ! Config . SNES_InSnes9x ;
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
{
2019-12-20 15:29:33 +00:00
Config . SNES_InSnes9x ^ = 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 )
{
2019-12-20 15:29:33 +00:00
VbaNextCoreMenuItem . Checked = ! Config . GBA_UsemGBA ;
MgbaCoreMenuItem . Checked = Config . GBA_UsemGBA ;
2017-06-04 17:53:31 +00:00
}
private void GbaCorePick_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . GBA_UsemGBA ^ = 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 )
{
2019-12-20 15:29:33 +00:00
SgbBsnesMenuItem . Checked = Config . SGB_UseBsnes ;
SgbSameBoyMenuItem . Checked = ! Config . SGB_UseBsnes ;
2017-06-30 00:34:02 +00:00
}
2017-11-19 15:17:23 +00:00
private void GBCoreSubmenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
GBGambatteMenuItem . Checked = ! Config . GB_UseGBHawk ;
GBGBHawkMenuItem . Checked = Config . GB_UseGBHawk ;
2017-11-19 15:17:23 +00:00
}
2017-06-30 00:34:02 +00:00
private void SgbCorePick_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Config . SGB_UseBsnes ^ = 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 )
{
2019-12-20 15:29:33 +00:00
Config . GB_UseGBHawk ^ = true ;
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 )
{
2019-12-20 15:29:33 +00:00
Config . GB_AsSGB ^ = true ;
2017-06-04 17:53:31 +00:00
if ( ! Emulator . IsNull ( ) )
2017-05-27 13:56:25 +00:00
{
FlagNeedsReboot ( ) ;
}
}
2017-05-22 14:04:47 +00:00
private void AllowGameDBCoreOverridesToolStripMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +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 ) ,
Filter = "Config File (*.ini)|*.ini"
} ;
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 ) ,
Filter = "Config File (*.ini)|*.ini"
} ;
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
2014-06-04 17:02:54 +00:00
batchRunnerToolStripMenuItem . 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
2019-12-20 15:29:33 +00:00
gameSharkConverterToolStripMenuItem . Enabled = Tools . IsAvailable < GameShark > ( ) ;
2015-11-21 00:03:48 +00:00
}
private void ExternalToolToolStripMenuItem_DropDownOpening ( object sender , EventArgs e )
{
externalToolToolStripMenuItem . DropDownItems . Clear ( ) ;
2015-12-04 13:10:04 +00:00
2017-05-22 16:14:38 +00:00
foreach ( ToolStripMenuItem item in ExternalToolManager . ToolStripMenu )
2015-11-21 00:03:48 +00:00
{
2017-05-22 16:14:38 +00:00
if ( item . Enabled )
2015-11-21 00:03:48 +00:00
{
2015-12-04 13:10:04 +00:00
item . Click + = delegate
2015-11-21 00:03:48 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < IExternalToolForm > ( ( string ) item . Tag ) ;
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
2015-12-04 13:10:04 +00:00
externalToolToolStripMenuItem . DropDownItems . Add ( item ) ;
2015-11-22 16:56:08 +00:00
}
2019-10-27 16:42:05 +00:00
2015-11-22 16:37:00 +00:00
if ( externalToolToolStripMenuItem . DropDownItems . Count = = 0 )
{
externalToolToolStripMenuItem . DropDownItems . Add ( "None" ) ;
}
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
2017-05-22 14:04:47 +00:00
private void BatchRunnerToolStripMenuItem_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
2017-05-22 16:14:38 +00:00
private void QuickNesToolStripMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2019-12-20 15:29:33 +00:00
Config . NES_InQuickNES = true ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2017-05-22 16:14:38 +00:00
private void NesHawkToolStripMenuItem_Click ( object sender , EventArgs e )
2015-07-24 20:59:53 +00:00
{
2019-12-20 15:29:33 +00:00
Config . NES_InQuickNES = false ;
2015-07-24 20:59:53 +00:00
FlagNeedsReboot ( ) ;
}
2013-12-20 22:49:35 +00:00
private void NESSubMenu_DropDownOpened ( object sender , EventArgs e )
{
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
2016-12-04 17:27:26 +00:00
barcodeReaderToolStripMenuItem . Enabled = ServiceInjector . IsAvailable ( Emulator . ServiceProvider , typeof ( BarcodeEntry ) ) ;
2015-07-24 16:26:14 +00:00
2019-12-20 15:29:33 +00:00
musicRipperToolStripMenuItem . 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
}
}
}
2017-05-22 16:14:38 +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
}
private void NESNametableViewerMenuItem_Click ( object sender , EventArgs e )
{
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
}
2013-10-27 13:53:28 +00:00
private void NESGameGenieCodesMenuItem_Click ( object sender , EventArgs e )
{
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
2013-10-27 13:53:28 +00:00
private void NESGraphicSettingsMenuItem_Click ( object sender , EventArgs e )
{
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
}
private void NESSoundChannelsMenuItem_Click ( object sender , EventArgs e )
{
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
private void PCESubMenu_DropDownOpened ( object sender , EventArgs e )
{
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-20 15:29:33 +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
}
2013-10-27 13:53:28 +00:00
private void PCEAlwaysPerformSpriteLimitMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( PCEngine ) Emulator ) . GetSettings ( ) ;
2013-12-22 20:41:21 +00:00
s . SpriteLimit ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 13:53:28 +00:00
}
private void PCEAlwaysEqualizeVolumesMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( PCEngine ) Emulator ) . GetSettings ( ) ;
2013-12-22 20:41:21 +00:00
s . EqualizeVolume ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 13:53:28 +00:00
}
private void PCEArcadeCardRewindEnableMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( PCEngine ) Emulator ) . GetSettings ( ) ;
2013-12-22 20:41:21 +00:00
s . ArcadeCardRewindHack ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 13:53:28 +00:00
}
#endregion
#region SMS
private void SMSSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
SMSregionExportToolStripMenuItem . Checked = ss . ConsoleRegion = = "Export" ;
SMSregionJapanToolStripMenuItem . Checked = ss . ConsoleRegion = = "Japan" ;
2018-02-08 14:26:22 +00:00
SMSregionKoreaToolStripMenuItem . Checked = ss . ConsoleRegion = = "Korea" ;
2014-03-22 05:57:27 +00:00
SMSregionAutoToolStripMenuItem . Checked = ss . ConsoleRegion = = "Auto" ;
SMSdisplayNtscToolStripMenuItem . Checked = ss . DisplayType = = "NTSC" ;
SMSdisplayPalToolStripMenuItem . Checked = ss . DisplayType = = "PAL" ;
SMSdisplayAutoToolStripMenuItem . Checked = ss . DisplayType = = "Auto" ;
2017-10-27 23:57:18 +00:00
SMSControllerStandardToolStripMenuItem . Checked = ss . ControllerType = = "Standard" ;
SMSControllerPaddleToolStripMenuItem . Checked = ss . ControllerType = = "Paddle" ;
SMSControllerLightPhaserToolStripMenuItem . Checked = ss . ControllerType = = "Light Phaser" ;
SMSControllerSportsPadToolStripMenuItem . Checked = ss . ControllerType = = "Sports Pad" ;
2017-11-23 03:18:14 +00:00
SMSControllerKeyboardToolStripMenuItem . Checked = ss . ControllerType = = "Keyboard" ;
2014-03-13 04:15:05 +00:00
SMSenableBIOSToolStripMenuItem . Checked = ss . UseBIOS ;
2013-12-24 01:06:17 +00:00
SMSEnableFMChipMenuItem . Checked = ss . EnableFM ;
SMSOverclockMenuItem . Checked = ss . AllowOverlock ;
SMSForceStereoMenuItem . Checked = s . ForceStereoSeparation ;
SMSSpriteLimitMenuItem . Checked = s . SpriteLimit ;
2016-06-27 03:41:44 +00:00
SMSDisplayOverscanMenuItem . Checked = s . DisplayOverscan ;
2014-03-05 02:20:22 +00:00
SMSFix3DGameDisplayToolStripMenuItem . Checked = s . Fix3D ;
2013-12-24 01:06:17 +00:00
ShowClippedRegionsMenuItem . Checked = s . ShowClippedRegions ;
HighlightActiveDisplayRegionMenuItem . Checked = s . HighlightActiveDisplayRegion ;
2013-10-27 13:53:28 +00:00
SMS: Korean mappers work. Fixes Cyborg Z, Dodgeball King, F1 Spirit, Jang Pang III, Knightmare II, Nemesis, Nemesis 2, Penguin Adventure, Sangokushi 3, Street Master, Wonsiin
2014-03-14 04:30:01 +00:00
SMSEnableFMChipMenuItem . Visible =
2014-12-17 18:25:54 +00:00
SMSFix3DGameDisplayToolStripMenuItem . Visible =
SMSenableBIOSToolStripMenuItem . Visible =
2019-12-20 16:07:08 +00:00
Game . System = = "SMS" ;
2014-03-13 04:15:05 +00:00
2017-08-16 01:23:30 +00:00
SMSDisplayOverscanMenuItem . Visible =
2019-12-20 16:07:08 +00:00
Game . System = = "SMS" | | Game . System = = "SG" ;
2019-10-27 16:42:05 +00:00
SMS: Korean mappers work. Fixes Cyborg Z, Dodgeball King, F1 Spirit, Jang Pang III, Knightmare II, Nemesis, Nemesis 2, Penguin Adventure, Sangokushi 3, Street Master, Wonsiin
2014-03-14 04:30:01 +00:00
SMSOverclockMenuItem . Visible =
2013-10-27 13:53:28 +00:00
SMSForceStereoMenuItem . Visible =
2014-12-17 18:25:54 +00:00
SMSdisplayToolStripMenuItem . Visible =
2019-12-20 16:07:08 +00:00
Game . System ! = "GG" ;
2013-10-27 13:53:28 +00:00
ShowClippedRegionsMenuItem . Visible =
HighlightActiveDisplayRegionMenuItem . Visible =
GGGameGenieMenuItem . Visible =
2019-12-20 16:07:08 +00:00
Game . System = = "GG" ;
2014-03-22 05:57:27 +00:00
SMSOverclockMenuItem . Visible =
2014-12-17 18:25:54 +00:00
SMSVDPViewerToolStripMenuItem . Visible =
2015-02-23 03:33:25 +00:00
toolStripSeparator24 . Visible =
2019-12-20 16:07:08 +00:00
Game . System ! = "SG" ;
2014-03-22 05:57:27 +00:00
}
private void SMS_RegionExport_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . ConsoleRegion = "Export" ;
PutCoreSyncSettings ( ss ) ;
2013-10-27 13:53:28 +00:00
}
2014-03-22 05:57:27 +00:00
private void SMS_RegionJapan_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . ConsoleRegion = "Japan" ;
2014-03-13 04:15:05 +00:00
PutCoreSyncSettings ( ss ) ;
}
2018-02-08 14:26:22 +00:00
private void SMS_RegionKorea_Click ( object sender , EventArgs e )
{
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
ss . ConsoleRegion = "Korea" ;
PutCoreSyncSettings ( ss ) ;
}
2014-03-22 05:57:27 +00:00
private void SMS_RegionAuto_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . ConsoleRegion = "Auto" ;
2014-03-13 04:15:05 +00:00
PutCoreSyncSettings ( ss ) ;
}
2014-03-22 05:57:27 +00:00
private void SMS_DisplayNTSC_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . DisplayType = "NTSC" ;
2014-03-13 04:15:05 +00:00
PutCoreSyncSettings ( ss ) ;
}
2014-03-22 05:57:27 +00:00
private void SMS_DisplayPAL_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . DisplayType = "PAL" ;
2014-03-13 04:15:05 +00:00
PutCoreSyncSettings ( ss ) ;
}
2014-03-22 05:57:27 +00:00
private void SMS_DisplayAuto_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-22 05:57:27 +00:00
ss . DisplayType = "Auto" ;
PutCoreSyncSettings ( ss ) ;
}
2017-05-22 16:14:38 +00:00
private void SmsBiosMenuItem_Click ( object sender , EventArgs e )
2014-03-13 04:15:05 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2014-03-13 04:15:05 +00:00
ss . UseBIOS ^ = true ;
PutCoreSyncSettings ( ss ) ;
}
2017-05-22 16:14:38 +00:00
private void SmsEnableFmChipMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2013-12-24 01:06:17 +00:00
ss . EnableFM ^ = true ;
PutCoreSyncSettings ( ss ) ;
2011-02-21 09:48:53 +00:00
}
2013-10-27 13:53:28 +00:00
private void SMSOverclockMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2016-12-04 17:27:26 +00:00
var ss = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2013-12-24 01:06:17 +00:00
ss . AllowOverlock ^ = true ;
PutCoreSyncSettings ( ss ) ;
2013-07-10 18:04:05 +00:00
}
2013-10-27 13:53:28 +00:00
private void SMSForceStereoMenuItem_Click ( object sender , EventArgs e )
2013-07-10 18:04:05 +00:00
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2013-12-24 01:06:17 +00:00
s . ForceStereoSeparation ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 07:54:00 +00:00
}
2013-10-27 13:53:28 +00:00
private void SMSSpriteLimitMenuItem_Click ( object sender , EventArgs e )
2013-07-10 18:04:05 +00:00
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2013-12-24 01:06:17 +00:00
s . SpriteLimit ^ = true ;
PutCoreSettings ( s ) ;
2013-07-10 18:04:05 +00:00
}
2016-06-27 03:41:44 +00:00
private void SMSDisplayOverscanMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2016-06-27 03:41:44 +00:00
s . DisplayOverscan ^ = true ;
PutCoreSettings ( s ) ;
}
2014-03-05 02:20:22 +00:00
private void SMSFix3DDisplayMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2014-03-05 02:20:22 +00:00
s . Fix3D ^ = true ;
PutCoreSettings ( s ) ;
}
2013-10-27 13:53:28 +00:00
private void ShowClippedRegionsMenuItem_Click ( object sender , EventArgs e )
2011-02-21 09:48:53 +00:00
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2013-12-24 01:06:17 +00:00
s . ShowClippedRegions ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 13:53:28 +00:00
}
private void HighlightActiveDisplayRegionMenuItem_Click ( object sender , EventArgs e )
{
2016-12-04 17:27:26 +00:00
var s = ( ( SMS ) Emulator ) . GetSettings ( ) ;
2013-12-24 01:06:17 +00:00
s . HighlightActiveDisplayRegion ^ = true ;
PutCoreSettings ( s ) ;
2013-10-27 13:53:28 +00:00
}
private void SMSGraphicsSettingsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-16 23:44:18 +00:00
if ( Emulator is SMS sms )
{
using var form = new SmsGraphicsConfig ( this , sms . GetSettings ( ) . Clone ( ) ) ;
form . ShowDialog ( ) ;
}
2013-10-27 13:53:28 +00:00
}
private void GGGameGenieMenuItem_Click ( object sender , EventArgs e )
{
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-20 15:29:33 +00:00
Tools . Load < SmsVDPViewer > ( ) ;
2014-05-10 14:50:47 +00:00
}
2017-08-31 03:02:36 +00:00
private void SMSControllerStandardToolStripMenuItem_Click ( object sender , EventArgs e )
{
2017-10-27 23:57:18 +00:00
var s = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2017-08-31 03:02:36 +00:00
s . ControllerType = "Standard" ;
2017-10-27 23:57:18 +00:00
PutCoreSyncSettings ( s ) ;
2017-08-31 03:02:36 +00:00
}
private void SMSControllerPaddleToolStripMenuItem_Click ( object sender , EventArgs e )
{
2017-10-27 23:57:18 +00:00
var s = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2017-08-31 03:02:36 +00:00
s . ControllerType = "Paddle" ;
2017-10-27 23:57:18 +00:00
PutCoreSyncSettings ( s ) ;
2017-08-31 03:02:36 +00:00
}
2017-08-31 16:58:27 +00:00
private void SMSControllerLightPhaserToolStripMenuItem_Click ( object sender , EventArgs e )
{
2017-10-27 23:57:18 +00:00
var s = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
2017-08-31 16:58:27 +00:00
s . ControllerType = "Light Phaser" ;
2017-10-27 23:57:18 +00:00
PutCoreSyncSettings ( s ) ;
}
private void SMSControllerSportsPadToolStripMenuItem_Click ( object sender , EventArgs e )
{
var s = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
s . ControllerType = "Sports Pad" ;
PutCoreSyncSettings ( s ) ;
2017-08-31 16:58:27 +00:00
}
2019-10-27 16:42:05 +00:00
2017-11-23 03:18:14 +00:00
private void SMSControllerKeyboardToolStripMenuItem_Click ( object sender , EventArgs e )
{
var s = ( ( SMS ) Emulator ) . GetSyncSettings ( ) ;
s . ControllerType = "Keyboard" ;
PutCoreSyncSettings ( s ) ;
}
2017-08-31 16:58:27 +00:00
2013-10-27 13:53:28 +00:00
#endregion
#region TI83
private void TI83SubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
AutoloadKeypadMenuItem . Checked = Config . TI83autoloadKeyPad ;
2013-10-27 13:53:28 +00:00
}
private void KeypadMenuItem_Click ( object sender , EventArgs e )
{
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 )
{
2019-12-20 15:29:33 +00:00
Config . TI83autoloadKeyPad ^ = true ;
2013-10-27 13:53:28 +00:00
}
private void LoadTIFileMenuItem_Click ( object sender , EventArgs e )
{
2017-05-22 16:50:40 +00:00
var ti83 = ( TI83 ) Emulator ;
2019-11-02 04:29:09 +00:00
using var ofd = new OpenFileDialog
2015-02-07 15:28:38 +00:00
{
2016-12-04 17:27:26 +00:00
InitialDirectory = PathManager . GetRomsPath ( Emulator . SystemId ) ,
2015-02-07 15:28:38 +00:00
Filter = "TI-83 Program Files (*.83p,*.8xp)|*.83P;*.8xp|All Files|*.*" ,
RestoreDirectory = true
} ;
2013-10-27 13:53:28 +00:00
2019-12-17 20:26:26 +00:00
if ( ofd . ShowDialog ( ) . IsOk ( ) )
2013-10-27 13:53:28 +00:00
{
try
{
2017-05-22 16:50:40 +00:00
ti83 . LinkPort . SendFileToCalc ( File . OpenRead ( ofd . FileName ) , true ) ;
2013-10-27 13:53:28 +00:00
}
catch ( IOException ex )
{
2017-05-22 16:50:40 +00:00
var message = $"Invalid file format. Reason: {ex.Message} \nForce transfer? This may cause the calculator to crash." ;
2013-10-27 13:53:28 +00:00
2017-05-22 16:50:40 +00:00
if ( MessageBox . Show ( message , "Upload Failed" , MessageBoxButtons . YesNoCancel , MessageBoxIcon . Question ) = = DialogResult . Yes )
2013-10-27 13:53:28 +00:00
{
2017-05-22 16:50:40 +00:00
ti83 . LinkPort . SendFileToCalc ( File . OpenRead ( ofd . FileName ) , false ) ;
2013-10-27 13:53:28 +00:00
}
}
}
}
2015-02-07 15:02: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
2013-12-24 20:50:53 +00:00
private void AtariSettingsToolStripMenuItem_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
}
2017-07-31 16:12:06 +00:00
private void A7800ControllerSettingsToolStripMenuItem_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
}
2017-07-31 16:12:06 +00:00
private void A7800FilterSettingsToolStripMenuItem_Click ( object sender , EventArgs e )
{
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
private void GBSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
LoadGBInSGBMenuItem . Checked = Config . GB_AsSGB ;
2019-12-21 08:26:49 +00:00
GBGPUViewerMenuItem . Enabled = ! OSTailoredCode . IsUnixHost ;
2013-10-27 13:53:28 +00:00
}
2014-07-29 01:33:54 +00:00
private void GBCoreSettingsMenuItem_Click ( object sender , EventArgs e )
{
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-20 15:29:33 +00:00
Tools . Load < GBGPUView > ( ) ;
2013-10-27 13:53:28 +00:00
}
private void GBGameGenieMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . LoadGameGenieEc ( ) ;
2013-10-27 13:53:28 +00:00
}
2017-08-26 23:35:07 +00:00
private void GBPrinterViewerMenuItem_Click ( object sender , EventArgs e )
{
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
2019-10-27 16:42:05 +00:00
private void GBACoreSettingsToolStripMenuItem_Click ( object sender , EventArgs e )
{
GenericCoreConfig . DoDialog ( this , "Gameboy Advance Settings" ) ;
}
2013-10-27 13:53:28 +00:00
private void GbaGpuViewerMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +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
{
2019-12-20 15:29:33 +00:00
Config . GBA_UsemGBA = 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
{
2019-12-20 15:29:33 +00:00
Config . GBA_UsemGBA = 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 )
{
2019-12-20 15:29:33 +00:00
GBAmGBAMenuItem . Checked = Config . GBA_UsemGBA ;
GBAVBANextMenuItem . Checked = ! Config . GBA_UsemGBA ;
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
private void PSXSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2019-12-21 22:34:29 +00:00
PSXControllerSettingsMenuItem . Enabled = MovieSession . Movie . NotActive ( ) ;
2015-02-01 14:48:49 +00:00
}
private void PSXControllerSettingsMenuItem_Click ( object sender , EventArgs e )
{
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
}
2017-05-22 14:04:47 +00:00
private void PSXOptionsMenuItem_Click ( object sender , EventArgs e )
{
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
}
}
private void PSXDiscControlsMenuItem_Click ( object sender , EventArgs e )
{
2019-12-20 15:29:33 +00:00
Tools . Load < VirtualpadTool > ( ) . ScrollToPadSchema ( "Console" ) ;
2017-05-22 14:04:47 +00:00
}
private void PSXHashDiscsToolStripMenuItem_Click ( object sender , EventArgs e )
{
2019-11-02 04:29:09 +00:00
using var form = new PSXHashDiscs ( ) ;
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
private void SNESSubMenu_DropDownOpened ( object sender , EventArgs e )
{
2017-05-22 16:50:40 +00:00
if ( ( ( LibsnesCore ) Emulator ) . IsSGB )
2013-10-27 13:53:28 +00:00
{
SnesGBInSGBMenuItem . Visible = true ;
2019-12-20 15:29:33 +00:00
SnesGBInSGBMenuItem . Checked = Config . GB_AsSGB ;
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
{
2019-12-20 15:29:33 +00:00
Config . GB_AsSGB ^ = 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
{
2016-12-04 17:27:26 +00:00
var ss = ( ( ColecoVision ) Emulator ) . GetSyncSettings ( ) ;
2013-12-24 23:32:43 +00:00
ColecoSkipBiosMenuItem . Checked = ss . SkipBiosIntro ;
2018-03-03 15:55:15 +00:00
ColecoUseSGMMenuItem . Checked = ss . UseSGM ;
2019-12-21 22:34:29 +00:00
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
{
2016-12-04 17:27:26 +00:00
var ss = ( ( ColecoVision ) Emulator ) . GetSyncSettings ( ) ;
2013-12-24 23:32:43 +00:00
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 )
{
var ss = ( ( ColecoVision ) Emulator ) . GetSyncSettings ( ) ;
ss . UseSGM ^ = true ;
PutCoreSyncSettings ( ss ) ;
}
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 )
{
2016-12-04 17:27:26 +00:00
var n64 = ( N64 ) Emulator ;
2014-10-19 01:22:47 +00:00
var ss = n64 . GetSyncSettings ( ) ;
2014-09-06 23:03:34 +00:00
ss . DisableExpansionSlot ^ = true ;
2014-10-19 01:22:47 +00:00
n64 . PutSyncSettings ( ss ) ;
2014-09-06 23:03:34 +00:00
FlagNeedsReboot ( ) ;
}
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
private void GGLSettingsMenuItem_Click ( object sender , EventArgs e )
{
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 )
{
GenericCoreConfig . DoDialog ( this , "Vectrex 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-20 15:29:33 +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
}
2017-05-22 16:50:40 +00:00
private void GenesisGameGenieEcDc_Click ( object sender , EventArgs e )
2015-01-01 19:02:00 +00:00
{
2019-12-20 15:29:33 +00:00
Tools . Load < GenGameGenie > ( ) ;
2015-01-01 19:02:00 +00:00
}
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 )
{
if ( Emulator is C64 )
{
2017-05-22 16:50:40 +00:00
C64DisksSubMenu . Enabled = ( ( C64 ) Emulator ) . 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
{
RestoreDirectory = true
, Title = "EXPERIMENTAL - Export 3rd party snapshot formats"
, DefaultExt = "szx"
, Filter = "ZX-State files (*.szx)|*.szx"
, SupportMultiDottedExtensions = true
} ;
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
2019-12-15 21:52:04 +00:00
private void AmstradCpcCoreEmulationSettingsToolStripMenuItem_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
}
2019-12-15 21:52:04 +00:00
private void AmstradCpcAudioSettingsToolStripMenuItem_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
}
2019-12-15 21:52:04 +00:00
private void AmstradCpcPokeMemoryToolStripMenuItem_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
}
private void AmstradCPCMediaToolStripMenuItem_DropDownOpened ( object sender , EventArgs e )
{
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 ;
}
}
private void AmstradCPCTapesSubMenu_DropDownOpened ( object sender , EventArgs e )
{
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
2019-10-27 16:42:05 +00:00
private void AmstradCPCDisksSubMenu_DropDownOpened ( object sender , EventArgs e )
{
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
2019-10-27 16:42:05 +00:00
private void AmstradCPCNonSyncSettingsToolStripMenuItem_Click ( object sender , EventArgs e )
{
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
{
2014-06-04 17:02:54 +00:00
if ( VersionInfo . DeveloperBuild )
2013-10-27 13:53:28 +00:00
{
2019-11-02 04:29:09 +00:00
using var form = new AboutBox ( ) ;
form . ShowDialog ( ) ;
2013-10-27 13:53:28 +00:00
}
else
{
2019-11-02 04:29:09 +00:00
using var form = new BizBox ( ) ;
form . ShowDialog ( ) ;
2013-10-27 13:53:28 +00:00
}
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
2019-10-27 16:42:05 +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
}
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 =
2019-12-21 22:34:29 +00:00
! Emulator . IsNull ( ) & & MovieSession . Movie . NotActive ( ) ;
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 =
2019-12-21 22:34:29 +00:00
MovieSession . Movie . IsActive ( ) ;
2013-10-27 13:53:28 +00:00
2019-12-21 22:34:29 +00:00
BackupMovieContextMenuItem . Visible = MovieSession . Movie . IsActive ( ) ;
2013-12-10 17:59:04 +00:00
2019-12-21 22:34:29 +00:00
StopNoSaveContextMenuItem . Visible = MovieSession . Movie . IsActive ( ) & & MovieSession . Movie . Changes ;
2013-10-27 13:53:28 +00:00
2019-12-21 22:34:29 +00:00
AddSubtitleContextMenuItem . Visible = ! Emulator . IsNull ( ) & & MovieSession . Movie . IsActive ( ) & & ! 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
2019-12-20 16:07:08 +00:00
ClearSRAMContextMenuItem . Visible = File . Exists ( PathManager . SaveRamPath ( Game ) ) ;
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
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
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
2019-12-20 16:07:08 +00:00
var file = new FileInfo ( $"{PathManager.SaveStatePrefix(Game)}.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 SavestateTypeContextSubMenu_DropDownOpened ( object sender , EventArgs e )
{
SavestateTypeDefaultContextMenuItem . Checked = false ;
SavestateBinaryContextMenuItem . Checked = false ;
SavestateTextContextMenuItem . Checked = false ;
2019-12-20 15:29:33 +00:00
switch ( Config . SaveStateType )
2014-05-10 14:50:47 +00:00
{
2017-05-22 16:14:38 +00:00
case Config . SaveStateTypeE . Binary :
SavestateBinaryContextMenuItem . Checked = true ;
break ;
case Config . SaveStateTypeE . Text :
SavestateTextContextMenuItem . Checked = true ;
break ;
case Config . SaveStateTypeE . Default :
SavestateTypeDefaultContextMenuItem . Checked = true ;
break ;
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
{
2019-12-20 16:07:08 +00:00
_stateSlots . SwapBackupSavestate ( $"{PathManager.SaveStatePrefix(Game)}.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
{
2016-12-04 17:27:26 +00:00
string details = Emulator . CoreComm . RomStatusDetails ;
2017-05-22 16:14:38 +00:00
if ( ! string . IsNullOrEmpty ( details ) )
2012-09-03 19:42:53 +00:00
{
2019-12-20 16:07:08 +00:00
Sound . StopSound ( ) ;
2013-10-27 15:53:37 +00:00
LogWindow . ShowReport ( "Dump Status Report" , details , this ) ;
2019-12-20 16:07:08 +00:00
Sound . StartSound ( ) ;
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
{
2013-11-27 23:35:32 +00:00
if ( _stateSlots . 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
{
2019-12-20 15:29:33 +00:00
switch ( Config . Input_Hotkey_OverrideOptions )
2013-10-27 13:53:28 +00:00
{
2013-10-27 15:53:37 +00:00
default :
case 0 :
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 1 ;
2013-10-27 15:53:37 +00:00
break ;
case 1 :
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 2 ;
2013-10-27 15:53:37 +00:00
break ;
case 2 :
2019-12-20 15:29:33 +00:00
Config . Input_Hotkey_OverrideOptions = 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 ,
2019-12-20 15:29:33 +00:00
$"Version {Config.Update_LatestVersion} 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
{
2019-12-20 15:29:33 +00:00
if ( _inFullscreen & & Config . DispChrome_Fullscreen_AutohideMouse )
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
{
2019-12-20 15:29:33 +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 )
{
e . Effect = e . Data . GetDataPresent ( DataFormats . FileDrop ) ? DragDropEffects . Copy : DragDropEffects . None ;
}
private void FormDragDrop ( object sender , DragEventArgs e )
{
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
}
}
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
}