[gnome-music] widgets: Add selection mode to ArtistAlbums



commit 658ef438b9dfb4b8e9375ddde17e4ed3a8a584bc
Author: Arnel Borja <arnelborja src gnome org>
Date:   Thu May 8 23:10:18 2014 +0800

    widgets: Add selection mode to ArtistAlbums
    
    This is for selection mode in Search view when selecting an artist.

 data/TrackWidget.ui   |   12 ++++++++++++
 gnomemusic/view.py    |   14 +++++++++++---
 gnomemusic/widgets.py |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 69 insertions(+), 6 deletions(-)
---
diff --git a/data/TrackWidget.ui b/data/TrackWidget.ui
index 9f0741e..4acd29f 100644
--- a/data/TrackWidget.ui
+++ b/data/TrackWidget.ui
@@ -36,6 +36,18 @@
               <placeholder/>
             </child>
             <child>
+              <object class="GtkCheckButton" id="select">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkLabel" id="num">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index 20d6dc4..724d9c7 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -680,9 +680,14 @@ class Artists (ViewContainer):
         artistAlbums = None
         if (self._model.get_string_from_iter(_iter) ==
                 self._model.get_string_from_iter(self._allIter)):
-            artistAlbums = Widgets.AllArtistsAlbums(self.player)
+            artistAlbums = Widgets.AllArtistsAlbums(
+                self.player, self.header_bar, self.selection_toolbar
+            )
         else:
-            artistAlbums = Widgets.ArtistAlbums(artist, albums, self.player)
+            artistAlbums = Widgets.ArtistAlbums(
+                artist, albums, self.player,
+                self.header_bar, self.selection_toolbar
+            )
         self._artists[artist.casefold()]['widget'] = artistAlbums
         new_artistAlbumsWidget.add(artistAlbums)
         new_artistAlbumsWidget.show()
@@ -1210,7 +1215,10 @@ class Search(ViewContainer):
             artist = self._model.get_value(_iter, 2)
             albums = self._artists[artist.casefold()]['albums']
 
-            self._artistAlbumsWidget = Widgets.ArtistAlbums(artist, albums, self.player)
+            self._artistAlbumsWidget = Widgets.ArtistAlbums(
+                artist, albums, self.player,
+                self.header_bar, self.selection_toolbar
+            )
             self.add(self._artistAlbumsWidget)
 
             self.header_bar.set_state(ToolbarState.SEARCH_VIEW)
diff --git a/gnomemusic/widgets.py b/gnomemusic/widgets.py
index 31d1c59..527c7ca 100644
--- a/gnomemusic/widgets.py
+++ b/gnomemusic/widgets.py
@@ -320,11 +320,14 @@ class AlbumWidget(Gtk.EventBox):
 class ArtistAlbums(Gtk.VBox):
 
     @log
-    def __init__(self, artist, albums, player):
+    def __init__(self, artist, albums, player, header_bar, selection_toolbar):
         Gtk.VBox.__init__(self)
         self.player = player
         self.artist = artist
         self.albums = albums
+        self.selectionMode = False
+        self.selection_toolbar = selection_toolbar
+        self.header_bar = header_bar
         self.ui = Gtk.Builder()
         self.ui.add_from_resource('/org/gnome/Music/ArtistAlbumsWidget.ui')
         self.set_border_width(0)
@@ -415,12 +418,19 @@ class ArtistAlbums(Gtk.VBox):
             itr = self.model.iter_next(itr)
         return False
 
+    @log
+    def set_selection_mode(self, selectionMode):
+        self.selectionMode = selectionMode
+        for widget in self.widgets:
+            widget.set_selection_mode(selectionMode)
+
 
 class AllArtistsAlbums(ArtistAlbums):
 
     @log
-    def __init__(self, player):
-        ArtistAlbums.__init__(self, _("All Artists"), [], player)
+    def __init__(self, player, header_bar, selection_toolbar):
+        ArtistAlbums.__init__(self, _("All Artists"), [], player,
+                              header_bar, selection_toolbar)
         self._offset = 0
         self._populate()
 
@@ -446,6 +456,8 @@ class ArtistAlbumWidget(Gtk.HBox):
         self.album = album
         self.artist = artist
         self.model = model
+        self.model.connect('row-changed', self._model_row_changed)
+        self.selectionMode = False
         self.songs = []
         self.monitors = []
         self.ui = Gtk.Builder()
@@ -503,6 +515,11 @@ class ArtistAlbumWidget(Gtk.HBox):
                 song_widget._iter = itr
                 song_widget.model = self.model
                 song_widget.title = ui.get_object('title')
+                song_widget.checkButton = ui.get_object('select')
+                song_widget.checkButton.set_visible(self.selectionMode)
+                song_widget.checkButton.connect(
+                    'toggled', self._check_button_toggled, song_widget
+                )
                 self.player.discover_item(track, self._on_discovered, song_widget)
                 g_file = Gio.file_new_for_uri(track.get_url())
                 self.monitors.append(g_file.monitor_file(Gio.FileMonitorFlags.NONE,
@@ -548,11 +565,37 @@ class ArtistAlbumWidget(Gtk.HBox):
         if not widget.can_be_played:
             return
 
+        if self.selectionMode:
+            self.model[widget._iter][6] = not self.model[widget._iter][6]
+            return
+
         self.player.stop()
         self.player.set_playlist('Artist', self.artist,
                                  widget.model, widget._iter, 5)
         self.player.set_playing(True)
 
+    @log
+    def set_selection_mode(self, selectionMode):
+        self.selectionMode = selectionMode
+        for songWidget in self.songs:
+            songWidget.checkButton.set_visible(selectionMode)
+            if not selectionMode:
+                songWidget.model[songWidget._iter][6] = False
+
+    @log
+    def _check_button_toggled(self, button, songWidget):
+        if songWidget.model[songWidget._iter][6] != button.get_active():
+            songWidget.model[songWidget._iter][6] = button.get_active()
+
+    @log
+    def _model_row_changed(self, model, path, _iter):
+        if not model[_iter][5]:
+            return
+        songWidget = model[_iter][5].song_widget
+        selected = model[_iter][6]
+        if selected != songWidget.checkButton.get_active():
+            songWidget.checkButton.set_active(selected)
+
 
 class PlaylistDialog():
     @log


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