[gnome-music] widgets: Add selection mode to ArtistAlbums
- From: Vadim Rutkovsky <vrutkovsky src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] widgets: Add selection mode to ArtistAlbums
- Date: Mon, 12 May 2014 08:49:24 +0000 (UTC)
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]