scanner: Create a custom ProgressBar widget

For use tracking the progress we make through the TaskQueue

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-08-26 12:27:25 -04:00
parent a102087ece
commit 94b53aff5f
3 changed files with 53 additions and 0 deletions

View File

@ -2,3 +2,4 @@
from . import metadata
from . import queue
from . import task
from . import widgets

28
scanner/test_widgets.py Normal file
View File

@ -0,0 +1,28 @@
# Copyright 2021 (c) Anna Schumaker.
import unittest
from gi.repository import Gtk
from . import queue
from . import task
from . import widgets
class FakeTask(task.Task):
def run_task(self): return None
class TestScannerProgressBar(unittest.TestCase):
def test_progress_bar(self):
q = queue.TaskQueue()
pb = widgets.ProgressBar(q)
self.assertIsInstance(pb, Gtk.ProgressBar)
self.assertTrue( pb.get_hexpand())
self.assertFalse(pb.get_visible())
self.assertEqual(pb.get_valign(), Gtk.Align.CENTER)
self.assertEqual(pb.queue, q)
for i in range(3): q.push(FakeTask())
self.assertTrue(pb.get_visible())
for i in [ 1, 2, 0 ]:
q.run()
self.assertEqual(pb.get_fraction(), i/3)
self.assertFalse(pb.get_visible())

24
scanner/widgets.py Normal file
View File

@ -0,0 +1,24 @@
# Copyright 2021 (c) Anna Schumaker.
from gi.repository import Gtk
class ProgressBar(Gtk.ProgressBar):
def __init__(self, queue):
Gtk.ProgressBar.__init__(self)
self.queue = queue
self.queue.connect("task-pushed", self.on_task_pushed)
self.queue.connect("run-task", self.on_run_task)
self.queue.connect("tasks-finished", self.on_tasks_finished)
self.set_valign(Gtk.Align.CENTER)
self.set_hexpand(True)
self.set_visible(False)
def on_task_pushed(self, queue, task):
self.set_visible(True)
def on_run_task(self, queue, task):
self.set_fraction(queue.progress)
def on_tasks_finished(self, queue):
self.set_visible(False)