[gnome-music/wip/mschraal/core] Make selections work through CoreSelection
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/core] Make selections work through CoreSelection
- Date: Fri, 21 Jun 2019 14:25:01 +0000 (UTC)
commit dbd7996d96e0cc7d9299c23a4b3b85a2ac7b6e8d
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]