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