[gnome-music/wip/mschraal/window-selection-mode: 16/22] Add selected-items-count property
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/window-selection-mode: 16/22] Add selected-items-count property
- Date: Wed, 12 Sep 2018 11:54:58 +0000 (UTC)
commit 61b2cd0ed91dbcea875f86cb5789131f66a44833
Author: Marinus Schraal <mschraal gnome org>
Date: Sun Sep 2 09:06:11 2018 +0200
Add selected-items-count property
Add a selected-items-count property to window and the different views &
widgets. Bind the properties to HeaderBar and SelectionToolbar as well, to
automate selection-mode message passing.
gnomemusic/views/albumsview.py | 4 ++--
gnomemusic/views/artistsview.py | 4 +---
gnomemusic/views/baseview.py | 9 ++++++++-
gnomemusic/views/searchview.py | 3 ++-
gnomemusic/views/songsview.py | 3 ++-
gnomemusic/widgets/albumwidget.py | 7 +++++--
gnomemusic/window.py | 8 ++++++++
7 files changed, 28 insertions(+), 10 deletions(-)
---
diff --git a/gnomemusic/views/albumsview.py b/gnomemusic/views/albumsview.py
index 4cbbb0df..a2decd60 100644
--- a/gnomemusic/views/albumsview.py
+++ b/gnomemusic/views/albumsview.py
@@ -157,7 +157,7 @@ class AlbumsView(BaseView):
and child.props.media in self.albums_selected):
self.albums_selected.remove(child.props.media)
- self._update_header_from_selection(len(self.albums_selected))
+ self.props.selected_items_count = len(self.albums_selected)
@log
def _get_selected_album_songs(self):
@@ -171,7 +171,7 @@ class AlbumsView(BaseView):
if item:
self.items_selected.append(item)
if remaining == 0:
- if self.albums_index < len(self.albums_selected):
+ if self.albums_index < self.props.selected_items_count:
self._get_selected_album_songs()
else:
self.items_selected_callback(self.items_selected)
diff --git a/gnomemusic/views/artistsview.py b/gnomemusic/views/artistsview.py
index baa86dfa..a4205c4e 100644
--- a/gnomemusic/views/artistsview.py
+++ b/gnomemusic/views/artistsview.py
@@ -184,7 +184,7 @@ class ArtistsView(BaseView):
if row.props.selected:
selected_artists += 1
- self._update_header_from_selection(selected_artists)
+ self.props.selected_items_count = selected_artists
@log
def _on_selection_mode_changed(self, widget, data=None):
@@ -208,12 +208,10 @@ class ArtistsView(BaseView):
@log
def select_all(self):
self._toggle_all_selection(True)
- self._update_header_from_selection(len(self._sidebar))
@log
def unselect_all(self):
self._toggle_all_selection(False)
- self._update_header_from_selection(0)
@log
def get_selected_songs(self, callback):
diff --git a/gnomemusic/views/baseview.py b/gnomemusic/views/baseview.py
index de234443..a8e083cd 100644
--- a/gnomemusic/views/baseview.py
+++ b/gnomemusic/views/baseview.py
@@ -34,6 +34,8 @@ class BaseView(Gtk.Stack):
_now_playing_icon_name = 'media-playback-start-symbolic'
_error_icon_name = 'dialog-error-symbolic'
+
+ selected_items_count = GObject.Property(type=int, default=0, minimum=0)
selection_mode = GObject.Property(type=bool, default=False)
def __repr__(self):
@@ -90,6 +92,8 @@ class BaseView(Gtk.Stack):
self._init = False
grilo.connect('ready', self._on_grilo_ready)
+ self.connect(
+ 'notify::selected-items-count', self._update_selected_items_count)
self.connect('notify::selection-mode', self._on_selection_mode_changed)
grilo.connect('changes-pending', self._on_changes_pending)
@@ -129,7 +133,10 @@ class BaseView(Gtk.Stack):
def _update_header_from_selection(self, n_items):
"""Updates header during item selection."""
self._selection_toolbar.props.items_selected = n_items
- self._header_bar.props.items_selected = n_items
+
+ @log
+ def _update_selected_items_count(self, klass, value):
+ self._update_header_from_selection(self.props.selected_items_count)
@log
def _populate(self, data=None):
diff --git a/gnomemusic/views/searchview.py b/gnomemusic/views/searchview.py
index 06b21f2b..cc74567b 100644
--- a/gnomemusic/views/searchview.py
+++ b/gnomemusic/views/searchview.py
@@ -188,7 +188,8 @@ class SearchView(BaseView):
iter_ = self.model.get_iter(path)
self.model[iter_][6] = not self.model[iter_][6]
selected_iters = self._get_selected_iters()
- self._update_header_from_selection(len(selected_iters))
+
+ self.props.selected_items_count = len(selected_iters)
@log
def _get_selected_iters(self):
diff --git a/gnomemusic/views/songsview.py b/gnomemusic/views/songsview.py
index 16520105..22451bf0 100644
--- a/gnomemusic/views/songsview.py
+++ b/gnomemusic/views/songsview.py
@@ -225,7 +225,8 @@ class SongsView(BaseView):
*event.get_coords())
iter_ = self.model.get_iter(path)
self.model[iter_][6] = not self.model[iter_][6]
- self._update_header_from_selection(len(self.get_selected_songs()))
+
+ self.props.selected_items_count = len(self.get_selected_songs())
@log
def _update_model(self, player, position):
diff --git a/gnomemusic/widgets/albumwidget.py b/gnomemusic/widgets/albumwidget.py
index a6d309c5..ebcf2fdf 100644
--- a/gnomemusic/widgets/albumwidget.py
+++ b/gnomemusic/widgets/albumwidget.py
@@ -54,6 +54,7 @@ class AlbumWidget(Gtk.EventBox):
_running_info_label = Gtk.Template.Child()
_title_label = Gtk.Template.Child()
+ selected_items_count = GObject.Property(type=int, default=0, minimum=0)
selection_mode = GObject.Property(type=bool, default=False)
_duration = 0
@@ -92,6 +93,9 @@ class AlbumWidget(Gtk.EventBox):
GObject.BindingFlags.BIDIRECTIONAL |
GObject.BindingFlags.SYNC_CREATE)
+ self.bind_property(
+ 'selected-items-count', self._parent_view, 'selected-items-count')
+
self.show_all()
@log
@@ -179,8 +183,7 @@ class AlbumWidget(Gtk.EventBox):
@log
def _on_selection_changed(self, widget):
n_items = len(self._disc_listbox.get_selected_items())
- self._selection_toolbar.props.items_selected = n_items
- self._header_bar.items_selected = n_items
+ self.props.selected_items_count = n_items
@log
def _create_disc_box(self, disc_nr, disc_songs):
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index 3a6d92f1..0f6fbb4f 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -59,6 +59,7 @@ playlists = Playlists.get_default()
class Window(Gtk.ApplicationWindow):
+ selected_items_count = GObject.Property(type=int, default=0, minimum=0)
selection_mode = GObject.Property(type=bool, default=False)
def __repr__(self):
@@ -164,6 +165,8 @@ class Window(Gtk.ApplicationWindow):
can_focus=False)
self.connect('notify::selection-mode', self._on_selection_mode_changed)
+ self.bind_property(
+ 'selected-items-count', self._headerbar, 'items-selected')
self.bind_property(
'selection-mode', self._headerbar, 'selection-mode',
GObject.BindingFlags.BIDIRECTIONAL |
@@ -263,6 +266,11 @@ class Window(Gtk.ApplicationWindow):
self.views[View.PLAYLIST] = PlaylistView(self, self.player)
self.views[View.SEARCH] = SearchView(self, self.player)
+ selectable_views = [View.ALBUM, View.ARTIST, View.SONG, View.SEARCH]
+ for view in selectable_views:
+ self.views[view].bind_property(
+ 'selected-items-count', self, 'selected-items-count')
+
# empty view has already been created in self._setup_view starting at
# View.ALBUM
# empty view state is changed once album view is visible to prevent it
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]