Refactoring of Hex Editor, and support poking of 4-byte addresses (how was that left as todo this whole time?)

This commit is contained in:
adelikat 2013-11-28 14:43:27 +00:00
parent e6d85a4087
commit 3ddf1f394b
3 changed files with 1123 additions and 1263 deletions

View File

@ -2,6 +2,8 @@
{ {
partial class HexEditor partial class HexEditor
{ {
private const int fontHeight = 14;
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
/// </summary> /// </summary>
@ -47,9 +49,9 @@
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.memoryDomainsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.memoryDomainsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dataSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dataSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.byteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.DataSizeByteMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.byteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.DataSizeWordMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.byteToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.DataSizeDWordMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.enToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.enToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.goToAddressToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.goToAddressToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -176,7 +178,7 @@
this.copyToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Duplicate; this.copyToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Duplicate;
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C)));
this.copyToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.copyToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.copyToolStripMenuItem.Text = "&Copy"; this.copyToolStripMenuItem.Text = "&Copy";
this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click);
// //
@ -185,20 +187,20 @@
this.pasteToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Paste; this.pasteToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Paste;
this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";
this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V)));
this.pasteToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.pasteToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.pasteToolStripMenuItem.Text = "&Paste"; this.pasteToolStripMenuItem.Text = "&Paste";
this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click); this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click);
// //
// toolStripSeparator6 // toolStripSeparator6
// //
this.toolStripSeparator6.Name = "toolStripSeparator6"; this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(143, 6); this.toolStripSeparator6.Size = new System.Drawing.Size(149, 6);
// //
// findToolStripMenuItem1 // findToolStripMenuItem1
// //
this.findToolStripMenuItem1.Name = "findToolStripMenuItem1"; this.findToolStripMenuItem1.Name = "findToolStripMenuItem1";
this.findToolStripMenuItem1.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); this.findToolStripMenuItem1.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F)));
this.findToolStripMenuItem1.Size = new System.Drawing.Size(146, 22); this.findToolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
this.findToolStripMenuItem1.Text = "&Find..."; this.findToolStripMenuItem1.Text = "&Find...";
this.findToolStripMenuItem1.Click += new System.EventHandler(this.findToolStripMenuItem1_Click); this.findToolStripMenuItem1.Click += new System.EventHandler(this.findToolStripMenuItem1_Click);
// //
@ -206,7 +208,7 @@
// //
this.findNextToolStripMenuItem.Name = "findNextToolStripMenuItem"; this.findNextToolStripMenuItem.Name = "findNextToolStripMenuItem";
this.findNextToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3; this.findNextToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3;
this.findNextToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.findNextToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.findNextToolStripMenuItem.Text = "Find Next"; this.findNextToolStripMenuItem.Text = "Find Next";
this.findNextToolStripMenuItem.Click += new System.EventHandler(this.findNextToolStripMenuItem_Click); this.findNextToolStripMenuItem.Click += new System.EventHandler(this.findNextToolStripMenuItem_Click);
// //
@ -214,7 +216,7 @@
// //
this.findPrevToolStripMenuItem.Name = "findPrevToolStripMenuItem"; this.findPrevToolStripMenuItem.Name = "findPrevToolStripMenuItem";
this.findPrevToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2; this.findPrevToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2;
this.findPrevToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.findPrevToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.findPrevToolStripMenuItem.Text = "Find Prev"; this.findPrevToolStripMenuItem.Text = "Find Prev";
this.findPrevToolStripMenuItem.Click += new System.EventHandler(this.findPrevToolStripMenuItem_Click); this.findPrevToolStripMenuItem.Click += new System.EventHandler(this.findPrevToolStripMenuItem_Click);
// //
@ -245,33 +247,33 @@
// dataSizeToolStripMenuItem // dataSizeToolStripMenuItem
// //
this.dataSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.dataSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.byteToolStripMenuItem, this.DataSizeByteMenuItem,
this.byteToolStripMenuItem1, this.DataSizeWordMenuItem,
this.byteToolStripMenuItem2}); this.DataSizeDWordMenuItem});
this.dataSizeToolStripMenuItem.Name = "dataSizeToolStripMenuItem"; this.dataSizeToolStripMenuItem.Name = "dataSizeToolStripMenuItem";
this.dataSizeToolStripMenuItem.Size = new System.Drawing.Size(219, 22); this.dataSizeToolStripMenuItem.Size = new System.Drawing.Size(219, 22);
this.dataSizeToolStripMenuItem.Text = "Data Size"; this.dataSizeToolStripMenuItem.Text = "Data Size";
// //
// byteToolStripMenuItem // DataSizeByteMenuItem
// //
this.byteToolStripMenuItem.Name = "byteToolStripMenuItem"; this.DataSizeByteMenuItem.Name = "DataSizeByteMenuItem";
this.byteToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.DataSizeByteMenuItem.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem.Text = "1 Byte"; this.DataSizeByteMenuItem.Text = "1 Byte";
this.byteToolStripMenuItem.Click += new System.EventHandler(this.byteToolStripMenuItem_Click); this.DataSizeByteMenuItem.Click += new System.EventHandler(this.byteToolStripMenuItem_Click);
// //
// byteToolStripMenuItem1 // DataSizeWordMenuItem
// //
this.byteToolStripMenuItem1.Name = "byteToolStripMenuItem1"; this.DataSizeWordMenuItem.Name = "DataSizeWordMenuItem";
this.byteToolStripMenuItem1.Size = new System.Drawing.Size(106, 22); this.DataSizeWordMenuItem.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem1.Text = "2 Byte"; this.DataSizeWordMenuItem.Text = "2 Byte";
this.byteToolStripMenuItem1.Click += new System.EventHandler(this.byteToolStripMenuItem1_Click); this.DataSizeWordMenuItem.Click += new System.EventHandler(this.byteToolStripMenuItem1_Click);
// //
// byteToolStripMenuItem2 // DataSizeDWordMenuItem
// //
this.byteToolStripMenuItem2.Name = "byteToolStripMenuItem2"; this.DataSizeDWordMenuItem.Name = "DataSizeDWordMenuItem";
this.byteToolStripMenuItem2.Size = new System.Drawing.Size(106, 22); this.DataSizeDWordMenuItem.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem2.Text = "4 Byte"; this.DataSizeDWordMenuItem.Text = "4 Byte";
this.byteToolStripMenuItem2.Click += new System.EventHandler(this.byteToolStripMenuItem2_Click); this.DataSizeDWordMenuItem.Click += new System.EventHandler(this.byteToolStripMenuItem2_Click);
// //
// enToolStripMenuItem // enToolStripMenuItem
// //
@ -547,7 +549,6 @@
this.MemoryViewerBox.TabIndex = 2; this.MemoryViewerBox.TabIndex = 2;
this.MemoryViewerBox.TabStop = false; this.MemoryViewerBox.TabStop = false;
this.MemoryViewerBox.Paint += new System.Windows.Forms.PaintEventHandler(this.MemoryViewerBox_Paint); this.MemoryViewerBox.Paint += new System.Windows.Forms.PaintEventHandler(this.MemoryViewerBox_Paint);
this.MemoryViewerBox.Enter += new System.EventHandler(this.MemoryViewerBox_Enter);
// //
// AddressLabel // AddressLabel
// //
@ -579,7 +580,6 @@
this.AddressesLabel.Size = new System.Drawing.Size(31, 13); this.AddressesLabel.Size = new System.Drawing.Size(31, 13);
this.AddressesLabel.TabIndex = 0; this.AddressesLabel.TabIndex = 0;
this.AddressesLabel.Text = "RAM"; this.AddressesLabel.Text = "RAM";
this.AddressesLabel.Click += new System.EventHandler(this.AddressesLabel_Click);
this.AddressesLabel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AddressesLabel_MouseClick); this.AddressesLabel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AddressesLabel_MouseClick);
this.AddressesLabel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.AddressesLabel_MouseDown); this.AddressesLabel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.AddressesLabel_MouseDown);
this.AddressesLabel.MouseLeave += new System.EventHandler(this.AddressesLabel_MouseLeave); this.AddressesLabel.MouseLeave += new System.EventHandler(this.AddressesLabel_MouseLeave);
@ -636,9 +636,9 @@
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem memoryDomainsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem memoryDomainsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem dataSizeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem dataSizeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem byteToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem DataSizeByteMenuItem;
private System.Windows.Forms.ToolStripMenuItem byteToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem DataSizeWordMenuItem;
private System.Windows.Forms.ToolStripMenuItem byteToolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem DataSizeDWordMenuItem;
private System.Windows.Forms.ToolStripMenuItem goToAddressToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem goToAddressToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem restoreWindowSizeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem restoreWindowSizeToolStripMenuItem;

File diff suppressed because it is too large Load Diff

View File

@ -17,8 +17,8 @@ namespace BizHawk.Client.EmuHawk
private Mode _mode = Mode.New; private Mode _mode = Mode.New;
private bool _loading = true; private bool _loading = true;
private bool _changedSize = false; private bool _changedSize;
private bool _changedDisplayType = false; private bool _changedDisplayType;
public Mode EditorMode { get { return _mode; } } public Mode EditorMode { get { return _mode; } }
public List<Watch> Watches { get { return _watchList; } } public List<Watch> Watches { get { return _watchList; } }
@ -26,6 +26,7 @@ namespace BizHawk.Client.EmuHawk
public WatchEditor() public WatchEditor()
{ {
_changedDisplayType = false;
InitializeComponent(); InitializeComponent();
} }
@ -58,8 +59,8 @@ namespace BizHawk.Client.EmuHawk
SizeDropDown.SelectedItem = SizeDropDown.Items[2]; SizeDropDown.SelectedItem = SizeDropDown.Items[2];
break; break;
} }
int x = DisplayTypeDropDown.Items.IndexOf(Watch.DisplayTypeToString(_watchList[0].Type)); var index = DisplayTypeDropDown.Items.IndexOf(Watch.DisplayTypeToString(_watchList[0].Type));
DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[x]; DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[index];
if (_watchList.Count > 1) if (_watchList.Count > 1)
{ {
@ -79,7 +80,7 @@ namespace BizHawk.Client.EmuHawk
else else
{ {
NotesBox.Text = _watchList[0].Notes; NotesBox.Text = _watchList[0].Notes;
AddressBox.SetFromRawInt(_watchList[0].Address.Value); AddressBox.SetFromRawInt(_watchList[0].Address ?? 0);
} }
SetBigEndianCheckBox(); SetBigEndianCheckBox();
@ -135,13 +136,13 @@ namespace BizHawk.Client.EmuHawk
{ {
default: default:
case 0: case 0:
DisplayTypeDropDown.Items.AddRange(ByteWatch.ValidTypes.ConvertAll<string>(e => Watch.DisplayTypeToString(e)).ToArray()); DisplayTypeDropDown.Items.AddRange(ByteWatch.ValidTypes.ConvertAll(e => Watch.DisplayTypeToString(e)).ToArray());
break; break;
case 1: case 1:
DisplayTypeDropDown.Items.AddRange(WordWatch.ValidTypes.ConvertAll<string>(e => Watch.DisplayTypeToString(e)).ToArray()); DisplayTypeDropDown.Items.AddRange(WordWatch.ValidTypes.ConvertAll(e => Watch.DisplayTypeToString(e)).ToArray());
break; break;
case 2: case 2:
DisplayTypeDropDown.Items.AddRange(DWordWatch.ValidTypes.ConvertAll<string>(e => Watch.DisplayTypeToString(e)).ToArray()); DisplayTypeDropDown.Items.AddRange(DWordWatch.ValidTypes.ConvertAll(e => Watch.DisplayTypeToString(e)).ToArray());
break; break;
} }
DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[0]; DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[0];
@ -200,7 +201,7 @@ namespace BizHawk.Client.EmuHawk
default: default:
case Mode.New: case Mode.New:
var domain = Global.Emulator.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()); var domain = Global.Emulator.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString());
var address = AddressBox.ToRawInt().Value; var address = AddressBox.ToRawInt() ?? 0;
var notes = NotesBox.Text; var notes = NotesBox.Text;
var type = Watch.StringToDisplayType(DisplayTypeDropDown.SelectedItem.ToString()); var type = Watch.StringToDisplayType(DisplayTypeDropDown.SelectedItem.ToString());
var bigendian = BigEndianCheckBox.Checked; var bigendian = BigEndianCheckBox.Checked;
@ -228,7 +229,7 @@ namespace BizHawk.Client.EmuHawk
{ {
_watchList.Add(Watch.GenerateWatch( _watchList.Add(Watch.GenerateWatch(
watch.Domain, watch.Domain,
watch.Address.Value, watch.Address ?? 0,
watch.Size, watch.Size,
watch.Type, watch.Type,
watch.Notes, watch.Notes,
@ -250,9 +251,9 @@ namespace BizHawk.Client.EmuHawk
if (_changedSize) if (_changedSize)
{ {
for(int i = 0; i < _watchList.Count; i++) for(var i = 0; i < _watchList.Count; i++)
{ {
Watch.WatchSize size = Watch.WatchSize.Byte; var size = Watch.WatchSize.Byte;
switch(SizeDropDown.SelectedIndex) switch(SizeDropDown.SelectedIndex)
{ {
case 0: case 0:
@ -265,10 +266,9 @@ namespace BizHawk.Client.EmuHawk
size = Watch.WatchSize.DWord; size = Watch.WatchSize.DWord;
break; break;
} }
string tempNotes = _watchList[i].Notes;
_watchList[i] = Watch.GenerateWatch( _watchList[i] = Watch.GenerateWatch(
_watchList[i].Domain, _watchList[i].Domain,
_watchList.Count == 1 ? AddressBox.ToRawInt().Value : _watchList[i].Address.Value, _watchList.Count == 1 ? AddressBox.ToRawInt() ?? 0 : _watchList[i].Address ?? 0,
size, size,
_watchList[i].Type, _watchList[i].Type,
_watchList[i].Notes, _watchList[i].Notes,