audio: Add widgets for audio Controls
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
2b358e3733
commit
dc4f83f9a3
|
@ -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)
|
|
@ -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())
|
Loading…
Reference in New Issue