playlist: Create a function for changing the current tag
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
eac9bde353
commit
e21eca37ae
|
@ -4,24 +4,43 @@ from gi.repository import GObject, Gio
|
|||
class TagModel(GObject.GObject, Gio.ListModel):
|
||||
def __init__(self, tag=None):
|
||||
GObject.GObject.__init__(self)
|
||||
self.items = [ ]
|
||||
self.__set_tag__(tag)
|
||||
|
||||
def __set_tag__(self, tag):
|
||||
self.tag = tag
|
||||
if self.tag != None:
|
||||
self.items = self.tag.tracks.copy()
|
||||
self.tag.TrackAdded.register(self.track_added)
|
||||
self.tag.TrackRemoved.register(self.track_removed)
|
||||
return len(self.items)
|
||||
|
||||
def __unset_tag__(self):
|
||||
n = len(self.items)
|
||||
if self.tag:
|
||||
self.tag.TrackAdded.unregister(self.track_added)
|
||||
self.tag.TrackRemoved.unregister(self.track_removed)
|
||||
self.items.clear()
|
||||
return n
|
||||
|
||||
def do_get_item_type(self):
|
||||
return GObject.TYPE_PYOBJECT
|
||||
|
||||
def do_get_n_items(self):
|
||||
if self.tag:
|
||||
return len(self.tag)
|
||||
return 0
|
||||
return len(self.items)
|
||||
|
||||
def do_get_item(self, n):
|
||||
if self.tag:
|
||||
return self.tag[n]
|
||||
|
||||
def do_get_object(self, n):
|
||||
return self.tag[n]
|
||||
if n < len(self.items):
|
||||
return self.items[n]
|
||||
|
||||
def switch_tag(self, tag):
|
||||
prev = len(self.tag) if self.tag else 0
|
||||
self.tag = tag
|
||||
self.items_changed(0, prev, len(self.tag))
|
||||
self.items_changed(0, self.__unset_tag__(),
|
||||
self.__set_tag__(tag))
|
||||
|
||||
def track_added(self, tag, track, pos):
|
||||
self.items.insert(pos, track)
|
||||
self.items_changed(pos, 0, 1)
|
||||
|
||||
def track_removed(self, tag, track, pos):
|
||||
self.items.remove(track)
|
||||
return self.items_changed(pos, 1, 0)
|
||||
|
|
|
@ -20,17 +20,32 @@ class TestTagModel(unittest.TestCase):
|
|||
self.assertIsInstance(m, GObject.Object)
|
||||
self.assertIsInstance(m, Gio.ListModel)
|
||||
|
||||
self.assertEqual(m.tag, t)
|
||||
self.assertEqual(m.items, [ ])
|
||||
|
||||
self.assertEqual(m.get_item_type(), GObject.TYPE_PYOBJECT)
|
||||
self.assertEqual(m.get_n_items(), 0)
|
||||
self.assertIsNone(m.get_item(0))
|
||||
|
||||
t.add_track(fake.Track(1))
|
||||
def test_tag_model_add_remove(self):
|
||||
t = tag.Tag("Test")
|
||||
m = model.TagModel(t)
|
||||
track = fake.Track(1)
|
||||
|
||||
t.add_track(track)
|
||||
self.assertEqual(m.items, [ track ])
|
||||
self.assertEqual(m.get_n_items(), 1)
|
||||
self.assertEqual(m.get_item(0), fake.Track(1))
|
||||
|
||||
t.remove_track(track)
|
||||
self.assertEqual(m.items, [ ])
|
||||
self.assertEqual(m.get_n_items(), 0)
|
||||
self.assertIsNone(m.get_item(0))
|
||||
|
||||
def test_tag_model_init_none(self):
|
||||
m = model.TagModel()
|
||||
|
||||
self.assertEqual(m.items, [ ])
|
||||
self.assertEqual(m.get_n_items(), 0)
|
||||
self.assertIsNone(m.get_item(0))
|
||||
|
||||
|
@ -47,6 +62,9 @@ class TestTagModel(unittest.TestCase):
|
|||
|
||||
m.switch_tag(t)
|
||||
self.assertEqual(self.changed, (0, 0, 2))
|
||||
self.assertIn(m.track_added, t.TrackAdded.subscribers)
|
||||
|
||||
m.switch_tag(u)
|
||||
self.assertEqual(self.changed, (0, 2, 1))
|
||||
self.assertIn(m.track_added, u.TrackAdded.subscribers)
|
||||
self.assertNotIn(m.track_added, t.TrackAdded.subscribers)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
from . import tagrow
|
||||
from gi.repository import Gtk
|
||||
import lib
|
||||
import playlist
|
||||
import trackdb
|
||||
|
||||
class TagBox(Gtk.ScrolledWindow):
|
||||
|
@ -23,6 +24,7 @@ class TagBox(Gtk.ScrolledWindow):
|
|||
if header == True:
|
||||
self.listbox.set_header_func(self.header_func)
|
||||
self.listbox.connect("row-activated", self.row_activated)
|
||||
self.listbox.connect("row-selected", self.row_selected)
|
||||
|
||||
tagstore.Added.register(self.tag_added)
|
||||
tagstore.Removed.register(self.tag_removed)
|
||||
|
@ -48,6 +50,9 @@ class TagBox(Gtk.ScrolledWindow):
|
|||
def row_activated(self, listbox, row):
|
||||
trackdb.Stack.push(row.tag)
|
||||
|
||||
def row_selected(self, listbox, row):
|
||||
playlist.Model.switch_tag(row.tag)
|
||||
|
||||
def sort_func(self, lhs, rhs):
|
||||
if lhs.tag < rhs.tag:
|
||||
return -1
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from gi.repository import Gtk
|
||||
import lib
|
||||
import playlist
|
||||
import unittest
|
||||
|
||||
|
|
Loading…
Reference in New Issue