playlist: Create a SortRow
To collect all the widgets used for a single row of sorting and emit signals when they are interacted with. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
5d4ad35131
commit
8adfb51082
|
@ -69,3 +69,48 @@ class FieldLabel(Gtk.Label):
|
|||
"Play Count" : "tracks.playcount",
|
||||
"Last Played" : "tracks.lastplayed",
|
||||
"Order Added" : "playlist_map.rowid"}.get(text, text)
|
||||
|
||||
|
||||
class SortRow(Gtk.Box):
|
||||
def __init__(self):
|
||||
Gtk.Box.__init__(self, spacing=5)
|
||||
self.switch = Gtk.Switch(valign=Gtk.Align.CENTER)
|
||||
self.label = FieldLabel()
|
||||
self.direction = DirectionButton()
|
||||
self.updown = UpDownBox()
|
||||
|
||||
self.append(self.switch)
|
||||
self.append(self.label)
|
||||
self.append(self.direction)
|
||||
self.append(self.updown)
|
||||
|
||||
self.switch.connect("notify::active", self.switch_active)
|
||||
self.direction.connect("clicked", self.reverse)
|
||||
self.updown.connect("move-up", self.moved_up)
|
||||
self.updown.connect("move-down", self.moved_down)
|
||||
|
||||
def set_item(self, text, index, n_active):
|
||||
(field, direction) = text.split()
|
||||
self.switch.set_active(index < n_active)
|
||||
self.switch.set_sensitive("rowid" not in field)
|
||||
self.label.set_field(field, index < n_active)
|
||||
self.direction.set_direction(direction, index < n_active)
|
||||
self.updown.set_active(index < n_active, index == 0,
|
||||
index == n_active - 1)
|
||||
|
||||
def switch_active(self, switch, param): self.emit("switched", switch.get_active())
|
||||
def reverse(self, button): self.emit("reversed")
|
||||
def moved_up(self, button): self.emit("move-up")
|
||||
def moved_down(self, button): self.emit("move-down")
|
||||
|
||||
@GObject.Signal(arg_types=(bool,))
|
||||
def switched(self, switch): pass
|
||||
|
||||
@GObject.Signal
|
||||
def reversed(self): pass
|
||||
|
||||
@GObject.Signal
|
||||
def move_up(self): pass
|
||||
|
||||
@GObject.Signal
|
||||
def move_down(self): pass
|
||||
|
|
|
@ -127,3 +127,70 @@ class TestFieldLabel(unittest.TestCase):
|
|||
self.assertEqual(label.get_text(), "Order Added")
|
||||
self.assertEqual(label.get_field(), "playlist_map.rowid")
|
||||
self.assertFalse(label.get_sensitive())
|
||||
|
||||
|
||||
class TestSortRow(unittest.TestCase):
|
||||
def on_switched(self, row, enabled):
|
||||
self.enabled = enabled
|
||||
|
||||
def on_reversed(self, row):
|
||||
self.reversed = True
|
||||
|
||||
def on_move_up(self, row):
|
||||
self.move_up = True
|
||||
|
||||
def on_move_down(self, row):
|
||||
self.move_down = True
|
||||
|
||||
def test_init(self):
|
||||
row = sort.SortRow()
|
||||
self.assertIsInstance(row, Gtk.Box)
|
||||
self.assertIsInstance(row.switch, Gtk.Switch)
|
||||
self.assertIsInstance(row.label, sort.FieldLabel)
|
||||
self.assertIsInstance(row.direction, sort.DirectionButton)
|
||||
self.assertIsInstance(row.updown, sort.UpDownBox)
|
||||
|
||||
self.assertEqual(row.get_spacing(), 5)
|
||||
self.assertEqual(row.switch.get_valign(), Gtk.Align.CENTER)
|
||||
|
||||
self.assertEqual(row.get_first_child(), row.switch)
|
||||
self.assertEqual(row.switch.get_next_sibling(), row.label)
|
||||
self.assertEqual(row.label.get_next_sibling(), row.direction)
|
||||
self.assertEqual(row.direction.get_next_sibling(), row.updown)
|
||||
|
||||
def test_set_item(self):
|
||||
row = sort.SortRow()
|
||||
row.set_item("tracks.number ASC", 0, 3)
|
||||
self.assertTrue(row.switch.get_active())
|
||||
self.assertTrue(row.switch.get_sensitive())
|
||||
self.assertEqual(row.label.get_field(), "tracks.number")
|
||||
self.assertTrue(row.label.get_sensitive())
|
||||
self.assertEqual(row.direction.get_icon_name(), "view-sort-ascending")
|
||||
self.assertTrue(row.direction.get_sensitive())
|
||||
self.assertFalse(row.updown.get_first_child().get_sensitive())
|
||||
self.assertTrue(row.updown.get_last_child().get_sensitive())
|
||||
|
||||
row.set_item("playlist_map.rowid ASC", 1, 2)
|
||||
self.assertTrue(row.switch.get_active())
|
||||
self.assertFalse(row.switch.get_sensitive())
|
||||
|
||||
def test_signals(self):
|
||||
row = sort.SortRow()
|
||||
row.connect("switched", self.on_switched)
|
||||
row.connect("reversed", self.on_reversed)
|
||||
row.connect("move-up", self.on_move_up)
|
||||
row.connect("move-down", self.on_move_down)
|
||||
|
||||
row.switch.set_active(True)
|
||||
self.assertTrue(self.enabled)
|
||||
row.switch.set_active(False)
|
||||
self.assertFalse(self.enabled)
|
||||
|
||||
row.direction.emit("clicked")
|
||||
self.assertTrue(self.reversed)
|
||||
|
||||
row.updown.emit("move-up")
|
||||
self.assertTrue(self.move_up)
|
||||
|
||||
row.updown.emit("move-down")
|
||||
self.assertTrue(self.move_down)
|
||||
|
|
Loading…
Reference in New Issue