From c375d2366a7af9830915fb7f7de4fad468f0bcbd Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 10 Jun 2023 19:45:19 -0400 Subject: [PATCH] sidebar: Give sidebar widgets tooltip properties Signed-off-by: Anna Schumaker --- emmental/sidebar/artist.py | 2 ++ emmental/sidebar/library.py | 3 ++- emmental/sidebar/playlist.py | 2 ++ emmental/sidebar/row.py | 12 +++++++++++- tests/sidebar/test_artist.py | 4 ++++ tests/sidebar/test_library.py | 2 ++ tests/sidebar/test_playlist.py | 2 ++ tests/sidebar/test_row.py | 13 +++++++++++++ 8 files changed, 38 insertions(+), 2 deletions(-) diff --git a/emmental/sidebar/artist.py b/emmental/sidebar/artist.py index 1fd32ef..f803179 100644 --- a/emmental/sidebar/artist.py +++ b/emmental/sidebar/artist.py @@ -35,6 +35,8 @@ class Section(section.Section): subtitle="0 artists, 0 albums", icon_name="library-artists", album_table=album_table) self.extra_widget = ImageToggle("music-artist", "music-artist2", + "show album artists", + "show all artists", large_icon=False, has_frame=False) self.album_table.connect("items-changed", self.__update_subtitle) self.bind_property("show-all", self.extra_widget, "active", diff --git a/emmental/sidebar/library.py b/emmental/sidebar/library.py index 8c503d0..21845f5 100644 --- a/emmental/sidebar/library.py +++ b/emmental/sidebar/library.py @@ -41,7 +41,8 @@ class Section(section.Section): """Initialize our library path section.""" super().__init__(table, LibraryRow, icon_name="library-music", title="Library Paths", subtitle="0 library paths") - self.extra_widget = Gtk.Button(icon_name="folder-new", has_frame=False) + self.extra_widget = Gtk.Button(icon_name="folder-new", has_frame=False, + tooltip_text="add new library path") self._dialog = Gtk.FileDialog(title="Pick a Directory", filters=DIRECTORY_FILTERS) self._toast = None diff --git a/emmental/sidebar/playlist.py b/emmental/sidebar/playlist.py index 71c3d03..f1040e5 100644 --- a/emmental/sidebar/playlist.py +++ b/emmental/sidebar/playlist.py @@ -50,6 +50,8 @@ class Section(section.Section): self._entry = Gtk.Entry(placeholder_text="add new playlist", primary_icon_name="list-add") self.extra_widget = buttons.PopoverButton(icon_name="document-new", + tooltip_text=("add new " + "playlist"), has_frame=False, popover_child=self._entry) diff --git a/emmental/sidebar/row.py b/emmental/sidebar/row.py index cd50b35..1cb6b41 100644 --- a/emmental/sidebar/row.py +++ b/emmental/sidebar/row.py @@ -63,6 +63,7 @@ class PlaylistRow(BaseRow): self._icon = Settable() self._title = EditableTitle(margin_start=12, margin_end=12) self._delete = Gtk.Button(icon_name="big-x-symbolic", + tooltip_text="delete playlist", valign=Gtk.Align.CENTER, has_frame=False, visible=False) @@ -109,13 +110,17 @@ class LibraryRow(BaseRow): super().__init__(**kwargs) self._box = Gtk.Box() self._overlay = Gtk.Overlay(child=self._box) - self._switch = Gtk.Switch(active=self.enabled, valign=Gtk.Align.CENTER) + self._switch = Gtk.Switch(active=self.enabled, valign=Gtk.Align.CENTER, + tooltip_text="disable library path") self._title = PlaylistTitle(margin_start=12, margin_end=12) self._scan = Gtk.Button(icon_name="update", has_frame=False, + tooltip_text="update library path", valign=Gtk.Align.CENTER) self._stop = Gtk.Button(icon_name="stop-sign-large", has_frame=False, + tooltip_text="cancel update", valign=Gtk.Align.CENTER, visible=False) self._delete = Gtk.Button(icon_name="big-x-symbolic", + tooltip_text="delete library path", valign=Gtk.Align.CENTER, has_frame=False) self._progress = Gtk.ProgressBar(valign=Gtk.Align.END, visible=False) @@ -137,6 +142,7 @@ class LibraryRow(BaseRow): self._delete.connect("clicked", self.__on_button_press, "delete") self._scan.connect("clicked", self.__on_button_press, "scan") self._stop.connect("clicked", self.__on_button_press, "stop") + self._switch.connect("notify::active", self.__on_switch_activated) self._delete.add_css_class("emmental-delete") self._stop.add_css_class("emmental-stop") @@ -157,6 +163,10 @@ class LibraryRow(BaseRow): case "scan": self.playlist.scan() case "stop": self.playlist.stop() + def __on_switch_activated(self, switch: Gtk.Switch, param) -> None: + state = "disable" if self.enabled else "enable" + self._switch.set_tooltip_text(f"{state} library path") + class TreeRow(factory.TreeRow): """A factory Row used for displaying individual playlists.""" diff --git a/tests/sidebar/test_artist.py b/tests/sidebar/test_artist.py index be6161a..9559a4c 100644 --- a/tests/sidebar/test_artist.py +++ b/tests/sidebar/test_artist.py @@ -33,8 +33,12 @@ class TestArtist(tests.util.TestCase): emmental.buttons.ImageToggle) self.assertEqual(self.artists.extra_widget.active_icon_name, "music-artist") + self.assertEqual(self.artists.extra_widget.active_tooltip_text, + "show album artists") self.assertEqual(self.artists.extra_widget.inactive_icon_name, "music-artist2") + self.assertEqual(self.artists.extra_widget.inactive_tooltip_text, + "show all artists") self.assertFalse(self.artists.extra_widget.large_icon) self.assertFalse(self.artists.extra_widget.get_has_frame()) diff --git a/tests/sidebar/test_library.py b/tests/sidebar/test_library.py index d40e923..4342283 100644 --- a/tests/sidebar/test_library.py +++ b/tests/sidebar/test_library.py @@ -33,6 +33,8 @@ class TestLibraries(tests.util.TestCase): self.assertIsInstance(self.libraries.extra_widget, Gtk.Button) self.assertEqual(self.libraries.extra_widget.get_icon_name(), "folder-new") + self.assertEqual(self.libraries.extra_widget.get_tooltip_text(), + "add new library path") self.assertFalse(self.libraries.extra_widget.get_has_frame()) mock_set_initial_file = unittest.mock.Mock() diff --git a/tests/sidebar/test_playlist.py b/tests/sidebar/test_playlist.py index 7427cec..dc660b9 100644 --- a/tests/sidebar/test_playlist.py +++ b/tests/sidebar/test_playlist.py @@ -52,6 +52,8 @@ class TestPlaylists(tests.util.TestCase): emmental.buttons.PopoverButton) self.assertEqual(self.playlists.extra_widget.get_icon_name(), "document-new") + self.assertEqual(self.playlists.extra_widget.get_tooltip_text(), + "add new playlist") self.assertEqual(self.playlists.extra_widget.popover_child, self.playlists._entry) self.assertFalse(self.playlists.extra_widget.get_has_frame()) diff --git a/tests/sidebar/test_row.py b/tests/sidebar/test_row.py index 2e440d8..0e18565 100644 --- a/tests/sidebar/test_row.py +++ b/tests/sidebar/test_row.py @@ -147,6 +147,8 @@ class TestPlaylistRow(unittest.TestCase): self.assertEqual(self.row._title.get_next_sibling(), self.row._delete) self.assertEqual(self.row._delete.get_icon_name(), "big-x-symbolic") + self.assertEqual(self.row._delete.get_tooltip_text(), + "delete playlist") self.assertEqual(self.row._delete.get_valign(), Gtk.Align.CENTER) self.assertFalse(self.row._delete.get_has_frame()) self.assertTrue(self.row._delete.has_css_class("emmental-delete")) @@ -209,14 +211,20 @@ class TestLibraryRow(unittest.TestCase): self.assertTrue(self.row.enabled) self.assertTrue(self.row._switch.get_active()) self.assertTrue(self.row._title.get_sensitive()) + self.assertEqual(self.row._switch.get_tooltip_text(), + "disable library path") self.row.enabled = False self.assertFalse(self.row._switch.get_active()) self.assertFalse(self.row._title.get_sensitive()) + self.assertEqual(self.row._switch.get_tooltip_text(), + "enable library path") self.row._switch.set_active(True) self.assertTrue(self.row.enabled) self.assertTrue(self.row._title.get_sensitive()) + self.assertEqual(self.row._switch.get_tooltip_text(), + "disable library path") def test_progress(self): """Test the progress bar widget and property.""" @@ -247,6 +255,8 @@ class TestLibraryRow(unittest.TestCase): """Test the scan button.""" self.assertIsInstance(self.row._scan, Gtk.Button) self.assertEqual(self.row._scan.get_icon_name(), "update") + self.assertEqual(self.row._scan.get_tooltip_text(), + "update library path") self.assertEqual(self.row._scan.get_valign(), Gtk.Align.CENTER) self.assertFalse(self.row._scan.get_has_frame()) self.assertEqual(self.row._title.get_next_sibling(), self.row._scan) @@ -262,6 +272,7 @@ class TestLibraryRow(unittest.TestCase): """Test the stop button.""" self.assertIsInstance(self.row._stop, Gtk.Button) self.assertEqual(self.row._stop.get_icon_name(), "stop-sign-large") + self.assertEqual(self.row._stop.get_tooltip_text(), "cancel update") self.assertEqual(self.row._stop.get_valign(), Gtk.Align.CENTER) self.assertFalse(self.row._stop.get_has_frame()) self.assertTrue(self.row._stop.has_css_class("emmental-stop")) @@ -278,6 +289,8 @@ class TestLibraryRow(unittest.TestCase): """Test the delete button.""" self.assertIsInstance(self.row._delete, Gtk.Button) self.assertEqual(self.row._delete.get_icon_name(), "big-x-symbolic") + self.assertEqual(self.row._delete.get_tooltip_text(), + "delete library path") self.assertEqual(self.row._delete.get_valign(), Gtk.Align.CENTER) self.assertFalse(self.row._delete.get_has_frame()) self.assertTrue(self.row._delete.has_css_class("emmental-delete"))