2013-12-15 03:41:13 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
using System.Windows.Forms;
|
2012-07-10 23:09:06 +00:00
|
|
|
|
|
2014-07-03 16:00:57 +00:00
|
|
|
|
using BizHawk.Common.StringExtensions;
|
2013-10-25 00:57:23 +00:00
|
|
|
|
using BizHawk.Client.Common;
|
|
|
|
|
|
2013-11-03 03:54:37 +00:00
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
2012-07-10 23:09:06 +00:00
|
|
|
|
{
|
2013-11-17 15:55:13 +00:00
|
|
|
|
enum BoxType { All, Signed, Unsigned, Hex };
|
2012-07-10 23:09:06 +00:00
|
|
|
|
class LuaTextBox : TextBox
|
|
|
|
|
{
|
2013-11-17 15:55:13 +00:00
|
|
|
|
private BoxType _boxType = BoxType.All;
|
2012-07-10 23:09:06 +00:00
|
|
|
|
|
|
|
|
|
public void SetType(BoxType type)
|
|
|
|
|
{
|
2013-11-17 15:55:13 +00:00
|
|
|
|
_boxType = type;
|
|
|
|
|
if (type != BoxType.All)
|
2012-07-10 23:09:06 +00:00
|
|
|
|
{
|
|
|
|
|
CharacterCasing = CharacterCasing.Upper;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CharacterCasing = CharacterCasing.Normal;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnKeyPress(KeyPressEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SpecificValueBox_KeyPress(this, e);
|
|
|
|
|
base.OnKeyPress(e);
|
|
|
|
|
}
|
|
|
|
|
|
2013-12-15 03:41:13 +00:00
|
|
|
|
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");
|
|
|
|
|
}
|
2013-12-15 04:50:24 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Text = "0";
|
|
|
|
|
}
|
2013-12-15 03:41:13 +00:00
|
|
|
|
break;
|
|
|
|
|
case BoxType.Signed:
|
|
|
|
|
var sval = int.Parse(text);
|
|
|
|
|
if (sval < int.MaxValue)
|
|
|
|
|
{
|
|
|
|
|
sval++;
|
|
|
|
|
Text = sval.ToString();
|
|
|
|
|
}
|
2013-12-15 04:50:24 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Text = "0";
|
|
|
|
|
}
|
2013-12-15 03:41:13 +00:00
|
|
|
|
break;
|
|
|
|
|
case BoxType.Unsigned:
|
|
|
|
|
var uval = uint.Parse(text);
|
|
|
|
|
if (uval < uint.MaxValue)
|
|
|
|
|
{
|
|
|
|
|
uval++;
|
|
|
|
|
Text = uval.ToString();
|
|
|
|
|
}
|
2013-12-15 04:50:24 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Text = "0";
|
|
|
|
|
}
|
2013-12-15 03:41:13 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Decrement()
|
|
|
|
|
{
|
|
|
|
|
string text = String.IsNullOrWhiteSpace(Text) ? "0" : Text;
|
|
|
|
|
switch (_boxType)
|
|
|
|
|
{
|
|
|
|
|
case BoxType.Hex:
|
|
|
|
|
var hval = uint.Parse(text, NumberStyles.HexNumber);
|
2013-12-15 04:50:24 +00:00
|
|
|
|
if (hval > 0)
|
2013-12-15 03:41:13 +00:00
|
|
|
|
{
|
|
|
|
|
hval--;
|
|
|
|
|
Text = hval.ToString("X");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case BoxType.Signed:
|
|
|
|
|
var sval = int.Parse(text);
|
2013-12-15 04:50:24 +00:00
|
|
|
|
sval--;
|
|
|
|
|
Text = sval.ToString();
|
2013-12-15 03:41:13 +00:00
|
|
|
|
break;
|
|
|
|
|
case BoxType.Unsigned:
|
|
|
|
|
var uval = uint.Parse(text);
|
2013-12-15 04:50:24 +00:00
|
|
|
|
if (uval > 0)
|
2013-12-15 03:41:13 +00:00
|
|
|
|
{
|
|
|
|
|
uval--;
|
|
|
|
|
Text = uval.ToString();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-07-10 23:09:06 +00:00
|
|
|
|
private void SpecificValueBox_KeyPress(object sender, KeyPressEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyChar == '\b') return;
|
|
|
|
|
|
2013-11-17 15:55:13 +00:00
|
|
|
|
switch (_boxType)
|
2012-07-10 23:09:06 +00:00
|
|
|
|
{
|
2013-11-17 15:55:13 +00:00
|
|
|
|
case BoxType.Unsigned:
|
2014-07-03 16:00:57 +00:00
|
|
|
|
if (!e.KeyChar.IsUnsigned())
|
2012-07-10 23:09:06 +00:00
|
|
|
|
e.Handled = true;
|
|
|
|
|
break;
|
2013-11-17 15:55:13 +00:00
|
|
|
|
case BoxType.Signed:
|
2014-07-03 16:00:57 +00:00
|
|
|
|
if (!e.KeyChar.IsSigned())
|
2012-07-10 23:09:06 +00:00
|
|
|
|
e.Handled = true;
|
|
|
|
|
break;
|
2013-11-17 15:55:13 +00:00
|
|
|
|
case BoxType.Hex:
|
2014-07-03 16:00:57 +00:00
|
|
|
|
if (!e.KeyChar.IsHex())
|
2012-07-10 23:09:06 +00:00
|
|
|
|
e.Handled = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|