some code cleanup on WatchValueBox before I do some fixes
This commit is contained in:
parent
3901fb640b
commit
c657678555
|
@ -2,60 +2,34 @@
|
|||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using BizHawk.Common;
|
||||
using BizHawk.Client.Common;
|
||||
using BizHawk.Common;
|
||||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
class WatchValueBox : TextBox, INumberBox
|
||||
public class WatchValueBox : TextBox, INumberBox
|
||||
{
|
||||
private Watch.WatchSize _size = Watch.WatchSize.Byte;
|
||||
private Watch.DisplayType _type = Watch.DisplayType.Hex;
|
||||
private bool _nullable = true;
|
||||
|
||||
public bool Nullable { get { return _nullable; } set { _nullable = value; } }
|
||||
|
||||
public WatchValueBox()
|
||||
{
|
||||
CharacterCasing = CharacterCasing.Upper;
|
||||
}
|
||||
|
||||
public override void ResetText()
|
||||
{
|
||||
if (_nullable)
|
||||
{
|
||||
Text = String.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
case Watch.DisplayType.Unsigned:
|
||||
Text = "0";
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
Text = ((int)0).ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
case Watch.DisplayType.Float:
|
||||
Text = "0.0";
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
Text = "0".PadLeft(((int)_size) * 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool Nullable { get { return _nullable; } set { _nullable = value; } }
|
||||
|
||||
public Watch.WatchSize ByteSize
|
||||
{
|
||||
get { return _size; }
|
||||
get
|
||||
{
|
||||
return _size;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
bool changed = _size != value;
|
||||
var changed = _size != value;
|
||||
|
||||
_size = value;
|
||||
if (changed)
|
||||
|
@ -65,6 +39,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
Type = Watch.AvailableTypes(value)[0];
|
||||
}
|
||||
|
||||
ResetText();
|
||||
}
|
||||
}
|
||||
|
@ -72,360 +47,20 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public Watch.DisplayType Type
|
||||
{
|
||||
get { return _type; }
|
||||
get
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_type = value;
|
||||
int? val = ToRawInt();
|
||||
var val = ToRawInt();
|
||||
SetMaxLength();
|
||||
SetFromRawInt(val);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetMaxLength()
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 16;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 2;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 4;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Signed:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 4;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 6;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 11;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 3;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 5;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 10;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
MaxLength = 9;
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
MaxLength = 21;
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
MaxLength = 64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == '\b' || e.KeyChar == 22 || e.KeyChar == 1 || e.KeyChar == 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.KeyChar == '.')
|
||||
{
|
||||
if (Text.Contains("."))
|
||||
{
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (e.KeyChar == '-')
|
||||
{
|
||||
if (Text.Contains("-"))
|
||||
{
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch(_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Binary:
|
||||
if (!InputValidate.IsBinary(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
if (!InputValidate.IsFixedPoint(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
if (!InputValidate.IsFloat(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
if (!InputValidate.IsHex(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Signed:
|
||||
if (!InputValidate.IsSigned(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
if (!InputValidate.IsUnsigned(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyDown(KeyEventArgs e)
|
||||
{
|
||||
string text = String.IsNullOrWhiteSpace(Text) ? "0" : Text;
|
||||
if (e.KeyCode == Keys.Up)
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
int? val = ToRawInt() ?? 0;
|
||||
if (!val.HasValue)
|
||||
{
|
||||
Text = String.Empty;
|
||||
}
|
||||
else if (val == MaxSignedInt)
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
val++;
|
||||
}
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
uint uval = (uint)(ToRawInt() ?? 0);
|
||||
if (uval == MaxUnsignedInt)
|
||||
{
|
||||
uval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval++;
|
||||
}
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
uint bval = (uint)(ToRawInt() ?? 0);
|
||||
if (bval == MaxUnsignedInt)
|
||||
{
|
||||
bval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval++;
|
||||
}
|
||||
int numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
uint hexVal = (uint)(ToRawInt() ?? 0);
|
||||
if (hexVal == MaxUnsignedInt)
|
||||
{
|
||||
hexVal = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal++;
|
||||
}
|
||||
Text = hexVal.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
double f12val = double.Parse(text);
|
||||
if (f12val > Max12_4 - _12_4_Unit)
|
||||
{
|
||||
f12val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val += _12_4_Unit;
|
||||
}
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
double f24val = double.Parse(text);
|
||||
if (f24val >= Max20_12 - _20_12_Unit)
|
||||
{
|
||||
f24val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val += _20_12_Unit;
|
||||
}
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
double dval = double.Parse(text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval++;
|
||||
}
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (e.KeyCode == Keys.Down)
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
int? val = ToRawInt();
|
||||
if (!val.HasValue)
|
||||
{
|
||||
Text = String.Empty;
|
||||
}
|
||||
else if (val == 0)
|
||||
{
|
||||
val = MaxSignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
val--;
|
||||
}
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
uint uval = (uint)ToRawInt();
|
||||
if (uval == 0)
|
||||
{
|
||||
uval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval--;
|
||||
}
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
uint bval = (uint)ToRawInt();
|
||||
if (bval == 0)
|
||||
{
|
||||
bval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval--;
|
||||
}
|
||||
int numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
uint hexVal = (uint)(ToRawInt() ?? 0);
|
||||
if (hexVal == 0)
|
||||
{
|
||||
hexVal = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal--;
|
||||
}
|
||||
Text = hexVal.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
double f12val = double.Parse(text);
|
||||
if (f12val < 0 + _12_4_Unit)
|
||||
{
|
||||
f12val = Max12_4;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val -= _12_4_Unit;
|
||||
}
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
double f24val = double.Parse(text);
|
||||
if (f24val < 0 + _20_12_Unit)
|
||||
{
|
||||
f24val = Max20_12;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val -= _20_12_Unit;
|
||||
}
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
double dval = double.Parse(text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval--;
|
||||
}
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnKeyDown(e);
|
||||
}
|
||||
}
|
||||
|
||||
private uint MaxUnsignedInt
|
||||
{
|
||||
get
|
||||
|
@ -462,26 +97,421 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private double Max12_4
|
||||
{
|
||||
get
|
||||
{
|
||||
return MaxUnsignedInt / 16.0;
|
||||
}
|
||||
get { return MaxUnsignedInt / 16.0; }
|
||||
}
|
||||
|
||||
private double Max20_12
|
||||
{
|
||||
get
|
||||
get { return MaxUnsignedInt / 4096.0; }
|
||||
}
|
||||
|
||||
private static double _12_4_Unit
|
||||
{
|
||||
get { return 1 / 16.0; }
|
||||
}
|
||||
|
||||
private static double _20_12_Unit
|
||||
{
|
||||
get { return 1 / 4096.0; }
|
||||
}
|
||||
|
||||
public override void ResetText()
|
||||
{
|
||||
if (_nullable)
|
||||
{
|
||||
return MaxUnsignedInt / 4096.0;
|
||||
Text = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
case Watch.DisplayType.Unsigned:
|
||||
Text = "0";
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
Text = 0.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
case Watch.DisplayType.Float:
|
||||
Text = "0.0";
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
Text = "0".PadLeft(((int)_size) * 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private double _12_4_Unit { get { return 1 / 16.0; } }
|
||||
private double _20_12_Unit { get { return 1 / 4096.0; } }
|
||||
private void SetMaxLength()
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 16;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 2;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 4;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Signed:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 4;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 6;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 11;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
switch (_size)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
MaxLength = 3;
|
||||
break;
|
||||
case Watch.WatchSize.Word:
|
||||
MaxLength = 5;
|
||||
break;
|
||||
case Watch.WatchSize.DWord:
|
||||
MaxLength = 10;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
MaxLength = 9;
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
MaxLength = 21;
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
MaxLength = 64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == '\b' || e.KeyChar == 22 || e.KeyChar == 1 || e.KeyChar == 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.KeyChar == '.')
|
||||
{
|
||||
if (Text.Contains("."))
|
||||
{
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (e.KeyChar == '-')
|
||||
{
|
||||
if (Text.Contains("-"))
|
||||
{
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Binary:
|
||||
if (!InputValidate.IsBinary(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
if (!InputValidate.IsFixedPoint(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
if (!InputValidate.IsFloat(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
if (!InputValidate.IsHex(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Signed:
|
||||
if (!InputValidate.IsSigned(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
if (!InputValidate.IsUnsigned(e.KeyChar))
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyDown(KeyEventArgs e)
|
||||
{
|
||||
var text = string.IsNullOrWhiteSpace(Text) ? "0" : Text;
|
||||
if (e.KeyCode == Keys.Up)
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
int? val = ToRawInt() ?? 0;
|
||||
if (val == MaxSignedInt)
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
val++;
|
||||
}
|
||||
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
var uval = (uint)(ToRawInt() ?? 0);
|
||||
if (uval == MaxUnsignedInt)
|
||||
{
|
||||
uval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval++;
|
||||
}
|
||||
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
var bval = (uint)(ToRawInt() ?? 0);
|
||||
if (bval == MaxUnsignedInt)
|
||||
{
|
||||
bval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval++;
|
||||
}
|
||||
|
||||
var numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
var hexVal = (uint)(ToRawInt() ?? 0);
|
||||
if (hexVal == MaxUnsignedInt)
|
||||
{
|
||||
hexVal = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal++;
|
||||
}
|
||||
|
||||
Text = hexVal.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
var f12val = double.Parse(text);
|
||||
if (f12val > Max12_4 - _12_4_Unit)
|
||||
{
|
||||
f12val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val += _12_4_Unit;
|
||||
}
|
||||
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
var f24val = double.Parse(text);
|
||||
if (f24val >= Max20_12 - _20_12_Unit)
|
||||
{
|
||||
f24val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val += _20_12_Unit;
|
||||
}
|
||||
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
var dval = double.Parse(text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval++;
|
||||
}
|
||||
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (e.KeyCode == Keys.Down)
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
var val = ToRawInt();
|
||||
if (!val.HasValue)
|
||||
{
|
||||
Text = string.Empty;
|
||||
}
|
||||
else if (val == 0)
|
||||
{
|
||||
val = MaxSignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
val--;
|
||||
}
|
||||
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
var uval = (uint)(ToRawInt() ?? 0);
|
||||
if (uval == 0)
|
||||
{
|
||||
uval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval--;
|
||||
}
|
||||
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
var bval = (uint)(ToRawInt() ?? 0);
|
||||
if (bval == 0)
|
||||
{
|
||||
bval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval--;
|
||||
}
|
||||
|
||||
var numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
var hexVal = (uint)(ToRawInt() ?? 0);
|
||||
if (hexVal == 0)
|
||||
{
|
||||
hexVal = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal--;
|
||||
}
|
||||
|
||||
Text = hexVal.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
var f12val = double.Parse(text);
|
||||
if (f12val < 0 + _12_4_Unit)
|
||||
{
|
||||
f12val = Max12_4;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val -= _12_4_Unit;
|
||||
}
|
||||
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
var f24val = double.Parse(text);
|
||||
if (f24val < 0 + _20_12_Unit)
|
||||
{
|
||||
f24val = Max20_12;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val -= _20_12_Unit;
|
||||
}
|
||||
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
var dval = double.Parse(text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval--;
|
||||
}
|
||||
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnKeyDown(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnTextChanged(EventArgs e)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(Text))
|
||||
if (string.IsNullOrWhiteSpace(Text))
|
||||
{
|
||||
ResetText();
|
||||
}
|
||||
|
@ -489,39 +519,35 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public int? ToRawInt()
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(Text))
|
||||
if (string.IsNullOrWhiteSpace(Text))
|
||||
{
|
||||
if (Nullable)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
return int.Parse(Text);
|
||||
case Watch.DisplayType.Unsigned:
|
||||
return (int)uint.Parse(Text);
|
||||
case Watch.DisplayType.Binary:
|
||||
return Convert.ToInt32(Text, 2);
|
||||
case Watch.DisplayType.Hex:
|
||||
return int.Parse(Text, NumberStyles.HexNumber);
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
return (int)(double.Parse(Text) * 16.0);
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
return (int)(double.Parse(Text) * 4096.0);
|
||||
case Watch.DisplayType.Float:
|
||||
float val = float.Parse(Text);
|
||||
byte[] bytes = BitConverter.GetBytes(val);
|
||||
return BitConverter.ToInt32(bytes, 0);
|
||||
}
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
return int.Parse(Text);
|
||||
case Watch.DisplayType.Unsigned:
|
||||
return (int)uint.Parse(Text);
|
||||
case Watch.DisplayType.Binary:
|
||||
return Convert.ToInt32(Text, 2);
|
||||
case Watch.DisplayType.Hex:
|
||||
return int.Parse(Text, NumberStyles.HexNumber);
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
return (int)(double.Parse(Text) * 16.0);
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
return (int)(double.Parse(Text) * 4096.0);
|
||||
case Watch.DisplayType.Float:
|
||||
float val = float.Parse(Text);
|
||||
var bytes = BitConverter.GetBytes(val);
|
||||
return BitConverter.ToInt32(bytes, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -536,33 +562,33 @@ namespace BizHawk.Client.EmuHawk
|
|||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
uint uval = (uint)val.Value;
|
||||
var uval = (uint)val.Value;
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
uint bval = (uint)val.Value;
|
||||
int numBits = ((int)ByteSize) * 8;
|
||||
var bval = (uint)val.Value;
|
||||
var numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
Text = val.Value.ToHexString(MaxLength);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
Text = String.Format("{0:F5}", (val.Value / 16.0));
|
||||
Text = string.Format("{0:F5}", val.Value / 16.0);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
Text = String.Format("{0:F5}", (val.Value / 4096.0));
|
||||
Text = string.Format("{0:F5}", val.Value / 4096.0);
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
byte[] bytes = BitConverter.GetBytes(val.Value);
|
||||
var bytes = BitConverter.GetBytes(val.Value);
|
||||
float _float = BitConverter.ToSingle(bytes, 0);
|
||||
Text = String.Format("{0:F6}", _float);
|
||||
Text = string.Format("{0:F6}", _float);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Text = String.Empty;
|
||||
Text = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue