diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/town.h | 1 | ||||
-rw-r--r-- | src/town_gui.cpp | 42 |
2 files changed, 14 insertions, 29 deletions
diff --git a/src/town.h b/src/town.h index 1f04cf155..7e7bcd29e 100644 --- a/src/town.h +++ b/src/town.h @@ -161,7 +161,6 @@ enum TownRatingCheckType { /** Special values for town list window for the data parameter of #InvalidateWindowData. */ enum TownDirectoryInvalidateWindowData { TDIWD_FORCE_REBUILD, - TDIWD_FILTER_CHANGES, ///< The filename filter has changed (via the editbox) TDIWD_FORCE_RESORT, }; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 632080379..def5f7458 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -687,10 +687,22 @@ private: void BuildSortTownList() { if (this->towns.NeedRebuild()) { + char buf[MAX_LENGTH_TOWN_NAME_CHARS * MAX_CHAR_LENGTH]; + this->towns.clear(); for (const Town *t : Town::Iterate()) { - this->towns.push_back(t); + if (this->string_filter.IsEmpty()) { + this->towns.push_back(t); + continue; + } + this->string_filter.ResetState(); + + SetDParam(0, t->index); + GetString(buf, STR_TOWN_NAME, lastof(buf)); + + this->string_filter.AddLine(buf); + if (this->string_filter.GetState()) this->towns.push_back(t); } this->towns.shrink_to_fit(); @@ -965,7 +977,7 @@ public: { if (wid == WID_TD_FILTER) { this->string_filter.SetFilterTerm(this->townname_editbox.text.buf); - this->InvalidateData(TDIWD_FILTER_CHANGES); + this->InvalidateData(TDIWD_FORCE_REBUILD); } } @@ -976,38 +988,12 @@ public: */ void OnInvalidateData(int data = 0, bool gui_scope = true) override { - char buf[MAX_LENGTH_TOWN_NAME_CHARS * MAX_CHAR_LENGTH]; - switch (data) { case TDIWD_FORCE_REBUILD: /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ this->towns.ForceRebuild(); break; - case TDIWD_FILTER_CHANGES: - if (this->string_filter.IsEmpty()) { - this->towns.ForceRebuild(); - } else { - this->towns.clear(); - - for (const Town *t : Town::Iterate()) { - this->string_filter.ResetState(); - - SetDParam(0, t->index); - GetString(buf, STR_TOWN_NAME, lastof(buf)); - - this->string_filter.AddLine(buf); - if (this->string_filter.GetState()) this->towns.push_back(t); - } - - this->towns.SetListing(this->last_sorting); - this->towns.ForceResort(); - this->towns.Sort(); - this->towns.shrink_to_fit(); - this->towns.RebuildDone(); - this->vscroll->SetCount((int)this->towns.size()); // Update scrollbar as well. - } - break; default: this->towns.ForceResort(); } |