sidebar: Create a TableSelection list model

Configured to allow unselecting items so we have a way of choosing an
item if it is the only one in the list.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-10-11 22:17:00 -04:00
parent b74f948acb
commit 1d5a52623c
2 changed files with 44 additions and 0 deletions

View File

@ -53,6 +53,25 @@ class FilterTableModel(Gtk.FilterListModel):
return self.get_model().get_model()
class TableSelection(Gtk.SingleSelection):
def __init__(self, table):
Gtk.SingleSelection.__init__(self)
self.set_model(FilterTableModel(table))
self.set_can_unselect(True)
self.set_autoselect(False)
def get_selected_playlist(self):
item = self.get_selected_item()
return None if item is None else item.get_item()
def get_playlist(self, n):
row = self.get_item(n)
return row.get_item() if row else None
def get_table(self):
return self.get_model().get_table()
class UserFilter(Gtk.Filter):
def do_match(self, item):
return item.name not in [ "Collection", "New Tracks", "Previous" ]

View File

@ -78,6 +78,31 @@ class TestFilterTableModel(unittest.TestCase):
self.assertFalse(model.TableFilter.do_check(artist))
class TestTableSelectionModel(unittest.TestCase):
def test_init(self):
selection = model.TableSelection(db.artist.Table)
self.assertIsInstance(selection, Gtk.SingleSelection)
self.assertIsInstance(selection.get_model(), model.FilterTableModel)
self.assertEqual(selection.get_table(), db.artist.Table)
self.assertTrue(selection.get_can_unselect())
self.assertFalse(selection.get_autoselect())
def test_selected_playlist(self):
db.reset()
selection = model.TableSelection(db.artist.Table)
self.assertIsNone(selection.get_selected_playlist())
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
selection.set_selected(0)
self.assertEqual(selection.get_selected_playlist(), track.artist)
def test_get_playlist(self):
selection = model.TableSelection(db.artist.Table)
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
self.assertEqual(selection.get_playlist(0), track.artist)
self.assertIsNone(selection.get_playlist(1))
class TestFilterUserModel(unittest.TestCase):
def test_init(self):
filter = model.FilterUserModel()