Hex Editor - implement Save, and Save ROM file menu options

This commit is contained in:
adelikat 2012-09-02 23:12:00 +00:00
parent 86f3394be0
commit 2e19451b0f
2 changed files with 96 additions and 32 deletions

View File

@ -41,6 +41,8 @@
this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.findToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.findToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.findNextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.findPrevToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
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();
@ -81,8 +83,7 @@
this.vScrollBar1 = new System.Windows.Forms.VScrollBar(); this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
this.AddressesLabel = new System.Windows.Forms.Label(); this.AddressesLabel = new System.Windows.Forms.Label();
this.Header = new System.Windows.Forms.Label(); this.Header = new System.Windows.Forms.Label();
this.findNextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.findPrevToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout();
this.ViewerContextMenuStrip.SuspendLayout(); this.ViewerContextMenuStrip.SuspendLayout();
this.MemoryViewerBox.SuspendLayout(); this.MemoryViewerBox.SuspendLayout();
@ -104,38 +105,42 @@
// fileToolStripMenuItem // fileToolStripMenuItem
// //
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.dumpToFileToolStripMenuItem, this.saveToolStripMenuItem,
this.saveAsBinaryToolStripMenuItem, this.saveAsBinaryToolStripMenuItem,
this.dumpToFileToolStripMenuItem,
this.toolStripSeparator1, this.toolStripSeparator1,
this.exitToolStripMenuItem}); this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "&File"; this.fileToolStripMenuItem.Text = "&File";
this.fileToolStripMenuItem.DropDownOpened += new System.EventHandler(this.fileToolStripMenuItem_DropDownOpened);
// //
// dumpToFileToolStripMenuItem // dumpToFileToolStripMenuItem
// //
this.dumpToFileToolStripMenuItem.Name = "dumpToFileToolStripMenuItem"; this.dumpToFileToolStripMenuItem.Name = "dumpToFileToolStripMenuItem";
this.dumpToFileToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.dumpToFileToolStripMenuItem.Size = new System.Drawing.Size(229, 22);
this.dumpToFileToolStripMenuItem.Text = "Save as text..."; this.dumpToFileToolStripMenuItem.Text = "Save as text...";
this.dumpToFileToolStripMenuItem.Click += new System.EventHandler(this.dumpToFileToolStripMenuItem_Click); this.dumpToFileToolStripMenuItem.Click += new System.EventHandler(this.dumpToFileToolStripMenuItem_Click);
// //
// saveAsBinaryToolStripMenuItem // saveAsBinaryToolStripMenuItem
// //
this.saveAsBinaryToolStripMenuItem.Name = "saveAsBinaryToolStripMenuItem"; this.saveAsBinaryToolStripMenuItem.Name = "saveAsBinaryToolStripMenuItem";
this.saveAsBinaryToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.saveAsBinaryToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.S)));
this.saveAsBinaryToolStripMenuItem.Size = new System.Drawing.Size(229, 22);
this.saveAsBinaryToolStripMenuItem.Text = "Save as binary..."; this.saveAsBinaryToolStripMenuItem.Text = "Save as binary...";
this.saveAsBinaryToolStripMenuItem.Click += new System.EventHandler(this.saveAsBinaryToolStripMenuItem_Click); this.saveAsBinaryToolStripMenuItem.Click += new System.EventHandler(this.saveAsBinaryToolStripMenuItem_Click);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(154, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(226, 6);
// //
// exitToolStripMenuItem // exitToolStripMenuItem
// //
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
this.exitToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.exitToolStripMenuItem.Size = new System.Drawing.Size(229, 22);
this.exitToolStripMenuItem.Text = "E&xit"; this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
// //
@ -158,7 +163,7 @@
this.copyToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Duplicate; this.copyToolStripMenuItem.Image = global::BizHawk.MultiClient.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(152, 22); this.copyToolStripMenuItem.Size = new System.Drawing.Size(146, 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);
// //
@ -167,23 +172,39 @@
this.pasteToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Paste; this.pasteToolStripMenuItem.Image = global::BizHawk.MultiClient.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(152, 22); this.pasteToolStripMenuItem.Size = new System.Drawing.Size(146, 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(149, 6); this.toolStripSeparator6.Size = new System.Drawing.Size(143, 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(152, 22); this.findToolStripMenuItem1.Size = new System.Drawing.Size(146, 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);
// //
// findNextToolStripMenuItem
//
this.findNextToolStripMenuItem.Name = "findNextToolStripMenuItem";
this.findNextToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3;
this.findNextToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.findNextToolStripMenuItem.Text = "Find Next";
this.findNextToolStripMenuItem.Click += new System.EventHandler(this.findNextToolStripMenuItem_Click);
//
// findPrevToolStripMenuItem
//
this.findPrevToolStripMenuItem.Name = "findPrevToolStripMenuItem";
this.findPrevToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2;
this.findPrevToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.findPrevToolStripMenuItem.Text = "Find Prev";
this.findPrevToolStripMenuItem.Click += new System.EventHandler(this.findPrevToolStripMenuItem_Click);
//
// optionsToolStripMenuItem // optionsToolStripMenuItem
// //
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -385,7 +406,7 @@
this.toolStripSeparator5, this.toolStripSeparator5,
this.gotoAddressToolStripMenuItem1}); this.gotoAddressToolStripMenuItem1});
this.ViewerContextMenuStrip.Name = "ViewerContextMenuStrip"; this.ViewerContextMenuStrip.Name = "ViewerContextMenuStrip";
this.ViewerContextMenuStrip.Size = new System.Drawing.Size(220, 214); this.ViewerContextMenuStrip.Size = new System.Drawing.Size(220, 192);
this.ViewerContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.ViewerContextMenuStrip_Opening); this.ViewerContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.ViewerContextMenuStrip_Opening);
// //
// copyToolStripMenuItem1 // copyToolStripMenuItem1
@ -530,21 +551,14 @@
this.Header.TabIndex = 2; this.Header.TabIndex = 2;
this.Header.Text = "label1"; this.Header.Text = "label1";
// //
// findNextToolStripMenuItem // saveToolStripMenuItem
// //
this.findNextToolStripMenuItem.Name = "findNextToolStripMenuItem"; this.saveToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.SaveAs;
this.findNextToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.findNextToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.findNextToolStripMenuItem.Text = "Find Next"; this.saveToolStripMenuItem.Size = new System.Drawing.Size(229, 22);
this.findNextToolStripMenuItem.Click += new System.EventHandler(this.findNextToolStripMenuItem_Click); this.saveToolStripMenuItem.Text = "Save";
// this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
// findPrevToolStripMenuItem
//
this.findPrevToolStripMenuItem.Name = "findPrevToolStripMenuItem";
this.findPrevToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2;
this.findPrevToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.findPrevToolStripMenuItem.Text = "Find Prev";
this.findPrevToolStripMenuItem.Click += new System.EventHandler(this.findPrevToolStripMenuItem_Click);
// //
// HexEditor // HexEditor
// //
@ -630,5 +644,6 @@
private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem findNextToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem findNextToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem findPrevToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem findPrevToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
} }
} }

View File

@ -14,9 +14,6 @@ namespace BizHawk.MultiClient
public partial class HexEditor : Form public partial class HexEditor : Form
{ {
//TODO: //TODO:
//allow archives for ROM File domain (instead of crashing)
//If ROM File domain, add new Save/Save As menu items (save disabled if archive)
//IF ROM Domain, no need to update values every frame!
//Increment/Decrement wrapping logic for 4 byte values is messed up //Increment/Decrement wrapping logic for 4 byte values is messed up
int defaultWidth; int defaultWidth;
@ -922,10 +919,14 @@ namespace BizHawk.MultiClient
private void SaveAsBinary() private void SaveAsBinary()
{ {
var file = GetBinarySaveFileFromUser(); SaveFileBinary(GetBinarySaveFileFromUser());
}
private void SaveFileBinary(FileInfo file)
{
if (file != null) if (file != null)
{ {
using(BinaryWriter binWriter = new BinaryWriter(File.Open(file.FullName, FileMode.Create))) using (BinaryWriter binWriter = new BinaryWriter(File.Open(file.FullName, FileMode.Create)))
{ {
byte[] dump = new byte[Domain.Size]; byte[] dump = new byte[Domain.Size];
@ -960,6 +961,20 @@ namespace BizHawk.MultiClient
return file; return file;
} }
private string GetSaveFileFilter()
{
if (Domain.Name == "ROM File")
{
string extension = Path.GetExtension(Global.MainForm.CurrentlyOpenRom);
return "Binary (*" + extension + ")|*" + extension + "|All Files|*.*";
}
else
{
return "Binary (*.bin)|*.bin|All Files|*.*";
}
}
private FileInfo GetBinarySaveFileFromUser() private FileInfo GetBinarySaveFileFromUser()
{ {
var sfd = new SaveFileDialog(); var sfd = new SaveFileDialog();
@ -972,7 +987,7 @@ namespace BizHawk.MultiClient
sfd.InitialDirectory = PathManager.GetPlatformBase(Global.Emulator.SystemId); sfd.InitialDirectory = PathManager.GetPlatformBase(Global.Emulator.SystemId);
sfd.Filter = "Binary (*.bin)|*.bin|All Files|*.*"; sfd.Filter = GetSaveFileFilter();
sfd.RestoreDirectory = true; sfd.RestoreDirectory = true;
Global.Sound.StopSound(); Global.Sound.StopSound();
var result = sfd.ShowDialog(); var result = sfd.ShowDialog();
@ -2120,5 +2135,39 @@ namespace BizHawk.MultiClient
findPrevToolStripMenuItem.Enabled = true; findPrevToolStripMenuItem.Enabled = true;
} }
} }
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (CurrentROMIsArchive())
{
return;
}
else
{
FileInfo file = new FileInfo(Global.MainForm.CurrentlyOpenRom);
SaveFileBinary(file);
}
}
private void fileToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Domain.Name == "ROM File")
{
if (!CurrentROMIsArchive())
{
saveToolStripMenuItem.Visible = true;
}
else
{
saveToolStripMenuItem.Visible = false;
}
saveAsBinaryToolStripMenuItem.Text = "Save as ROM...";
}
else
{
saveAsBinaryToolStripMenuItem.Text = "Save as binary...";
}
}
} }
} }