2014-01-01 03:03:10 +00:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Windows.Forms ;
2017-05-31 14:47:38 +00:00
2014-01-01 03:03:10 +00:00
using BizHawk.Client.Common ;
2014-03-05 04:08:24 +00:00
using BizHawk.Emulation.Cores.Nintendo.NES ;
2016-09-27 13:52:21 +00:00
using BizHawk.Common.NumberExtensions ;
2017-05-31 14:47:38 +00:00
2014-01-06 23:56:30 +00:00
namespace BizHawk.Client.EmuHawk
2014-01-01 03:03:10 +00:00
{
public partial class NESSyncSettingsForm : Form
{
2017-05-31 14:47:38 +00:00
private readonly DataTableDictionaryBind < string , string > _dataTableDictionary ;
private readonly NES . NESSyncSettings _syncSettings ;
2014-01-01 03:03:10 +00:00
public NESSyncSettingsForm ( )
{
InitializeComponent ( ) ;
2015-08-07 21:15:50 +00:00
2017-05-31 14:47:38 +00:00
_syncSettings = ( ( NES ) Global . Emulator ) . GetSyncSettings ( ) ;
2014-02-06 02:06:17 +00:00
2017-05-31 14:47:38 +00:00
if ( ( ( NES ) Global . Emulator ) . HasMapperProperties )
2015-08-07 21:15:50 +00:00
{
2017-05-31 14:47:38 +00:00
_dataTableDictionary = new DataTableDictionaryBind < string , string > ( _syncSettings . BoardProperties ) ;
dataGridView1 . DataSource = _dataTableDictionary . Table ;
2015-08-07 21:15:50 +00:00
InfoLabel . Visible = false ;
}
else
{
BoardPropertiesGroupBox . Enabled = false ;
dataGridView1 . DataSource = null ;
dataGridView1 . Enabled = false ;
InfoLabel . Visible = true ;
}
RegionComboBox . Items . AddRange ( Enum . GetNames ( typeof ( NES . NESSyncSettings . Region ) ) ) ;
2017-05-31 14:47:38 +00:00
RegionComboBox . SelectedItem = Enum . GetName ( typeof ( NES . NESSyncSettings . Region ) , _syncSettings . RegionOverride ) ;
2016-09-27 13:52:21 +00:00
2017-05-31 14:47:38 +00:00
if ( _syncSettings . InitialWRamStatePattern ! = null & & _syncSettings . InitialWRamStatePattern . Any ( ) )
2016-09-27 13:52:21 +00:00
{
var sb = new StringBuilder ( ) ;
2017-05-31 14:47:38 +00:00
foreach ( var b in _syncSettings . InitialWRamStatePattern )
2016-09-27 13:52:21 +00:00
{
sb . Append ( b . ToHexString ( 2 ) ) ;
}
RamPatternOverrideBox . Text = sb . ToString ( ) ;
}
2014-01-01 03:03:10 +00:00
}
2014-01-10 17:41:13 +00:00
private void CancelBtn_Click ( object sender , EventArgs e )
2014-01-01 03:03:10 +00:00
{
DialogResult = DialogResult . Cancel ;
Close ( ) ;
}
2014-01-10 17:41:13 +00:00
private void OkBtn_Click ( object sender , EventArgs e )
2014-01-01 03:03:10 +00:00
{
2017-05-31 14:47:38 +00:00
var old = _syncSettings . RegionOverride ;
_syncSettings . RegionOverride = ( NES . NESSyncSettings . Region )
2014-02-06 02:06:17 +00:00
Enum . Parse (
2014-06-29 02:28:48 +00:00
typeof ( NES . NESSyncSettings . Region ) ,
2015-08-07 21:15:50 +00:00
( string ) RegionComboBox . SelectedItem ) ;
2014-02-06 02:06:17 +00:00
2017-05-31 14:47:38 +00:00
List < byte > oldRam = _syncSettings . InitialWRamStatePattern ? . ToList ( ) ? ? new List < byte > ( ) ;
2016-09-27 13:52:21 +00:00
if ( ! string . IsNullOrWhiteSpace ( RamPatternOverrideBox . Text ) )
{
2017-05-31 14:47:38 +00:00
_syncSettings . InitialWRamStatePattern = Enumerable . Range ( 0 , RamPatternOverrideBox . Text . Length )
. Where ( x = > x % 2 = = 0 )
. Select ( x = > Convert . ToByte ( RamPatternOverrideBox . Text . Substring ( x , 2 ) , 16 ) )
. ToList ( ) ;
2016-09-27 13:52:21 +00:00
}
else
{
2017-05-31 14:47:38 +00:00
_syncSettings . InitialWRamStatePattern = null ;
2016-09-27 13:52:21 +00:00
}
2017-05-31 14:47:38 +00:00
bool changed = ( _dataTableDictionary ! = null & & _dataTableDictionary . WasModified ) | |
old ! = _syncSettings . RegionOverride | |
! ( oldRam . SequenceEqual ( _syncSettings . InitialWRamStatePattern ? ? new List < byte > ( ) ) ) ;
2014-03-05 04:08:24 +00:00
2014-01-01 03:03:10 +00:00
DialogResult = DialogResult . OK ;
2014-03-05 04:08:24 +00:00
if ( changed )
2014-01-06 23:56:30 +00:00
{
2017-05-31 14:47:38 +00:00
GlobalWin . MainForm . PutCoreSyncSettings ( _syncSettings ) ;
2014-01-06 23:56:30 +00:00
}
2014-01-01 03:03:10 +00:00
}
2014-01-10 17:41:13 +00:00
private void HelpBtn_Click ( object sender , EventArgs e )
2014-01-01 03:03:10 +00:00
{
2015-08-07 21:15:50 +00:00
MessageBox . Show (
this ,
"Board Properties are special per-mapper system settings. They are only useful to advanced users creating Tool Assisted Superplays. No support will be provided if you break something with them." ,
"Help" ,
MessageBoxButtons . OK ,
MessageBoxIcon . Information ) ;
2014-01-01 03:03:10 +00:00
}
}
}