Ram Search - ran into an issue where I clicked a radio and it didn't update the search engine state but I couldn't reproduce the issue consistently, so I put it in a more thorough approach of setting the engine state just before doing a search rather than trying to keep it up to date with change events

This commit is contained in:
adelikat 2013-10-25 14:30:08 +00:00
parent f72303f326
commit ba6102b160
2 changed files with 83 additions and 60 deletions

View File

@ -19,19 +19,15 @@ namespace BizHawk.MultiClient
/// </summary>
public partial class RamSearch : Form
{
public const string ADDRESS = "AddressColumn";
public const string VALUE = "ValueColumn";
public const string PREV = "PrevColumn";
public const string CHANGES = "ChangesColumn";
public const string DIFF = "DiffColumn";
//TODO: DoSearch grabs the state of widgets and passes it to the engine before running, so rip out code that is attempting to keep the state up to date through change events
private readonly Dictionary<string, int> DefaultColumnWidths = new Dictionary<string, int>
{
{ ADDRESS, 60 },
{ VALUE, 59 },
{ PREV, 59 },
{ CHANGES, 55 },
{ DIFF, 59 },
{ WatchList.ADDRESS, 60 },
{ WatchList.VALUE, 59 },
{ WatchList.PREV, 59 },
{ WatchList.CHANGES, 55 },
{ WatchList.DIFF, 59 },
};
private string CurrentFileName = String.Empty;
@ -174,19 +170,19 @@ namespace BizHawk.MultiClient
string columnName = WatchListView.Columns[column].Name;
switch (columnName)
{
case ADDRESS:
case WatchList.ADDRESS:
text = Searches[index].AddressString;
break;
case VALUE:
case WatchList.VALUE:
text = Searches[index].ValueString;
break;
case PREV:
case WatchList.PREV:
text = Searches[index].PreviousStr;
break;
case CHANGES:
case WatchList.CHANGES:
text = Searches[index].ChangeCount.ToString();
break;
case DIFF:
case WatchList.DIFF:
text = Searches[index].Diff;
break;
}
@ -413,10 +409,39 @@ namespace BizHawk.MultiClient
}
}
private RamSearchEngine.ComparisonOperator Operator
{
get
{
if (NotEqualToRadio.Checked) return RamSearchEngine.ComparisonOperator.NotEqual;
else if (LessThanRadio.Checked) return RamSearchEngine.ComparisonOperator.LessThan;
else if (GreaterThanRadio.Checked) return RamSearchEngine.ComparisonOperator.GreaterThan;
else if (LessThanOrEqualToRadio.Checked) return RamSearchEngine.ComparisonOperator.LessThanEqual;
else if (GreaterThanOrEqualToRadio.Checked) return RamSearchEngine.ComparisonOperator.GreaterThanEqual;
else if (DifferentByRadio.Checked) return RamSearchEngine.ComparisonOperator.DifferentBy;
else return RamSearchEngine.ComparisonOperator.Equal;
}
}
private RamSearchEngine.Compare Compare
{
get
{
if (SpecificValueRadio.Checked) return RamSearchEngine.Compare.SpecificValue;
else if (SpecificAddressRadio.Checked) return RamSearchEngine.Compare.SpecificAddress;
else if (NumberOfChangesRadio.Checked) return RamSearchEngine.Compare.Changes;
else if (DifferenceRadio.Checked) return RamSearchEngine.Compare.Difference;
else return RamSearchEngine.Compare.Previous;
}
}
public void DoSearch()
{
Searches.CompareValue = CompareToValue;
Searches.DifferentBy = DifferentByValue;
Searches.Operator = Operator;
Searches.CompareTo = Compare;
int removed = Searches.DoSearch();
SetTotal();
WatchListView.ItemCount = Searches.Count;
@ -515,11 +540,11 @@ namespace BizHawk.MultiClient
private void LoadColumnInfo()
{
WatchListView.Columns.Clear();
ToolHelpers.AddColumn(WatchListView, ADDRESS, true, GetColumnWidth(ADDRESS));
ToolHelpers.AddColumn(WatchListView, VALUE, true, GetColumnWidth(VALUE));
ToolHelpers.AddColumn(WatchListView, PREV, Global.Config.RamSearchShowPrevColumn, GetColumnWidth(PREV));
ToolHelpers.AddColumn(WatchListView, CHANGES, Global.Config.RamSearchShowChangeColumn, GetColumnWidth(CHANGES));
ToolHelpers.AddColumn(WatchListView, DIFF, Global.Config.RamSearchShowDiffColumn, GetColumnWidth(DIFF));
ToolHelpers.AddColumn(WatchListView, WatchList.ADDRESS, true, GetColumnWidth(WatchList.ADDRESS));
ToolHelpers.AddColumn(WatchListView, WatchList.VALUE, true, GetColumnWidth(WatchList.VALUE));
ToolHelpers.AddColumn(WatchListView, WatchList.PREV, Global.Config.RamSearchShowPrevColumn, GetColumnWidth(WatchList.PREV));
ToolHelpers.AddColumn(WatchListView, WatchList.CHANGES, Global.Config.RamSearchShowChangeColumn, GetColumnWidth(WatchList.CHANGES));
ToolHelpers.AddColumn(WatchListView, WatchList.DIFF, Global.Config.RamSearchShowDiffColumn, GetColumnWidth(WatchList.DIFF));
ColumnPositions();
}
@ -542,34 +567,34 @@ namespace BizHawk.MultiClient
private void SaveColumnInfo()
{
if (WatchListView.Columns[ADDRESS] != null)
if (WatchListView.Columns[WatchList.ADDRESS] != null)
{
Global.Config.RamSearchColumnIndexes[ADDRESS] = WatchListView.Columns[ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnWidths[ADDRESS] = WatchListView.Columns[ADDRESS].Width;
Global.Config.RamSearchColumnIndexes[WatchList.ADDRESS] = WatchListView.Columns[WatchList.ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnWidths[WatchList.ADDRESS] = WatchListView.Columns[WatchList.ADDRESS].Width;
}
if (WatchListView.Columns[VALUE] != null)
if (WatchListView.Columns[WatchList.VALUE] != null)
{
Global.Config.RamSearchColumnIndexes[VALUE] = WatchListView.Columns[VALUE].DisplayIndex;
Global.Config.RamSearchColumnWidths[VALUE] = WatchListView.Columns[VALUE].Width;
Global.Config.RamSearchColumnIndexes[WatchList.VALUE] = WatchListView.Columns[WatchList.VALUE].DisplayIndex;
Global.Config.RamSearchColumnWidths[WatchList.VALUE] = WatchListView.Columns[WatchList.VALUE].Width;
}
if (WatchListView.Columns[PREV] != null)
if (WatchListView.Columns[WatchList.PREV] != null)
{
Global.Config.RamSearchColumnIndexes[PREV] = WatchListView.Columns[PREV].DisplayIndex;
Global.Config.RamSearchColumnWidths[PREV] = WatchListView.Columns[PREV].Width;
Global.Config.RamSearchColumnIndexes[WatchList.PREV] = WatchListView.Columns[WatchList.PREV].DisplayIndex;
Global.Config.RamSearchColumnWidths[WatchList.PREV] = WatchListView.Columns[WatchList.PREV].Width;
}
if (WatchListView.Columns[CHANGES] != null)
if (WatchListView.Columns[WatchList.CHANGES] != null)
{
Global.Config.RamSearchColumnIndexes[CHANGES] = WatchListView.Columns[CHANGES].DisplayIndex;
Global.Config.RamSearchColumnWidths[CHANGES] = WatchListView.Columns[CHANGES].Width;
Global.Config.RamSearchColumnIndexes[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].DisplayIndex;
Global.Config.RamSearchColumnWidths[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].Width;
}
if (WatchListView.Columns[DIFF] != null)
if (WatchListView.Columns[WatchList.DIFF] != null)
{
Global.Config.RamSearchColumnIndexes[DIFF] = WatchListView.Columns[DIFF].DisplayIndex;
Global.Config.RamSearchColumnWidths[DIFF] = WatchListView.Columns[DIFF].Width;
Global.Config.RamSearchColumnIndexes[WatchList.DIFF] = WatchListView.Columns[WatchList.DIFF].DisplayIndex;
Global.Config.RamSearchColumnWidths[WatchList.DIFF] = WatchListView.Columns[WatchList.DIFF].Width;
}
}
@ -700,7 +725,7 @@ namespace BizHawk.MultiClient
DifferenceRadio.Enabled = true;
DifferentByBox.Enabled = true;
ClearChangeCountsToolBarItem.Enabled = true;
WatchListView.Columns[CHANGES].Width = Global.Config.RamSearchColumnWidths[CHANGES];
WatchListView.Columns[WatchList.CHANGES].Width = Global.Config.RamSearchColumnWidths[WatchList.CHANGES];
SetReboot(true);
}
@ -723,8 +748,8 @@ namespace BizHawk.MultiClient
PreviousValueRadio.Checked = true;
}
Global.Config.RamSearchColumnWidths[CHANGES] = WatchListView.Columns[CHANGES].Width;
WatchListView.Columns[CHANGES].Width = 0;
Global.Config.RamSearchColumnWidths[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].Width;
WatchListView.Columns[WatchList.CHANGES].Width = 0;
SetReboot(true);
}
@ -846,15 +871,15 @@ namespace BizHawk.MultiClient
{
default:
return String.Empty;
case ADDRESS:
case WatchList.ADDRESS:
return Searches[index].AddressString;
case VALUE:
case WatchList.VALUE:
return Searches[index].ValueString;
case PREV:
case WatchList.PREV:
return Searches[index].PreviousStr;
case CHANGES:
case WatchList.CHANGES:
return Searches[index].ChangeCount.ToString();
case DIFF:
case WatchList.DIFF:
return Searches[index].Diff;
}
}
@ -1286,11 +1311,11 @@ namespace BizHawk.MultiClient
Global.Config.RamSearchShowPrevColumn = true;
Global.Config.RamSearchShowDiffColumn = false;
WatchListView.Columns[ADDRESS].Width = DefaultColumnWidths[ADDRESS];
WatchListView.Columns[VALUE].Width = DefaultColumnWidths[VALUE];
//WatchListView.Columns[PREV].Width = DefaultColumnWidths[PREV];
WatchListView.Columns[CHANGES].Width = DefaultColumnWidths[CHANGES];
//WatchListView.Columns[DIFF].Width = DefaultColumnWidths[DIFF];
WatchListView.Columns[WatchList.ADDRESS].Width = DefaultColumnWidths[WatchList.ADDRESS];
WatchListView.Columns[WatchList.VALUE].Width = DefaultColumnWidths[WatchList.VALUE];
//WatchListView.Columns[WatchList.PREV].Width = DefaultColumnWidths[WatchList.PREV];
WatchListView.Columns[WatchList.CHANGES].Width = DefaultColumnWidths[WatchList.CHANGES];
//WatchListView.Columns[WatchList.DIFF].Width = DefaultColumnWidths[WatchList.DIFF];
Global.Config.RamSearchSaveWindowPosition = true;
Global.Config.RamSearchAlwaysOnTop = TopMost = false;
@ -1643,11 +1668,11 @@ namespace BizHawk.MultiClient
private void WatchListView_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
Global.Config.RamSearchColumnIndexes[ADDRESS] = WatchListView.Columns[ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnIndexes[VALUE] = WatchListView.Columns[VALUE].DisplayIndex;
Global.Config.RamSearchColumnIndexes[PREV] = WatchListView.Columns[ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnIndexes[CHANGES] = WatchListView.Columns[CHANGES].DisplayIndex;
Global.Config.RamSearchColumnIndexes[DIFF] = WatchListView.Columns[DIFF].DisplayIndex;
Global.Config.RamSearchColumnIndexes[WatchList.ADDRESS] = WatchListView.Columns[WatchList.ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnIndexes[WatchList.VALUE] = WatchListView.Columns[WatchList.VALUE].DisplayIndex;
Global.Config.RamSearchColumnIndexes[WatchList.PREV] = WatchListView.Columns[WatchList.ADDRESS].DisplayIndex;
Global.Config.RamSearchColumnIndexes[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].DisplayIndex;
Global.Config.RamSearchColumnIndexes[WatchList.DIFF] = WatchListView.Columns[WatchList.DIFF].DisplayIndex;
}
private void WatchListView_Enter(object sender, EventArgs e)

View File

@ -49,8 +49,6 @@ namespace BizHawk.MultiClient
public class RamSearchEngine
{
public enum ComparisonOperator { Equal, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, NotEqual, DifferentBy };
public enum Compare { Previous, SpecificValue, SpecificAddress, Changes, Difference }
@ -408,7 +406,7 @@ namespace BizHawk.MultiClient
{
switch(column)
{
case RamSearch.ADDRESS:
case WatchList.ADDRESS:
if (reverse)
{
_watchList = _watchList.OrderByDescending(x => x.Address).ToList();
@ -418,7 +416,7 @@ namespace BizHawk.MultiClient
_watchList = _watchList.OrderBy(x => x.Address).ToList();
}
break;
case RamSearch.VALUE:
case WatchList.VALUE:
if (reverse)
{
_watchList = _watchList.OrderByDescending(x => GetValue(x.Address)).ToList();
@ -428,7 +426,7 @@ namespace BizHawk.MultiClient
_watchList = _watchList.OrderBy(x => GetValue(x.Address)).ToList();
}
break;
case RamSearch.PREV:
case WatchList.PREV:
if (reverse)
{
_watchList = _watchList.OrderByDescending(x => x.Previous).ToList();
@ -438,7 +436,7 @@ namespace BizHawk.MultiClient
_watchList = _watchList.OrderBy(x => x.Previous).ToList();
}
break;
case RamSearch.CHANGES:
case WatchList.CHANGES:
if (_settings.Mode == Settings.SearchMode.Detailed)
{
if (reverse)
@ -457,7 +455,7 @@ namespace BizHawk.MultiClient
}
}
break;
case RamSearch.DIFF:
case WatchList.DIFF:
if (reverse)
{
_watchList = _watchList.OrderByDescending(x => (GetValue(x.Address) - x.Previous)).ToList();