sidebar: Create a FilterTableModel list model
With a custom Regex filter that checks if the parent or any children match the given pattern. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
c982fe624b
commit
43ec165a56
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import lib
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gio
|
||||
from gi.repository import Gtk
|
||||
|
@ -23,3 +24,29 @@ def create_child_func(item):
|
|||
def TreeListModel(table):
|
||||
return Gtk.TreeListModel.new(table, passthrough=False, autoexpand=False,
|
||||
create_func=create_child_func)
|
||||
|
||||
|
||||
class Filter(lib.filter.Regex):
|
||||
def do_check(self, item):
|
||||
if self.search(item.name):
|
||||
return True
|
||||
if item.has_children():
|
||||
for n in range(item.get_n_children()):
|
||||
if self.do_check(item.get_child(n)):
|
||||
return True
|
||||
return False
|
||||
|
||||
def do_match(self, treeitem):
|
||||
item = treeitem.get_item()
|
||||
return self.do_check(item) if item else False
|
||||
TableFilter = Filter()
|
||||
|
||||
|
||||
class FilterTableModel(Gtk.FilterListModel):
|
||||
def __init__(self, table):
|
||||
Gtk.FilterListModel.__init__(self)
|
||||
self.set_model(TreeListModel(table))
|
||||
self.set_filter(TableFilter)
|
||||
|
||||
def get_table(self):
|
||||
return self.get_model().get_model()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import datetime
|
||||
import db
|
||||
import lib
|
||||
import unittest
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gio
|
||||
|
@ -51,3 +52,27 @@ class TestTreeListModel(unittest.TestCase):
|
|||
|
||||
genre = db.genre.Table.find("Test Genre")
|
||||
self.assertIsNone(model.create_child_func(genre))
|
||||
|
||||
|
||||
class TestFilterTableModel(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
model.TableFilter.set_pattern("")
|
||||
|
||||
def test_init(self):
|
||||
filter = model.FilterTableModel(db.artist.Table)
|
||||
self.assertIsInstance(filter, Gtk.FilterListModel)
|
||||
self.assertIsInstance(filter.get_model(), Gtk.TreeListModel)
|
||||
self.assertEqual(filter.get_table(), db.artist.Table)
|
||||
self.assertEqual(filter.get_filter(), model.TableFilter)
|
||||
|
||||
def test_filter(self):
|
||||
artist = db.artist.Table.find("Test Artist", "Test Sort")
|
||||
album = artist.find_album("Test Album", datetime.date.today())
|
||||
self.assertIsInstance(model.TableFilter, lib.filter.Regex)
|
||||
|
||||
model.TableFilter.set_pattern("Artist")
|
||||
self.assertTrue(model.TableFilter.do_check(artist))
|
||||
model.TableFilter.set_pattern("Album")
|
||||
self.assertTrue(model.TableFilter.do_check(artist))
|
||||
model.TableFilter.set_pattern("Disc")
|
||||
self.assertFalse(model.TableFilter.do_check(artist))
|
||||
|
|
Loading…
Reference in New Issue