From ba6102b160feb03a64f0f1c20ed3d8a59d2a860e Mon Sep 17 00:00:00 2001 From: adelikat Date: Fri, 25 Oct 2013 14:30:08 +0000 Subject: [PATCH] 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 --- BizHawk.MultiClient/tools/Watch/RamSearch.cs | 131 +++++++++++------- .../tools/Watch/RamSearchEngine.cs | 12 +- 2 files changed, 83 insertions(+), 60 deletions(-) diff --git a/BizHawk.MultiClient/tools/Watch/RamSearch.cs b/BizHawk.MultiClient/tools/Watch/RamSearch.cs index adda680004..e02b91a1c4 100644 --- a/BizHawk.MultiClient/tools/Watch/RamSearch.cs +++ b/BizHawk.MultiClient/tools/Watch/RamSearch.cs @@ -19,19 +19,15 @@ namespace BizHawk.MultiClient /// 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 DefaultColumnWidths = new Dictionary { - { 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) diff --git a/BizHawk.MultiClient/tools/Watch/RamSearchEngine.cs b/BizHawk.MultiClient/tools/Watch/RamSearchEngine.cs index 3133daa029..1b5b9a4898 100644 --- a/BizHawk.MultiClient/tools/Watch/RamSearchEngine.cs +++ b/BizHawk.MultiClient/tools/Watch/RamSearchEngine.cs @@ -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();