audio: Add widgets for audio Controls

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-09 13:45:31 -04:00
parent 2b358e3733
commit dc4f83f9a3
2 changed files with 89 additions and 0 deletions

39
audio/controls.py Normal file
View File

@ -0,0 +1,39 @@
# Copyright 2021 (c) Anna Schumaker.
from . import menu
from gi.repository import Gtk, Gst
class Controls(Gtk.Box):
def __init__(self):
Gtk.Box.__init__(self)
self.add_css_class("large-icons")
self.add_css_class("linked")
self.previous = Gtk.Button.new_from_icon_name("media-skip-backward")
self.append(self.previous)
self.play = Gtk.Button.new_from_icon_name("media-playback-start")
self.append(self.play)
self.pause = Gtk.Button.new_from_icon_name("media-playback-pause")
self.pause.hide()
self.append(self.pause)
self.next = Gtk.Button.new_from_icon_name("media-skip-forward")
self.append(self.next)
self.menu = menu.Button()
self.append(self.menu)
self.sizegroup = Gtk.SizeGroup()
self.sizegroup.add_widget(self)
def connect(self, name, func):
if name == "volume-changed":
self.menu.volume.connect("value-changed", func)
else:
button = self.__dict__.get(name)
button.connect("clicked", func)
def set_state(self, state):
self.play.set_visible(state != Gst.State.PLAYING)
self.pause.set_visible(state == Gst.State.PLAYING)

50
audio/test_controls.py Normal file
View File

@ -0,0 +1,50 @@
# Copyright 2021 (c) Anna Schumaker.
from . import controls
from lib import settings
from gi.repository import Gtk, Gst, GLib
import unittest
main_context = GLib.main_context_default()
class TestControls(unittest.TestCase):
def test_controls_init(self):
ctrl = controls.Controls()
self.assertIsInstance(ctrl, Gtk.Box)
self.assertIsInstance(ctrl.previous, Gtk.Button)
self.assertIsInstance(ctrl.play, Gtk.Button)
self.assertIsInstance(ctrl.pause, Gtk.Button)
self.assertIsInstance(ctrl.next, Gtk.Button)
self.assertIsInstance(ctrl.menu, Gtk.MenuButton)
self.assertIsInstance(ctrl.sizegroup, Gtk.SizeGroup)
self.assertEqual(ctrl.get_orientation(), Gtk.Orientation.HORIZONTAL)
self.assertEqual(ctrl.previous.get_icon_name(), "media-skip-backward")
self.assertEqual(ctrl.play.get_icon_name(), "media-playback-start")
self.assertEqual(ctrl.pause.get_icon_name(), "media-playback-pause")
self.assertEqual(ctrl.next.get_icon_name(), "media-skip-forward")
self.assertTrue(ctrl.has_css_class("linked"))
self.assertTrue(ctrl.has_css_class("large-icons"))
self.assertTrue(ctrl.menu.has_css_class("normal-icons"))
self.assertFalse(ctrl.pause.is_visible())
self.assertIn(ctrl.previous, ctrl)
self.assertIn(ctrl.play, ctrl)
self.assertIn(ctrl.pause, ctrl)
self.assertIn(ctrl.next, ctrl)
self.assertIn(ctrl.menu, ctrl)
self.assertIn(ctrl, ctrl.sizegroup.get_widgets())
def test_controls_state(self):
ctrl = controls.Controls()
self.assertTrue(ctrl.play.is_visible())
self.assertFalse(ctrl.pause.is_visible())
ctrl.set_state(Gst.State.PLAYING)
self.assertFalse(ctrl.play.is_visible())
self.assertTrue(ctrl.pause.is_visible())
ctrl.set_state(Gst.State.READY)
self.assertTrue(ctrl.play.is_visible())
self.assertFalse(ctrl.pause.is_visible())