diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaTextBox.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaTextBox.cs index 1423ad0147..535fa0ca38 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaTextBox.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaTextBox.cs @@ -1,5 +1,8 @@ -using System.Windows.Forms; +using System; +using System.Globalization; +using System.Windows.Forms; +using BizHawk.Common; using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk @@ -28,6 +31,109 @@ namespace BizHawk.Client.EmuHawk base.OnKeyPress(e); } + protected override void OnKeyDown(KeyEventArgs e) + { + + if (e.KeyCode == Keys.Up) + { + switch (_boxType) + { + default: + case BoxType.All: + base.OnKeyDown(e); + break; + case BoxType.Hex: + case BoxType.Signed: + case BoxType.Unsigned: + Increment(); + break; + } + } + else if (e.KeyCode == Keys.Down) + { + switch (_boxType) + { + default: + case BoxType.All: + base.OnKeyDown(e); + break; + case BoxType.Hex: + case BoxType.Signed: + case BoxType.Unsigned: + Decrement(); + break; + } + } + else + { + base.OnKeyDown(e); + } + } + + private void Increment() + { + string text = String.IsNullOrWhiteSpace(Text) ? "0" : Text; + switch (_boxType) + { + case BoxType.Hex: + var hval = uint.Parse(text, NumberStyles.HexNumber); + if (hval < uint.MaxValue) + { + hval++; + Text = hval.ToString("X"); + } + break; + case BoxType.Signed: + var sval = int.Parse(text); + if (sval < int.MaxValue) + { + sval++; + Text = sval.ToString(); + } + break; + case BoxType.Unsigned: + var uval = uint.Parse(text); + if (uval < uint.MaxValue) + { + uval++; + Text = uval.ToString(); + } + break; + } + } + + private void Decrement() + { + string text = String.IsNullOrWhiteSpace(Text) ? "0" : Text; + switch (_boxType) + { + case BoxType.Hex: + var hval = uint.Parse(text, NumberStyles.HexNumber); + if (hval < uint.MaxValue) + { + hval--; + Text = hval.ToString("X"); + } + break; + case BoxType.Signed: + var sval = int.Parse(text); + if (sval < int.MaxValue) + { + sval--; + Text = sval.ToString(); + } + break; + case BoxType.Unsigned: + var uval = uint.Parse(text); + if (uval < uint.MaxValue) + { + uval--; + Text = uval.ToString(); + } + break; + } + } + private void SpecificValueBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\b') return;