diff --git a/emmental/sidebar/__init__.py b/emmental/sidebar/__init__.py index e0913d8..c79bc36 100644 --- a/emmental/sidebar/__init__.py +++ b/emmental/sidebar/__init__.py @@ -25,6 +25,8 @@ class Card(Gtk.Box): sensitive=False, **kwargs) self._header = Gtk.CenterBox() self._filter = entry.Filter("playlists", hexpand=True) + self._jump = Gtk.Button(icon_name="go-jump-symbolic", + tooltip_text="scroll to current playlist") self._playlists = playlist.Section(self.sql.playlists) self._artists = artist.Section(self.sql.artists, self.sql.albums) self._genres = genre.Section(self.sql.genres) @@ -33,6 +35,7 @@ class Card(Gtk.Box): self._view = section.View(sql) self._header.set_center_widget(self._filter) + self._header.set_end_widget(self._jump) self.append(self._header) for sect in [self._playlists, self._artists, self._genres, @@ -46,11 +49,15 @@ class Card(Gtk.Box): GObject.BindingFlags.BIDIRECTIONAL) self._filter.connect("search-changed", self.__search_changed) + self._jump.connect("clicked", self.__jump_to_playlist) self.sql.connect("table-loaded", self.__table_loaded) self._header.add_css_class("toolbar") self.add_css_class("card") + def __jump_to_playlist(self, jump: Gtk.Button) -> None: + self.select_playlist(self.sql.active_playlist) + def __search_changed(self, entry: entry.Filter) -> None: self.sql.filter(entry.get_query()) diff --git a/tests/sidebar/test_sidebar.py b/tests/sidebar/test_sidebar.py index 4a05619..207b716 100644 --- a/tests/sidebar/test_sidebar.py +++ b/tests/sidebar/test_sidebar.py @@ -46,6 +46,23 @@ class TestSidebar(tests.util.TestCase): self.sidebar._filter.emit("search-changed") mock_filter.assert_called_with("*test text*") + def test_jump(self): + """Test the jump button.""" + self.assertIsInstance(self.sidebar._jump, Gtk.Button) + self.assertEqual(self.sidebar._header.get_end_widget(), + self.sidebar._jump) + + self.assertEqual(self.sidebar._jump.get_icon_name(), + "go-jump-symbolic") + self.assertEqual(self.sidebar._jump.get_tooltip_text(), + "scroll to current playlist") + + self.sql.playlists.load(now=True) + with unittest.mock.patch.object(self.sidebar, + "select_playlist") as mock_select: + self.sidebar._jump.emit("clicked") + mock_select.assert_called_with(self.sql.active_playlist) + def test_sensitivity_and_startup(self): """Test setting the sidebar sensitivity when all tables have loaded.""" tables = [t for t in self.sql.playlist_tables()]