Context for the "About" label
[inkscape.git] / src / ui / text_filter.h
blobd00d7ae7f1eebd8be2621a1e3b6d3d3b31f52338
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 //
3 // Text-matching filter
5 #ifndef _TEXTMATCHINGFILTER_H_
6 #define _TEXTMATCHINGFILTER_H_
8 #include <glibmm/refptr.h>
9 #include <glibmm/ustring.h>
10 #include <gtkmm/boolfilter.h>
11 #include <gtkmm/filter.h>
13 namespace Inkscape::UI {
15 class TextMatchingFilter {
16 public:
17 TextMatchingFilter(std::function<Glib::ustring (const Glib::RefPtr<Glib::ObjectBase>& item)> get_text_to_match):
18 _get_text(std::move(get_text_to_match)) {
20 auto expression = Gtk::ClosureExpression<bool>::create([this](auto& item){
21 if (_search_text.empty()) return true;
23 auto text = _get_text(item).lowercase();
24 return text.find(_search_text) != Glib::ustring::npos;
25 });
27 _filter = Gtk::BoolFilter::create(expression);
30 void refilter(const Glib::ustring& search) {
31 _search_text = search.lowercase();
32 Gtk::Filter* f = _filter.get();
33 gtk_filter_changed(f->gobj(), GtkFilterChange::GTK_FILTER_CHANGE_DIFFERENT);
36 Glib::RefPtr<Gtk::Filter> get_filter() const {
37 return _filter;
40 private:
41 std::function<Glib::ustring (const Glib::RefPtr<Glib::ObjectBase>& item)> _get_text;
42 Glib::RefPtr<Gtk::BoolFilter> _filter;
43 Glib::ustring _search_text;
46 } // namespace
48 #endif