tracklist: Add an Unselect All button

This button will unselect any selected tracks when clicked.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2023-01-14 21:30:58 -05:00
parent f1e18549ff
commit 2d19d78eb6
4 changed files with 30 additions and 1 deletions

View File

@ -29,8 +29,11 @@ class Card(Gtk.Box):
self._trackview = trackview.TrackView(sql, margin_start=6,
margin_end=6)
self._visible_cols = buttons.VisibleColumns(self._trackview.columns)
self._unselect = Gtk.Button(icon_name="edit-select-none-symbolic",
has_frame=False, sensitive=False)
self._top_left.append(self._visible_cols)
self._top_left.append(self._unselect)
self._top_box.set_start_widget(self._top_left)
self._top_box.set_center_widget(self._filter)
@ -38,12 +41,18 @@ class Card(Gtk.Box):
self.append(self._top_box)
self.append(self._trackview)
self._trackview.bind_property("have-selected", self._unselect,
"sensitive")
self.bind_property("playlist", self._trackview, "playlist")
self._filter.connect("search-changed", self.__search_changed)
self._unselect.connect("clicked", self.__clear_selection)
self.add_css_class("card")
def __clear_selection(self, unselect: Gtk.Button) -> None:
self._trackview.clear_selected_tracks()
def __search_changed(self, filter: entry.Filter) -> None:
self.sql.tracks.filter(filter.get_query())

View File

@ -28,4 +28,3 @@ class OSD(Gtk.Overlay):
def clear_selection(self, *args) -> None:
"""Clear the current selection."""
self.selection.unselect_all()
self.__selection_changed(self.selection, 0, 0)

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 0 0 v 1.0625 l 1.9375 1.9375 h 1.0625 v -3 z m 4 0 v 2 h 3 v -2 z m 4 0 v 2 h 4 v -2 z m 5 0 v 3 h 3 v -3 z m -13 4 v 4 h 2 v -2.8125 l -1.1875 -1.1875 z m 14 0 v 3 h 2 v -3 z m 0 4 v 4 h 2 v -4 z m -14 1 v 3 h 2 v -3 z m 0 4 v 3 h 3 v -3 z m 13 0 v 1.0625 l 1.9375 1.9375 h 1.0625 v -3 z m -9 1 v 2 h 4 v -2 z m 5 0 v 2 h 3 v -0.8125 l -1.1875 -1.1875 z m 0 0" fill="#2e3436" fill-opacity="0.34902"/><path d="m 1.53125 0.46875 l -1.0625 1.0625 l 14 14 l 1.0625 -1.0625 z m 0 0" fill="#222222"/></svg>

After

Width:  |  Height:  |  Size: 639 B

View File

@ -52,6 +52,25 @@ class TestTracklist(tests.util.TestCase):
self.assertEqual(self.tracklist._top_left.get_first_child(),
self.tracklist._visible_cols)
def test_unselect(self):
"""Test the unselect button."""
self.assertIsInstance(self.tracklist._unselect, Gtk.Button)
self.assertEqual(self.tracklist._unselect.get_icon_name(),
"edit-select-none-symbolic")
self.assertFalse(self.tracklist._unselect.get_has_frame())
self.assertFalse(self.tracklist._unselect.get_sensitive())
self.tracklist._trackview.have_selected = True
self.assertTrue(self.tracklist._unselect.get_sensitive())
with unittest.mock.patch.object(self.tracklist._trackview,
"clear_selected_tracks") as mock_clear:
self.tracklist._unselect.emit("clicked")
mock_clear.assert_called()
self.assertEqual(self.tracklist._visible_cols.get_next_sibling(),
self.tracklist._unselect)
def test_filter(self):
"""Test the Tracklist Filter entry."""
self.assertIsInstance(self.tracklist._filter, emmental.entry.Filter)