From 8e7db2c4729bc6881310e6932784d2532488fe32 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 3 Nov 2021 13:54:47 -0400 Subject: [PATCH] playlist: Add a Track Number column to the PlaylistView Signed-off-by: Anna Schumaker --- playlist/column.py | 8 ++++++++ playlist/test_column.py | 21 +++++++++++++++++++++ playlist/view.py | 3 +++ 3 files changed, 32 insertions(+) diff --git a/playlist/column.py b/playlist/column.py index c030b09..3ea3587 100644 --- a/playlist/column.py +++ b/playlist/column.py @@ -31,6 +31,11 @@ class LabelFactory(Gtk.SignalListItemFactory): listitem.set_child(None) +class TracknoFactory(LabelFactory): + def __init__(self): LabelFactory.__init__(self, xalign=1) + def get_track_text(self, track): return f"{track.disc.number}-{track.number:02}" + + class Column(Gtk.ColumnViewColumn): def __init__(self, title, factory, width=-1, **kwargs): Gtk.ColumnViewColumn.__init__(self, title=title, **kwargs) @@ -45,6 +50,9 @@ class Column(Gtk.ColumnViewColumn): lib.settings.set(f"column.{self.get_title()}", self.get_fixed_width()) +def TracknoColumn(): return Column("#", TracknoFactory()) + + class OldColumn(Gtk.ColumnViewColumn): def __init__(self, title, field, width=-1, expand=False, align=0): Gtk.ColumnViewColumn.__init__(self) diff --git a/playlist/test_column.py b/playlist/test_column.py index 383db3c..d9b093c 100644 --- a/playlist/test_column.py +++ b/playlist/test_column.py @@ -1,4 +1,5 @@ # Copyright 2021 (c) Anna Schumaker. +import db import lib import unittest from gi.repository import Gtk @@ -42,6 +43,18 @@ class TestLabelFactory(unittest.TestCase): self.assertEqual(fake.child.get_text(), "") +class TestColumnFactories(unittest.TestCase): + def setUp(self): + db.reset() + self.track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") + + def test_trackno(self): + factory = column.TracknoFactory() + self.assertIsInstance(factory, column.LabelFactory) + self.assertEqual(factory.get_track_text(self.track), "1-01") + self.assertEqual(factory.xalign, 1) + + class TestColumn(unittest.TestCase): def test_init(self): factory = column.LabelFactory(0.5) @@ -68,6 +81,14 @@ class TestColumn(unittest.TestCase): self.assertEqual(col2.get_fixed_width(), 200) +class TestColumns(unittest.TestCase): + def test_trackno(self): + col = column.TracknoColumn() + self.assertIsInstance(col, column.Column) + self.assertIsInstance(col.get_factory(), column.TracknoFactory) + self.assertEqual(col.get_title(), "#") + + class TestPlaylistColumn(unittest.TestCase): def tearDown(self): settings.reset() diff --git a/playlist/view.py b/playlist/view.py index f8f6116..f09faf5 100644 --- a/playlist/view.py +++ b/playlist/view.py @@ -1,5 +1,6 @@ # Copyright 2021 (c) Anna Schumaker. from gi.repository import Gtk +from . import column from . import model class PlaylistView(Gtk.ColumnView): @@ -11,6 +12,8 @@ class PlaylistView(Gtk.ColumnView): self.set_hexpand(True) self.set_vexpand(True) + self.append_column(column.TracknoColumn()) + def get_filter_model(self): return self.get_model().get_filter_model() def get_playlist(self): return self.get_model().get_playlist() def set_playlist(self, plist): self.get_model().set_playlist(plist)