diff --git a/Userland/Libraries/LibGUI/ItemListModel.h b/Userland/Libraries/LibGUI/ItemListModel.h index 4d4cca79f4..1f5ecc0c41 100644 --- a/Userland/Libraries/LibGUI/ItemListModel.h +++ b/Userland/Libraries/LibGUI/ItemListModel.h @@ -77,6 +77,37 @@ public: return {}; } + virtual bool is_searchable() const override { return true; } + virtual Vector matches(StringView const& searching, unsigned flags, GUI::ModelIndex const&) override + { + Vector found_indices; + if constexpr (IsTwoDimensional) { + for (auto it = m_data.begin(); it != m_data.end(); ++it) { + for (auto it2d = (*it).begin(); it2d != (*it).end(); ++it2d) { + GUI::ModelIndex index = this->index(it.index(), it2d.index()); + if (!string_matches(data(index, ModelRole::Display).as_string(), searching, flags)) + continue; + + found_indices.append(index); + if (flags & FirstMatchOnly) + return found_indices; + } + } + } else { + for (auto it = m_data.begin(); it != m_data.end(); ++it) { + GUI::ModelIndex index = this->index(it.index()); + if (!string_matches(data(index, ModelRole::Display).as_string(), searching, flags)) + continue; + + found_indices.append(index); + if (flags & FirstMatchOnly) + return found_indices; + } + } + + return found_indices; + } + protected: explicit ItemListModel(const Container& data, Optional row_count = {}) requires(!IsTwoDimensional) : m_data(data)