[gnome-music/wip/mschraal/core: 86/93] Make selections work through CoreSelection



commit cb0db8bd97b9f94d9e9fcadd98dc5c9242d19dd5
Author: Marinus Schraal <mschraal gnome org>
Date:   Fri Jun 21 00:24:24 2019 +0200

    Make selections work through CoreSelection

 gnomemusic/application.py                    |  4 +++-
 gnomemusic/coremodel.py                      | 29 +++-------------------------
 gnomemusic/coreselection.py                  | 27 ++++++++++++++++++++++++++
 gnomemusic/grilowrappers/grltrackersource.py |  2 +-
 gnomemusic/widgets/albumwidget2.py           |  7 +++----
 gnomemusic/widgets/disclistboxwidget.py      | 12 ++++++------
 gnomemusic/window.py                         |  3 +++
 7 files changed, 46 insertions(+), 38 deletions(-)
---
diff --git a/gnomemusic/application.py b/gnomemusic/application.py
index 4f647628..1a20935b 100644
--- a/gnomemusic/application.py
+++ b/gnomemusic/application.py
@@ -37,6 +37,7 @@ from gi.repository import Gtk, Gio, GLib, Gdk, GObject
 
 from gnomemusic import log
 from gnomemusic.coremodel import CoreModel
+from gnomemusic.coreselection import CoreSelection
 from gnomemusic.inhibitsuspend import InhibitSuspend
 from gnomemusic.mpris import MPRIS
 from gnomemusic.pauseonsuspend import PauseOnSuspend
@@ -63,7 +64,8 @@ class Application(Gtk.Application):
         self._init_style()
         self._window = None
 
-        self._coremodel = CoreModel()
+        self._coreselection = CoreSelection()
+        self._coremodel = CoreModel(self._coreselection)
 
         self._settings = Gio.Settings.new('org.gnome.Music')
         self._player = Player(self)
diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py
index fe3d1c91..2fde31cb 100644
--- a/gnomemusic/coremodel.py
+++ b/gnomemusic/coremodel.py
@@ -26,29 +26,6 @@ from gnomemusic.widgets.songwidget import SongWidget
 # occurences of the same song: same grilo id, but unique object.
 
 
-class CoreSelection(GObject.GObject):
-
-    def __init__(self):
-        super().__init__()
-
-        self._selected_items = []
-
-    def blah(self, coresong, value):
-        if coresong.props.selected:
-            self.props.selected_items.append(coresong)
-        else:
-            try:
-                self.props.selected_items.remove(coresong)
-            except ValueError as e:
-                pass
-
-        print(self.props.selected_items)
-
-    @GObject.property
-    def selected_items(self):
-        return self._selected_items
-
-
 class CoreDisc(GObject.GObject):
 
     duration = GObject.Property(type=int, default=None)
@@ -88,12 +65,12 @@ class CoreModel(GObject.GObject):
     }
 
     @log
-    def __init__(self):
+    def __init__(self, coreselection):
         super().__init__()
 
         self._model = Gio.ListStore.new(CoreSong)
 
-        self._core_selection = CoreSelection()
+        self._coreselection = coreselection
 
         self._album_model = Gio.ListStore()
         self._album_model_sort = Gfm.SortListModel.new(self._album_model)
@@ -114,7 +91,7 @@ class CoreModel(GObject.GObject):
         print("PLAYLIST_MODEL", self._playlist_model)
         self._grilo = CoreGrilo(
             self, self._model, self._hash, self._url_hash, self._album_model,
-            self._artist_model, self._core_selection)
+            self._artist_model, self._coreselection)
 
         self._selection_model.connect("items-changed", self._on_sel_changed)
 
diff --git a/gnomemusic/coreselection.py b/gnomemusic/coreselection.py
new file mode 100644
index 00000000..f6f2e9ea
--- /dev/null
+++ b/gnomemusic/coreselection.py
@@ -0,0 +1,27 @@
+import gi
+from gi.repository import GObject
+
+
+class CoreSelection(GObject.GObject):
+
+    selected_items_count = GObject.Property(type=int, default=0)
+
+    def __init__(self):
+        super().__init__()
+
+        self._selected_items = []
+
+    def update_selection(self, coresong, value):
+        if coresong.props.selected:
+            self.props.selected_items.append(coresong)
+        else:
+            try:
+                self.props.selected_items.remove(coresong)
+            except ValueError as e:
+                pass
+
+        self.props.selected_items_count = len(self.props.selected_items)
+
+    @GObject.property
+    def selected_items(self):
+        return self._selected_items
diff --git a/gnomemusic/grilowrappers/grltrackersource.py b/gnomemusic/grilowrappers/grltrackersource.py
index 59434d5d..1bf23170 100644
--- a/gnomemusic/grilowrappers/grltrackersource.py
+++ b/gnomemusic/grilowrappers/grltrackersource.py
@@ -167,7 +167,7 @@ class GrlTrackerSource(GObject.GObject):
         self._model.append(song)
         self._hash[media.get_id()] = song
 
-        song.connect("notify::selected", self._core_selection.blah)
+        song.connect("notify::selected", self._core_selection.update_selection)
         # self._url_table[media.get_url()] = song
 
     def _initial_albums_fill(self, source):
diff --git a/gnomemusic/widgets/albumwidget2.py b/gnomemusic/widgets/albumwidget2.py
index 10e4f4cc..bbb962a9 100644
--- a/gnomemusic/widgets/albumwidget2.py
+++ b/gnomemusic/widgets/albumwidget2.py
@@ -89,6 +89,7 @@ class AlbumWidget2(Gtk.EventBox):
 
         corealbum.connect("notify::duration", self._on_duration_changed)
 
+
     def _create_widget(self, disc):
         disc_box = self._create_disc_box(
             disc.media.get_album_disc_number(), disc.model)
@@ -163,13 +164,11 @@ class AlbumWidget2(Gtk.EventBox):
 
     @log
     def select_all(self):
-        for song in self._model:
-            song.props.selected = True
+        self._listbox.select_all()
 
     @log
     def select_none(self):
-        for song in self._model:
-            song.props.selected = False
+        self._listbox.select_none()
 
     @log
     def get_selected_songs(self):
diff --git a/gnomemusic/widgets/disclistboxwidget.py b/gnomemusic/widgets/disclistboxwidget.py
index 0c4ec8fe..faa9a609 100644
--- a/gnomemusic/widgets/disclistboxwidget.py
+++ b/gnomemusic/widgets/disclistboxwidget.py
@@ -137,18 +137,18 @@ class DiscBox(Gtk.Box):
         """Select all songs"""
         def child_select_all(child):
             song_widget = child.get_child()
-            self._model[song_widget.itr][6] = True
+            song_widget.props.selected = True
 
-        self._disc_songs_flowbox.foreach(child_select_all)
+        self._list_box.foreach(child_select_all)
 
     @log
     def select_none(self):
         """Deselect all songs"""
         def child_select_none(child):
             song_widget = child.get_child()
-            self._model[song_widget.itr][6] = False
+            song_widget.props.selected = False
 
-        self._disc_songs_flowbox.foreach(child_select_none)
+        self._list_box.foreach(child_select_none)
 
     def _create_widget(self, song):
         song_widget = SongWidget(song.props.media)
@@ -253,7 +253,7 @@ class DiscListBox(Gtk.ListBox):
     def select_all(self):
         """Select all songs"""
         def child_select_all(child):
-            child.select_all()
+            child.get_child().select_all()
 
         self.foreach(child_select_all)
 
@@ -261,7 +261,7 @@ class DiscListBox(Gtk.ListBox):
     def select_none(self):
         """Deselect all songs"""
         def child_select_none(child):
-            child.select_none()
+            child.get_child().select_none()
 
         self.foreach(child_select_none)
 
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index 773c6921..52126557 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -82,6 +82,9 @@ class Window(Gtk.ApplicationWindow):
         # Hack
         self._app = app
 
+        self._app._coreselection.bind_property(
+            "selected-items-count", self, "selected-items-count")
+
         self._settings = app.props.settings
         self.add_action(self._settings.create_action('repeat'))
         select_all = Gio.SimpleAction.new('select_all', None)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]