add a filter to the tree of rule filters
I can never remember which category filters are in when making a new rule. This change adds a filter entry above the treeview. As you type, filters that do not contain the search text (case insensitively) are made not visible. Categories are always visible, but will no longer expand if all of their child nodes are hidden.
This commit is contained in:
parent
d7480aa0ff
commit
b96645084a
@ -455,6 +455,7 @@ class EditRule(ManagedWindow):
|
||||
self.get_widget('rule_editor_title'),label)
|
||||
self.window.hide()
|
||||
self.valuebox = self.get_widget('valuebox')
|
||||
self.rname_filter = self.get_widget('ruletreefilter')
|
||||
self.rname = self.get_widget('ruletree')
|
||||
self.rule_name = self.get_widget('rulename')
|
||||
self.description = self.get_widget('description')
|
||||
@ -619,11 +620,13 @@ class EditRule(ManagedWindow):
|
||||
self.page_num = self.page_num + 1
|
||||
self.page_num = 0
|
||||
self.store = Gtk.TreeStore(GObject.TYPE_STRING, GObject.TYPE_PYOBJECT)
|
||||
self.ruletree_filter = self.store.filter_new()
|
||||
self.ruletree_filter.set_visible_func(self.rtree_visible_func)
|
||||
self.selection = self.rname.get_selection()
|
||||
col = Gtk.TreeViewColumn(_('Rule Name'), Gtk.CellRendererText(),
|
||||
text=0)
|
||||
self.rname.append_column(col)
|
||||
self.rname.set_model(self.store)
|
||||
self.rname.set_model(self.ruletree_filter)
|
||||
|
||||
prev = None
|
||||
last_top = None
|
||||
@ -677,6 +680,7 @@ class EditRule(ManagedWindow):
|
||||
self.get_widget('rule_editor_ok').connect('clicked', self.rule_ok)
|
||||
self.get_widget('rule_editor_cancel').connect('clicked', self.close_window)
|
||||
self.get_widget('rule_editor_help').connect('clicked', self.on_help_clicked)
|
||||
self.rname_filter.connect('changed', self.on_rname_filter_changed)
|
||||
|
||||
self._set_size()
|
||||
self.show()
|
||||
@ -735,6 +739,12 @@ class EditRule(ManagedWindow):
|
||||
class_obj = store.get_value(node, 1)
|
||||
self.display_values(class_obj)
|
||||
|
||||
def on_rname_filter_changed(self, obj):
|
||||
"""
|
||||
Update the ruletree based on the filter.
|
||||
"""
|
||||
self.ruletree_filter.refilter()
|
||||
|
||||
def display_values(self, class_obj):
|
||||
if class_obj in self.class2page:
|
||||
page = self.class2page[class_obj]
|
||||
@ -765,6 +775,18 @@ class EditRule(ManagedWindow):
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def rtree_visible_func(self, model, iter, data):
|
||||
"""
|
||||
Callback function to determine if a row of the tree is visible
|
||||
"""
|
||||
filter_text = self.rname_filter.get_text()
|
||||
tree_text = model[iter][0]
|
||||
children = model[iter].iterchildren()
|
||||
result = (not tree_text or
|
||||
children.iter or
|
||||
filter_text.lower() in tree_text.lower())
|
||||
return result
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# EditFilter
|
||||
|
@ -835,13 +835,45 @@
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_width">200</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="ruletree">
|
||||
<property name="width_request">250</property>
|
||||
<object class="GtkViewport" id="viewport1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection4"/>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="ruletreefilter">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_name">edit-find-symbolic</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="ruletree">
|
||||
<property name="width_request">250</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection4"/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
Loading…
Reference in New Issue
Block a user