Ram Search - some fix ups with increment/decrement logic on text boxes

This commit is contained in:
adelikat 2013-09-28 21:49:05 +00:00
parent 9b37a6c79f
commit f706bd45ae
4 changed files with 306 additions and 21 deletions

View File

@ -64,6 +64,8 @@ namespace BizHawk.MultiClient
TopMost = Global.Config.RamSearchAlwaysOnTop;
SetReboot(false);
}
private void RamSearch_Load(object sender, EventArgs e)
@ -72,6 +74,7 @@ namespace BizHawk.MultiClient
SpecificValueBox.ByteSize = Settings.Size;
SpecificValueBox.Type = Settings.Type;
MessageLabel.Text = String.Empty;
SpecificAddressBox.MaxLength = IntHelpers.GetNumDigits(Global.Emulator.MainMemory.Size);
NewSearch();
}
@ -336,6 +339,7 @@ namespace BizHawk.MultiClient
Settings.Domain = Global.Emulator.MemoryDomains[pos];
SetDomainLabel();
SetReboot(true);
SpecificAddressBox.MaxLength = IntHelpers.GetNumDigits(Settings.Domain.Size);
}
}
@ -431,6 +435,10 @@ namespace BizHawk.MultiClient
private void DoDisplayTypeClick(Watch.DisplayType type)
{
if (Settings.Type != type && !String.IsNullOrEmpty(SpecificValueBox.Text))
{
SpecificValueBox.Text = "0";
}
SpecificValueBox.Type = Settings.Type = type;
Searches.SetType(type);
}
@ -444,6 +452,16 @@ namespace BizHawk.MultiClient
private void SetSize(Watch.WatchSize size)
{
SpecificValueBox.ByteSize = Settings.Size = size;
if (!String.IsNullOrEmpty(SpecificAddressBox.Text))
{
SpecificAddressBox.Text = "0";
}
if (!String.IsNullOrEmpty(SpecificValueBox.Text))
{
SpecificValueBox.Text = "0";
}
SetReboot(true);
}

View File

@ -97,10 +97,14 @@ namespace BizHawk.MultiClient
break;
}
break;
case Watch.DisplayType.Float:
case Watch.DisplayType.FixedPoint_12_4:
MaxLength = 9;
break;
case Watch.DisplayType.Float:
MaxLength = 21;
break;
case Watch.DisplayType.FixedPoint_20_12:
MaxLength = 32;
MaxLength = 64;
break;
}
}
@ -177,37 +181,187 @@ namespace BizHawk.MultiClient
{
if (e.KeyCode == Keys.Up)
{
int val = ToRawInt();
val++;
switch (_type)
{
default:
case Watch.DisplayType.Signed:
int val = ToRawInt();
if (val == MaxSignedInt)
{
val = 0;
}
else
{
val++;
}
Text = val.ToString();
break;
case Watch.DisplayType.Unsigned:
uint uval = (uint)ToRawInt();
if (uval == MaxUnsignedInt)
{
uval = 0;
}
else
{
uval++;
}
Text = uval.ToString();
break;
case Watch.DisplayType.Binary:
throw new NotImplementedException();
uint bval = (uint)ToRawInt();
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();
if (hexVal == MaxUnsignedInt)
{
hexVal = 0;
}
else
{
hexVal++;
}
string formatstr = "{0:X" + MaxLength.ToString() + "}";
Text = String.Format(formatstr, val);
Text = String.Format(formatstr, hexVal);
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)
{
int val = ToRawInt();
val--;
switch (_type)
{
default:
case Watch.DisplayType.Signed:
int val = ToRawInt();
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:
throw new NotImplementedException();
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();
if (hexVal == 0)
{
hexVal = MaxUnsignedInt;
}
else
{
hexVal++;
}
string formatstr = "{0:X" + MaxLength.ToString() + "}";
Text = String.Format(formatstr, val);
Text = String.Format(formatstr, hexVal);
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;
}
}
@ -217,6 +371,60 @@ namespace BizHawk.MultiClient
}
}
uint MaxUnsignedInt
{
get
{
switch (ByteSize)
{
default:
case Watch.WatchSize.Byte:
return byte.MaxValue;
case Watch.WatchSize.Word:
return ushort.MaxValue;
case Watch.WatchSize.DWord:
return uint.MaxValue;
}
}
}
int MaxSignedInt
{
get
{
switch (ByteSize)
{
default:
case Watch.WatchSize.Byte:
return sbyte.MaxValue;
case Watch.WatchSize.Word:
return short.MaxValue;
case Watch.WatchSize.DWord:
return int.MaxValue;
}
}
}
double Max12_4
{
get
{
return MaxUnsignedInt / 16.0;
}
}
double Max20_12
{
get
{
return MaxUnsignedInt / 4096.0;
}
}
double _12_4_Unit { get { return 1 / 16.0; } }
double _20_12_Unit { get { return 1 / 4096.0; } }
protected override void OnTextChanged(EventArgs e)
{
if (String.IsNullOrWhiteSpace(Text))

View File

@ -34,8 +34,16 @@ namespace BizHawk
{
if (InputValidate.IsValidHexNumber(Text))
{
int val = ToRawInt();
val++;
uint val = (uint)ToRawInt();
if (val == IntHelpers.MaxHexValueFromMaxDigits(MaxLength))
{
val = 0;
}
else
{
val++;
}
string formatstr = "{0:X" + MaxLength.ToString() + "}";
Text = String.Format(formatstr, val);
}
@ -44,8 +52,16 @@ namespace BizHawk
{
if (InputValidate.IsValidHexNumber(Text))
{
int val = ToRawInt();
val--;
uint val = (uint)ToRawInt();
if (val == 0)
{
val = IntHelpers.MaxHexValueFromMaxDigits(MaxLength);
}
else
{
val--;
}
string formatstr = "{0:X" + MaxLength.ToString() + "}";
Text = String.Format(formatstr, val);
}
@ -102,8 +118,15 @@ namespace BizHawk
{
if (InputValidate.IsValidUnsignedNumber(Text))
{
int val = ToRawInt();
val++;
uint val = (uint)ToRawInt();
if (val == uint.MaxValue)
{
val = 0;
}
else
{
val++;
}
Text = val.ToString();
}
}
@ -111,8 +134,17 @@ namespace BizHawk
{
if (InputValidate.IsValidUnsignedNumber(Text))
{
int val = ToRawInt();
val--;
uint val = (uint)ToRawInt();
if (val == 0)
{
val = uint.MaxValue;
}
else
{
val--;
}
Text = val.ToString();
}
}
@ -138,7 +170,7 @@ namespace BizHawk
}
else
{
return int.Parse(Text);
return (int)uint.Parse(Text);
}
}
}

View File

@ -42,5 +42,32 @@ namespace BizHawk
if (i < 0x1000000) return 6;
else return 8;
}
public static uint MaxHexValueFromMaxDigits(Int32 i)
{
switch (i)
{
case 0:
return 0;
case 1:
return 0xF;
case 2:
return 0xFF;
case 3:
return 0xFFF;
case 4:
return 0xFFFF;
case 5:
return 0xFFFFF;
case 6:
return 0xFFFFFF;
case 7:
return 0xFFFFFFF;
case 8:
return 0xFFFFFFFF;
}
return int.MaxValue;
}
}
}