playlist: Bind columns to a ListItemFactory
Gtk doesn't seem to provide a way to create a ListItem for testing, so I skip testing this for now. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
9d2efcfedd
commit
eac9bde353
|
@ -9,17 +9,18 @@ Selection = Gtk.SingleSelection()
|
||||||
Selection.set_model(Model)
|
Selection.set_model(Model)
|
||||||
|
|
||||||
View = Gtk.ColumnView()
|
View = Gtk.ColumnView()
|
||||||
|
View.add_css_class("data-table")
|
||||||
View.set_hexpand(True)
|
View.set_hexpand(True)
|
||||||
View.set_model(Selection)
|
View.set_model(Selection)
|
||||||
|
|
||||||
View.append_column(column.Column("#"))
|
View.append_column(column.Column("#", "tracknumber"))
|
||||||
View.append_column(column.Column("Title", width=250, expand=True))
|
View.append_column(column.Column("Title", "title", width=250, expand=True))
|
||||||
View.append_column(column.Column("Length"))
|
View.append_column(column.Column("Length", "length", align=100))
|
||||||
View.append_column(column.Column("Artist", width=150))
|
View.append_column(column.Column("Artist", "artist", width=150))
|
||||||
View.append_column(column.Column("Album", width=150))
|
View.append_column(column.Column("Album", "album", width=150))
|
||||||
View.append_column(column.Column("Year"))
|
View.append_column(column.Column("Year", "year"))
|
||||||
View.append_column(column.Column("Count"))
|
View.append_column(column.Column("Count", "playcount"))
|
||||||
View.append_column(column.Column("Last Played", width=150))
|
View.append_column(column.Column("Last Played", "lastplayed", width=150))
|
||||||
|
|
||||||
Scroll = Gtk.ScrolledWindow()
|
Scroll = Gtk.ScrolledWindow()
|
||||||
Scroll.set_child(View)
|
Scroll.set_child(View)
|
||||||
|
|
|
@ -3,11 +3,20 @@ from lib import settings
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
class Column(Gtk.ColumnViewColumn):
|
class Column(Gtk.ColumnViewColumn):
|
||||||
def __init__(self, title, width=-1, expand=False):
|
def __init__(self, title, field, width=-1, expand=False, align=0):
|
||||||
Gtk.ColumnViewColumn.__init__(self)
|
Gtk.ColumnViewColumn.__init__(self)
|
||||||
|
self.field = field
|
||||||
|
self.align = align
|
||||||
|
|
||||||
|
self.factory = Gtk.SignalListItemFactory()
|
||||||
|
self.factory.connect("bind", self.on_bind)
|
||||||
|
self.factory.connect("setup", self.on_setup)
|
||||||
|
self.factory.connect("teardown", self.on_teardown)
|
||||||
|
self.factory.connect("unbind", self.on_unbind)
|
||||||
|
|
||||||
settings.initialize(f"column.{title}", width)
|
settings.initialize(f"column.{title}", width)
|
||||||
|
|
||||||
|
self.set_factory(self.factory)
|
||||||
self.set_fixed_width(settings.get_int(f"column.{title}"))
|
self.set_fixed_width(settings.get_int(f"column.{title}"))
|
||||||
self.set_expand(expand)
|
self.set_expand(expand)
|
||||||
self.set_resizable(True)
|
self.set_resizable(True)
|
||||||
|
@ -16,3 +25,17 @@ class Column(Gtk.ColumnViewColumn):
|
||||||
|
|
||||||
def on_width_changed(self, col, param):
|
def on_width_changed(self, col, param):
|
||||||
settings.set(f"column.{self.get_title()}", self.get_fixed_width())
|
settings.set(f"column.{self.get_title()}", self.get_fixed_width())
|
||||||
|
|
||||||
|
def on_bind(self, factory, listitem):
|
||||||
|
track = listitem.get_item()
|
||||||
|
listitem.get_child().set_text(track[self.field])
|
||||||
|
listitem.get_child().set_xalign(self.align)
|
||||||
|
|
||||||
|
def on_setup(self, factory, listitem):
|
||||||
|
listitem.set_child(Gtk.Label())
|
||||||
|
|
||||||
|
def on_teardown(self, factory, listitem):
|
||||||
|
listitem.set_child(None)
|
||||||
|
|
||||||
|
def on_unbind(self, factory, listitem):
|
||||||
|
pass
|
||||||
|
|
|
@ -9,18 +9,22 @@ class TestPlaylistColumn(unittest.TestCase):
|
||||||
settings.reset()
|
settings.reset()
|
||||||
|
|
||||||
def test_playlist_column_init(self):
|
def test_playlist_column_init(self):
|
||||||
col = column.Column("Test")
|
col = column.Column("Test", "test")
|
||||||
self.assertIsInstance(col, Gtk.ColumnViewColumn)
|
self.assertIsInstance(col, Gtk.ColumnViewColumn)
|
||||||
|
self.assertIsInstance(col.factory, Gtk.SignalListItemFactory)
|
||||||
|
|
||||||
self.assertEqual(col.get_title(), "Test")
|
self.assertEqual(col.get_title(), "Test")
|
||||||
|
self.assertEqual(col.field, "test")
|
||||||
|
self.assertEqual(col.align, 0)
|
||||||
|
self.assertEqual(col.get_factory(), col.factory)
|
||||||
self.assertTrue(col.get_resizable())
|
self.assertTrue(col.get_resizable())
|
||||||
self.assertFalse(col.get_expand())
|
self.assertFalse(col.get_expand())
|
||||||
|
|
||||||
col = column.Column("Test2", expand=True)
|
col = column.Column("Test2", "test", expand=True)
|
||||||
self.assertTrue(col.get_expand())
|
self.assertTrue(col.get_expand())
|
||||||
|
|
||||||
def test_playlist_column_width(self):
|
def test_playlist_column_width(self):
|
||||||
col = column.Column("Test", width=100)
|
col = column.Column("Test", "test", width=100)
|
||||||
|
|
||||||
self.assertEqual(settings.get_int("column.Test"), 100)
|
self.assertEqual(settings.get_int("column.Test"), 100)
|
||||||
col.set_fixed_width(200)
|
col.set_fixed_width(200)
|
||||||
|
|
|
@ -30,6 +30,7 @@ class TestPlaylist(unittest.TestCase):
|
||||||
self.assertEqual(playlist.Scroll.get_child(), playlist.View)
|
self.assertEqual(playlist.Scroll.get_child(), playlist.View)
|
||||||
|
|
||||||
self.assertTrue(playlist.View.get_hexpand())
|
self.assertTrue(playlist.View.get_hexpand())
|
||||||
|
self.assertTrue(playlist.View.has_css_class("data-table"))
|
||||||
|
|
||||||
for (i, c) in enumerate(playlist.View.get_columns()):
|
for (i, c) in enumerate(playlist.View.get_columns()):
|
||||||
self.assertEqual(c.get_title(), columns[i].title)
|
self.assertEqual(c.get_title(), columns[i].title)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user