Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
text_filter.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2//
3// Text-matching filter
4
5#ifndef _TEXTMATCHINGFILTER_H_
6#define _TEXTMATCHINGFILTER_H_
7
8#include <glibmm/refptr.h>
9#include <glibmm/ustring.h>
10#include <gtkmm/boolfilter.h>
11#include <gtkmm/filter.h>
12
13namespace Inkscape::UI {
14
16public:
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)) {
19
20 auto expression = Gtk::ClosureExpression<bool>::create([this](auto& item){
21 if (_search_text.empty()) return true;
22
23 auto text = _get_text(item).lowercase();
24 return text.find(_search_text) != Glib::ustring::npos;
25 });
26
27 _filter = Gtk::BoolFilter::create(expression);
28 }
29
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);
34 }
35
36 Glib::RefPtr<Gtk::Filter> get_filter() const {
37 return _filter;
38 }
39
40private:
41 std::function<Glib::ustring (const Glib::RefPtr<Glib::ObjectBase>& item)> _get_text;
42 Glib::RefPtr<Gtk::BoolFilter> _filter;
43 Glib::ustring _search_text;
44};
45
46} // namespace
47
48#endif
TextMatchingFilter(std::function< Glib::ustring(const Glib::RefPtr< Glib::ObjectBase > &item)> get_text_to_match)
Definition text_filter.h:17
void refilter(const Glib::ustring &search)
Definition text_filter.h:30
std::function< Glib::ustring(const Glib::RefPtr< Glib::ObjectBase > &item)> _get_text
Definition text_filter.h:41
Glib::RefPtr< Gtk::Filter > get_filter() const
Definition text_filter.h:36
Glib::RefPtr< Gtk::BoolFilter > _filter
Definition text_filter.h:42
SPItem * item
User interface code.
Definition desktop.h:113
STL namespace.