BizHawk/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs

103 lines
3.1 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
2017-05-31 14:47:38 +00:00
using BizHawk.Client.Common;
2014-03-05 04:08:24 +00:00
using BizHawk.Emulation.Cores.Nintendo.NES;
using BizHawk.Common.NumberExtensions;
2017-05-31 14:47:38 +00:00
namespace BizHawk.Client.EmuHawk
{
public partial class NESSyncSettingsForm : Form
{
2017-05-31 14:47:38 +00:00
private readonly DataTableDictionaryBind<string, string> _dataTableDictionary;
private readonly NES.NESSyncSettings _syncSettings;
public NESSyncSettingsForm()
{
InitializeComponent();
2015-08-07 21:15:50 +00:00
2017-05-31 14:47:38 +00:00
_syncSettings = ((NES)Global.Emulator).GetSyncSettings();
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);
2017-05-31 14:47:38 +00:00
if (_syncSettings.InitialWRamStatePattern != null && _syncSettings.InitialWRamStatePattern.Any())
{
var sb = new StringBuilder();
2017-05-31 14:47:38 +00:00
foreach (var b in _syncSettings.InitialWRamStatePattern)
{
sb.Append(b.ToHexString(2));
}
RamPatternOverrideBox.Text = sb.ToString();
}
}
private void CancelBtn_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
private void OkBtn_Click(object sender, EventArgs e)
{
2017-05-31 14:47:38 +00:00
var old = _syncSettings.RegionOverride;
_syncSettings.RegionOverride = (NES.NESSyncSettings.Region)
Enum.Parse(
typeof(NES.NESSyncSettings.Region),
2015-08-07 21:15:50 +00:00
(string)RegionComboBox.SelectedItem);
2017-05-31 14:47:38 +00:00
List<byte> oldRam = _syncSettings.InitialWRamStatePattern?.ToList() ?? new List<byte>();
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();
}
else
{
2017-05-31 14:47:38 +00:00
_syncSettings.InitialWRamStatePattern = null;
}
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
DialogResult = DialogResult.OK;
2014-03-05 04:08:24 +00:00
if (changed)
{
2017-05-31 14:47:38 +00:00
GlobalWin.MainForm.PutCoreSyncSettings(_syncSettings);
}
}
private void HelpBtn_Click(object sender, EventArgs e)
{
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);
}
}
}