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 } }