playlist: Configure playlist random and loop buttons

Sometimes the user is able to change them, but sometimes not. We also
need to set to the current state when changing the current playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-11 11:43:22 -04:00
parent e61adceafb
commit 0952eeccde
2 changed files with 50 additions and 0 deletions

View File

@ -1,9 +1,11 @@
# Copyright 2021 (c) Anna Schumaker.
from gi.repository import Gtk
import trackdb
class Controls(Gtk.Box):
def __init__(self):
Gtk.Box.__init__(self)
self.tag = None
self.search = Gtk.SearchEntry()
self.search.set_property("placeholder-text", "Type to filter tracks")
@ -12,10 +14,31 @@ class Controls(Gtk.Box):
self.random = Gtk.ToggleButton()
self.random.set_icon_name("media-playlist-shuffle")
self.random.connect("toggled", self.random_toggled)
self.random.set_sensitive(False)
self.append(self.random)
self.loop = Gtk.ToggleButton()
self.loop.set_icon_name("media-playlist-repeat")
self.loop.connect("toggled", self.loop_toggled)
self.loop.set_sensitive(False)
self.append(self.loop)
self.add_css_class("linked")
def set_tag(self, tag):
self.tag = tag
self.random.set_sensitive(tag.can_random())
self.random.set_active(tag.random)
self.loop.set_sensitive(tag.can_loop())
self.loop.set_active(tag.loop)
def random_toggled(self, toggle):
self.tag.random = toggle.get_active()
trackdb.save()
def loop_toggled(self, toggle):
self.tag.loop = toggle.get_active()
trackdb.save()

View File

@ -24,3 +24,30 @@ class TestPlaylistControls(unittest.TestCase):
self.assertIn(ctrl.search, ctrl)
self.assertIn(ctrl.random, ctrl)
self.assertIn(ctrl.loop, ctrl)
def test_playlist_controls_set_tag(self):
ctrl = controls.Controls()
fav = trackdb.tags.User["Favorites"]
prev = trackdb.tags.User["Previous"]
self.assertIsNone(ctrl.tag)
self.assertFalse(ctrl.random.get_sensitive())
self.assertFalse(ctrl.random.get_active())
self.assertFalse(ctrl.loop.get_sensitive())
self.assertFalse(ctrl.loop.get_active())
fav.random = True
fav.loop = True
ctrl.set_tag(fav)
self.assertEqual(ctrl.tag, fav)
self.assertTrue(ctrl.random.get_sensitive())
self.assertTrue(ctrl.random.get_active())
self.assertTrue(ctrl.loop.get_sensitive())
self.assertTrue(ctrl.loop.get_active())
ctrl.set_tag(prev)
self.assertEqual(ctrl.tag, prev)
self.assertFalse(ctrl.random.get_sensitive())
self.assertFalse(ctrl.random.get_active())
self.assertFalse(ctrl.loop.get_sensitive())
self.assertFalse(ctrl.loop.get_active())