audio: Create seeking widgets
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
dc4f83f9a3
commit
8b3dd1e27c
|
@ -0,0 +1,35 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from gi.repository import Gtk
|
||||
|
||||
class Seeker(Gtk.Box):
|
||||
def __init__(self):
|
||||
Gtk.Box.__init__(self)
|
||||
|
||||
self.position = Gtk.Label.new(str="00:00")
|
||||
self.remaining = Gtk.Label.new(str="00:00")
|
||||
|
||||
self.adjustment = Gtk.Adjustment()
|
||||
self.adjustment.set_step_increment(10)
|
||||
|
||||
self.scale = Gtk.Scale()
|
||||
self.scale.set_adjustment(self.adjustment)
|
||||
|
||||
self.append(self.position)
|
||||
self.append(self.scale)
|
||||
self.append(self.remaining)
|
||||
|
||||
def configure(self, position, duration):
|
||||
self.adjustment.set_upper(duration)
|
||||
self.adjustment.set_value(position)
|
||||
|
||||
(m, s) = divmod(int(position), 60)
|
||||
self.position.set_text(f"{m:02}:{s:02}")
|
||||
|
||||
(m, s) = divmod(int(duration - position), 60)
|
||||
self.remaining.set_text(f"{m:02}:{s:02}")
|
||||
|
||||
def connect(self, func):
|
||||
self.scale.connect("change-value", func)
|
||||
|
||||
def get_position(self):
|
||||
return self.scale.get_value()
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import seeker
|
||||
from gi.repository import Gtk
|
||||
import unittest
|
||||
|
||||
class TestSeeker(unittest.TestCase):
|
||||
def test_seeker_init(self):
|
||||
seek = seeker.Seeker()
|
||||
|
||||
self.assertIsInstance(seek, Gtk.Box)
|
||||
self.assertIsInstance(seek.position, Gtk.Label)
|
||||
self.assertIsInstance(seek.remaining, Gtk.Label)
|
||||
self.assertIsInstance(seek.adjustment, Gtk.Adjustment)
|
||||
self.assertIsInstance(seek.scale, Gtk.Scale)
|
||||
|
||||
self.assertEqual(seek.position.get_text(), "00:00")
|
||||
self.assertEqual(seek.remaining.get_text(), "00:00")
|
||||
self.assertEqual(seek.adjustment.get_step_increment(), 10)
|
||||
self.assertEqual(seek.scale.get_adjustment(), seek.adjustment)
|
||||
|
||||
self.assertIn(seek.position, seek)
|
||||
self.assertIn(seek.scale, seek)
|
||||
self.assertIn(seek.remaining, seek)
|
||||
|
||||
def test_seeker_configure(self):
|
||||
seek = seeker.Seeker()
|
||||
|
||||
seek.configure(10, 100)
|
||||
self.assertEqual(seek.adjustment.get_upper(), 100)
|
||||
self.assertEqual(seek.adjustment.get_value(), 10)
|
||||
self.assertEqual(seek.position.get_text(), "00:10")
|
||||
self.assertEqual(seek.remaining.get_text(), "01:30")
|
||||
self.assertEqual(seek.get_position(), 10)
|
||||
|
||||
seek.configure(65.25, 124.2)
|
||||
self.assertEqual(seek.adjustment.get_upper(), 124.2)
|
||||
self.assertEqual(seek.adjustment.get_value(), 65.25)
|
||||
self.assertEqual(seek.position.get_text(), "01:05")
|
||||
self.assertEqual(seek.remaining.get_text(), "00:58")
|
||||
self.assertEqual(seek.get_position(), 65.25)
|
Loading…
Reference in New Issue