BizHawk/BizHawk.Client.EmuHawk/tools/HexEditor/NewHexEditor.cs

167 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using BizHawk.Emulation.Common;
namespace BizHawk.Client.EmuHawk
{
public partial class NewHexEditor : Form, IToolFormAutoConfig
{
#region Initialize and Dependencies
[RequiredService]
private IMemoryDomains MemoryDomains { get; set; }
[RequiredService]
private IEmulator Emulator { get; set; }
public NewHexEditor()
{
InitializeComponent();
Closing += (o, e) => SaveConfigSettings();
HexViewControl.QueryIndexValue += HexView_QueryIndexValue;
HexViewControl.QueryCharacterOverride += HexView_QueryCharacterOverride;
}
private void NewHexEditor_Load(object sender, EventArgs e)
{
HexViewControl.ArrayLength = MemoryDomains.MainMemory.Size;
HexViewControl.DataSize = DataSize;
}
[ConfigPersist]
private int DataSize { get; set; } = 1;
[ConfigPersist]
private bool BigEndian { get; set; }
private void SetDataSize(int value)
{
HexViewControl.DataSize = DataSize = value;
HexViewControl.Refresh();
}
private void SaveConfigSettings()
{
}
#endregion
#region IToolForm implementation
public void NewUpdate(ToolFormUpdateType type) { }
public void UpdateValues()
{
HexViewControl.Refresh();
}
public void FastUpdate()
{
// Do nothing
}
public void Restart()
{
// TODO
}
public bool AskSaveChanges()
{
return true; // TODO
}
public bool UpdateBefore => false;
#endregion
#region HexView Callbacks
private void HexView_QueryIndexValue(long index, int dataSize, out long value)
{
switch (dataSize)
{
default:
value = MemoryDomains.MainMemory.PeekByte(index);
break;
case 2:
value = MemoryDomains.MainMemory.PeekUshort(index, BigEndian);
break;
case 4:
value = MemoryDomains.MainMemory.PeekUint(index, BigEndian);
break;
}
}
private void HexView_QueryCharacterOverride(byte value, out char? character)
{
character = null;
// TODO: remove this, just for debugging
if (value == 'H')
{
character = 'h';
}
}
#endregion
#region File
private void FileSubMenu_DropDownOpened(object sender, EventArgs e)
{
}
private void ExitMenuItem_Click(object sender, EventArgs e)
{
Close();
}
#endregion
#region Options
private void OptionsMenuItem_DropDownOpened(object sender, EventArgs e)
{
BigEndianMenuItem.Checked = BigEndian;
}
private void DataSizeMenuItem_DropDownOpened(object sender, EventArgs e)
{
OneByteMenuItem.Checked = DataSize == 1;
TwoByteMenuItem.Checked = DataSize == 2;
FourByteMenuItem.Checked = DataSize == 4;
}
private void OneByteMenuItem_Click(object sender, EventArgs e)
{
SetDataSize(1);
}
private void TwoByteMenuItem_Click(object sender, EventArgs e)
{
SetDataSize(2);
}
private void FourByteMenuItem_Click(object sender, EventArgs e)
{
SetDataSize(4);
}
private void BigEndianMenuItem_Click(object sender, EventArgs e)
{
BigEndian ^= true;
}
#endregion
}
}