audio: Create a custom ScalePlus widget
For giving GtkScales increment() and decrement() functionality that triggers the "change-value" signal Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
e884dc5a6e
commit
753f6477a7
|
@ -0,0 +1,34 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from gi.repository import Gtk
|
||||
|
||||
class ScalePlus(Gtk.Scale):
|
||||
def __init__(self, min, max, step, page):
|
||||
Gtk.Scale.__init__(self)
|
||||
self.set_range(min, max)
|
||||
self.set_increments(step, page)
|
||||
self.set_value(min)
|
||||
self.set_draw_value(True)
|
||||
self.set_hexpand(True)
|
||||
self.set_format_value_func(self.format_value)
|
||||
|
||||
def __change_value__(self, n, scroll):
|
||||
value = self.get_value()
|
||||
self.set_value(value + n)
|
||||
new = self.get_value()
|
||||
if value == new:
|
||||
return None
|
||||
self.emit("change-value", scroll, new)
|
||||
return new
|
||||
|
||||
def decrement(self):
|
||||
adjustment = self.get_adjustment()
|
||||
return self.__change_value__(-adjustment.get_step_increment(),
|
||||
Gtk.ScrollType.STEP_BACKWARD)
|
||||
|
||||
def increment(self):
|
||||
adjustment = self.get_adjustment()
|
||||
return self.__change_value__(adjustment.get_step_increment(),
|
||||
Gtk.ScrollType.STEP_FORWARD)
|
||||
|
||||
def format_value(self, scale, value):
|
||||
return str(value)
|
|
@ -0,0 +1,52 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import unittest
|
||||
from gi.repository import Gtk
|
||||
from . import scale
|
||||
|
||||
class TestScalePlus(unittest.TestCase):
|
||||
def on_change_value(self, scale, scroll, value):
|
||||
self.change_value = (scroll, value)
|
||||
|
||||
def test_scale_plus_init(self):
|
||||
splus = scale.ScalePlus(1, 10, 2, 5)
|
||||
adj = splus.get_adjustment()
|
||||
|
||||
self.assertIsInstance(splus, Gtk.Scale)
|
||||
self.assertTrue(splus.get_draw_value())
|
||||
self.assertTrue(splus.get_hexpand())
|
||||
self.assertEqual(splus.get_value_pos(), Gtk.PositionType.TOP)
|
||||
|
||||
self.assertEqual(adj.get_value(), 1)
|
||||
self.assertEqual(adj.get_lower(), 1)
|
||||
self.assertEqual(adj.get_upper(), 10)
|
||||
self.assertEqual(adj.get_step_increment(), 2)
|
||||
self.assertEqual(adj.get_page_increment(), 5)
|
||||
|
||||
def test_scale_plus_decrement(self):
|
||||
splus = scale.ScalePlus(1, 10, 2, 5)
|
||||
splus.set_value(10)
|
||||
splus.connect("change-value", self.on_change_value)
|
||||
|
||||
for i in [ 8, 6, 4, 2, 1 ]:
|
||||
self.assertEqual(splus.decrement(), i)
|
||||
self.assertEqual(splus.format_value(splus, i), str(i))
|
||||
self.assertEqual(self.change_value,
|
||||
(Gtk.ScrollType.STEP_BACKWARD, i))
|
||||
|
||||
self.change_value = None
|
||||
self.assertIsNone(splus.decrement())
|
||||
self.assertIsNone(self.change_value)
|
||||
|
||||
def test_scale_plus_increment(self):
|
||||
splus = scale.ScalePlus(1, 10, 2, 5)
|
||||
splus.connect("change-value", self.on_change_value)
|
||||
|
||||
for i in [ 3, 5, 7, 9, 10 ]:
|
||||
self.assertEqual(splus.increment(), i)
|
||||
self.assertEqual(splus.format_value(splus, i), str(i))
|
||||
self.assertEqual(self.change_value,
|
||||
(Gtk.ScrollType.STEP_FORWARD, i))
|
||||
|
||||
self.change_value = None
|
||||
self.assertIsNone(splus.increment())
|
||||
self.assertIsNone(self.change_value)
|
Loading…
Reference in New Issue