diff --git a/sidebar/test_widgets.py b/sidebar/test_widgets.py index 0f12a18..65917c6 100644 --- a/sidebar/test_widgets.py +++ b/sidebar/test_widgets.py @@ -53,6 +53,9 @@ class TestProgressBar(unittest.TestCase): class TestAddPlaylistEntry(unittest.TestCase): + def activated_playlist(self, entry, playlist): + self.playlist = playlist + def test_init(self): entry = widgets.AddPlaylistEntry() self.assertIsInstance(entry, Gtk.Entry) @@ -71,11 +74,15 @@ class TestAddPlaylistEntry(unittest.TestCase): def test_activate(self): entry = widgets.AddPlaylistEntry() - self.assertIsNone(db.user.Table.lookup("Test Playlist")) + entry.connect("activated-playlist", self.activated_playlist) entry.set_text("Test Playlist") + self.assertIsNone(db.user.Table.lookup("Test Playlist")) + entry.icon_released(entry, Gtk.EntryIconPosition.PRIMARY) self.assertEqual(entry.get_text(), "") - self.assertIsNotNone(db.user.Table.lookup("Test Playlist")) + self.assertEqual(self.playlist, db.user.Table.lookup("Test Playlist")) + self.assertIsNotNone(self.playlist) + entry.icon_released(entry, Gtk.EntryIconPosition.PRIMARY) self.assertIsNone(db.user.Table.lookup("")) @@ -97,8 +104,11 @@ class TestAddPlaylistPopover(unittest.TestCase): popover = widgets.AddPlaylistPopover() child = popover.box.get_first_child() self.assertIsInstance(child, view.UserView) + self.assertEqual(child, popover.get_view()) + child = child.get_next_sibling() self.assertIsInstance(child, widgets.AddPlaylistEntry) + self.assertEqual(child, popover.get_entry()) class TestAddPlaylistButton(unittest.TestCase): diff --git a/sidebar/widgets.py b/sidebar/widgets.py index bae91a6..a58226d 100644 --- a/sidebar/widgets.py +++ b/sidebar/widgets.py @@ -2,6 +2,7 @@ import db import scanner from gi.repository import Gtk +from gi.repository import GObject from . import view class LibraryButtons(Gtk.Box): @@ -44,7 +45,7 @@ class AddPlaylistEntry(Gtk.Entry): def do_activate(self): if self.get_text() != "": - db.user.Table.find(self.get_text()) + self.emit("activated-playlist", db.user.Table.find(self.get_text())) scanner.commit() self.set_text("") @@ -52,6 +53,9 @@ class AddPlaylistEntry(Gtk.Entry): icon = None if self.get_text() == "" else "edit-clear-symbolic" self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, icon) + @GObject.Signal(arg_types=(db.playlist.Playlist,)) + def activated_playlist(self, playlist): pass + class AddPlaylistPopover(Gtk.Popover): def __init__(self): @@ -63,6 +67,9 @@ class AddPlaylistPopover(Gtk.Popover): self.box.set_focus_child(self.box.get_last_child()) self.set_child(self.box) + def get_view(self): return self.box.get_first_child() + def get_entry(self): return self.box.get_last_child() + class AddPlaylistButton(Gtk.MenuButton): def __init__(self): @@ -71,6 +78,18 @@ class AddPlaylistButton(Gtk.MenuButton): self.set_direction(Gtk.ArrowType.UP) self.set_popover(AddPlaylistPopover()) + self.get_popover().get_view().connect("activate", self.view_activate) + self.get_popover().get_entry().connect("activated-playlist", self.entry_activate) + + def entry_activate(self, entry, playlist): + self.emit("add-to-playlist", playlist) + + def view_activate(self, view, position): + self.emit("add-to-playlist", view.get_model().get_item(position)) + + @GObject.Signal(arg_types=(db.playlist.Playlist,)) + def add_to_playlist(self, playlist): pass + class AddUpdateBox(Gtk.Box): def __init__(self):