audio: Create seeking widgets

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-09 16:12:36 -04:00
parent dc4f83f9a3
commit 8b3dd1e27c
2 changed files with 75 additions and 0 deletions

35
audio/seeker.py Normal file
View File

@ -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()

40
audio/test_seeker.py Normal file
View File

@ -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)