OpenTTD Source 20241224-master-gf74b0cf984
|
String filter and state. More...
#include <stringfilter_type.h>
Data Structures | |
struct | WordState |
State of a single filter word. More... | |
Public Member Functions | |
StringFilter (const bool *case_sensitive=nullptr, bool locale_aware=true) | |
Constructor for filter. | |
void | SetFilterTerm (const char *str) |
Set the term to filter on. | |
void | SetFilterTerm (const std::string &str) |
Set the term to filter on. | |
bool | IsEmpty () const |
Check whether any filter words were entered. | |
void | ResetState () |
Reset the matching state to process a new item. | |
void | AddLine (const char *str) |
Pass another text line from the current item to the filter. | |
void | AddLine (const std::string &str) |
Pass another text line from the current item to the filter. | |
void | AddLine (StringID str) |
Pass another text line from the current item to the filter. | |
bool | GetState () const |
Get the matching state of the current item. | |
Private Attributes | |
const char * | filter_buffer |
Parsed filter string. Words separated by 0. | |
std::vector< WordState > | word_index |
Word index and filter state. | |
uint | word_matches |
Summary of filter state: Number of words matched. | |
const bool * | case_sensitive |
Match case-sensitively (usually a static variable). | |
bool | locale_aware |
Match words using the current locale. | |
String filter and state.
The filter takes a stringterm and parses it into words separated by whitespace. The whitespace-separation can be avoided by quoting words in the searchterm using " or '. The quotation characters can be nested or concatenated in a unix-shell style.
When filtering an item, all words are checked for matches, and the filter matches if every word matched. So, effectively this is a AND search for all entered words.
Once the filter is set up using SetFilterTerm, multiple items can be filtered consecutively.
Definition at line 30 of file stringfilter_type.h.
|
inline |
Constructor for filter.
case_sensitive | Pointer to a (usually static) variable controlling the case-sensitivity. nullptr means always case-insensitive. |
Definition at line 50 of file stringfilter_type.h.
|
inline |
Definition at line 51 of file stringfilter_type.h.
void StringFilter::AddLine | ( | const char * | str | ) |
Pass another text line from the current item to the filter.
You can call this multiple times for a single item, if the filter shall apply to multiple things. Before processing the next item you have to call ResetState().
str | Another line from the item. |
Definition at line 114 of file stringfilter.cpp.
References case_sensitive, locale_aware, StrNaturalContains(), StrNaturalContainsIgnoreCase(), word_index, and word_matches.
Referenced by AddLine(), AddLine(), IndustryDirectoryWindow::BuildSortIndustriesList(), ClassTagNameFilter(), BuildVehicleWindow::FilterByText(), ScriptDebugWindow::OnInvalidateData(), SignList::SignNameFilter(), NetworkContentListWindow::TagNameFilter(), NewGRFWindow::TagNameFilter(), TypeTagNameFilter(), SettingEntry::UpdateFilterState(), and SettingsPage::UpdateFilterState().
void StringFilter::AddLine | ( | const std::string & | str | ) |
Pass another text line from the current item to the filter.
You can call this multiple times for a single item, if the filter shall apply to multiple things. Before processing the next item you have to call ResetState().
str | Another line from the item. |
Definition at line 144 of file stringfilter.cpp.
References AddLine().
void StringFilter::AddLine | ( | StringID | str | ) |
Pass another text line from the current item to the filter.
You can call this multiple times for a single item, if the filter shall apply to multiple things. Before processing the next item you have to call ResetState().
str | Another line from the item. |
Definition at line 157 of file stringfilter.cpp.
References AddLine(), and GetString().
|
inline |
Get the matching state of the current item.
Definition at line 71 of file stringfilter_type.h.
Referenced by IndustryDirectoryWindow::BuildSortIndustriesList(), ClassTagNameFilter(), BuildVehicleWindow::FilterByText(), ScriptDebugWindow::OnInvalidateData(), SignList::SignNameFilter(), NetworkContentListWindow::TagNameFilter(), NewGRFWindow::TagNameFilter(), TypeTagNameFilter(), SettingEntry::UpdateFilterState(), and SettingsPage::UpdateFilterState().
|
inline |
Check whether any filter words were entered.
Definition at line 60 of file stringfilter_type.h.
Referenced by NetworkGameWindow::BuildGUINetworkGameList(), IndustryDirectoryWindow::BuildSortIndustriesList(), BuildVehicleWindow::FilterByText(), NetworkContentListWindow::FilterContentList(), PickerWindow::OnEditboxChanged(), GameSettingsWindow::OnEditboxChanged(), NewGRFWindow::OnEditboxChanged(), NetworkContentListWindow::OnInvalidateData(), GameSettingsWindow::OnInvalidateData(), SignListWindow::OnInvalidateData(), NetworkContentListWindow::UpdateFilterState(), SettingEntry::UpdateFilterState(), and SettingsPage::UpdateFilterState().
void StringFilter::ResetState | ( | ) |
Reset the matching state to process a new item.
Definition at line 98 of file stringfilter.cpp.
References word_index, and word_matches.
Referenced by IndustryDirectoryWindow::BuildSortIndustriesList(), ClassTagNameFilter(), BuildVehicleWindow::FilterByText(), ScriptDebugWindow::OnInvalidateData(), SignList::SignNameFilter(), NetworkContentListWindow::TagNameFilter(), NewGRFWindow::TagNameFilter(), TypeTagNameFilter(), SettingEntry::UpdateFilterState(), and SettingsPage::UpdateFilterState().
void StringFilter::SetFilterTerm | ( | const char * | str | ) |
Set the term to filter on.
str | Filter term |
Definition at line 28 of file stringfilter.cpp.
References filter_buffer, free(), IsWhitespace(), Utf8Decode(), word_index, and word_matches.
Referenced by NetworkGameWindow::BuildGUINetworkGameList(), BuildVehicleWindow::OnEditboxChanged(), SaveLoadWindow::OnEditboxChanged(), IndustryDirectoryWindow::OnEditboxChanged(), NetworkContentListWindow::OnEditboxChanged(), PickerWindow::OnEditboxChanged(), ScriptDebugWindow::OnEditboxChanged(), GameSettingsWindow::OnEditboxChanged(), TownDirectoryWindow::OnEditboxChanged(), NewGRFWindow::OnEditboxChanged(), ScriptDebugWindow::ScriptDebugWindow(), SignListWindow::SetFilterString(), and SetFilterTerm().
void StringFilter::SetFilterTerm | ( | const std::string & | str | ) |
Set the term to filter on.
str | Filter term |
Definition at line 90 of file stringfilter.cpp.
References SetFilterTerm().
|
private |
Match case-sensitively (usually a static variable).
Definition at line 42 of file stringfilter_type.h.
Referenced by AddLine().
|
private |
Parsed filter string. Words separated by 0.
Definition at line 38 of file stringfilter_type.h.
Referenced by SetFilterTerm().
|
private |
Match words using the current locale.
Definition at line 43 of file stringfilter_type.h.
Referenced by AddLine().
|
private |
Word index and filter state.
Definition at line 39 of file stringfilter_type.h.
Referenced by AddLine(), ResetState(), and SetFilterTerm().
|
private |
Summary of filter state: Number of words matched.
Definition at line 40 of file stringfilter_type.h.
Referenced by AddLine(), ResetState(), and SetFilterTerm().