BizHawk/BizHawk.Client.EmuHawk/tools/Lua/LuaTextBox.cs

168 lines
3.1 KiB
C#
Raw Normal View History

using System;
using System.Globalization;
using System.Windows.Forms;
using BizHawk.Common.StringExtensions;
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
enum BoxType { All, Signed, Unsigned, Hex };
class LuaTextBox : TextBox
{
private BoxType _boxType = BoxType.All;
public void SetType(BoxType type)
{
_boxType = type;
if (type != BoxType.All)
{
CharacterCasing = CharacterCasing.Upper;
}
else
{
CharacterCasing = CharacterCasing.Normal;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
SpecificValueBox_KeyPress(this, e);
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");
}
else
{
Text = "0";
}
break;
case BoxType.Signed:
var sval = int.Parse(text);
if (sval < int.MaxValue)
{
sval++;
Text = sval.ToString();
}
else
{
Text = "0";
}
break;
case BoxType.Unsigned:
var uval = uint.Parse(text);
if (uval < uint.MaxValue)
{
uval++;
Text = uval.ToString();
}
else
{
Text = "0";
}
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 > 0)
{
hval--;
Text = hval.ToString("X");
}
break;
case BoxType.Signed:
var sval = int.Parse(text);
sval--;
Text = sval.ToString();
break;
case BoxType.Unsigned:
var uval = uint.Parse(text);
if (uval > 0)
{
uval--;
Text = uval.ToString();
}
break;
}
}
private void SpecificValueBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\b') return;
switch (_boxType)
{
case BoxType.Unsigned:
if (!e.KeyChar.IsUnsigned())
e.Handled = true;
break;
case BoxType.Signed:
if (!e.KeyChar.IsSigned())
e.Handled = true;
break;
case BoxType.Hex:
if (!e.KeyChar.IsHex())
e.Handled = true;
break;
}
}
}
}