diff options
author | Anton Khirnov <wyskas@gmail.com> | 2010-02-10 20:37:47 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2010-02-11 08:36:42 +0100 |
commit | 2da79841f38a6b134db7c0232e7f23071db0314c (patch) | |
tree | b7f0e13bfd648e5c2ba3273d128caad7ad919eba | |
parent | a3d29f073d721c4a34ea7f702a84eb1f4d639a6d (diff) |
Playlist: add a popup menu with 'add same'
-rw-r--r-- | nephilim/plugins/Playlist.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/nephilim/plugins/Playlist.py b/nephilim/plugins/Playlist.py index a1b08a0..248f658 100644 --- a/nephilim/plugins/Playlist.py +++ b/nephilim/plugins/Playlist.py @@ -65,9 +65,14 @@ class PlaylistWidget(QtGui.QWidget): self.playlist.fill() class PlaylistTree(QtGui.QTreeWidget): - song = None plugin = None + ### PRIVATE ### + # popup menu + _menu = None + # add same... menu + _same_menu = None + def __init__(self, plugin): QtGui.QTreeWidget.__init__(self) self.plugin = plugin @@ -86,9 +91,16 @@ class PlaylistTree(QtGui.QTreeWidget): self.setHeaderLabels(columns) self.header().restoreState(self.plugin.settings.value(self.plugin.name + '/header_state').toByteArray()) + # menu + self._menu = QtGui.QMenu() + self._same_menu = self._menu.addMenu('Add same...') + self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.customContextMenuRequested.connect(self._show_context_menu) + self.itemActivated.connect(self._song_activated) self.header().geometriesChanged.connect(self._save_state) self.plugin.mpclient.playlist_changed.connect(self.fill) + self.plugin.mpclient.connect_changed.connect(self._update_menu) def _save_state(self): self.plugin.settings.setValue(self.plugin.name + '/header_state', QVariant(self.header().saveState())) @@ -141,6 +153,22 @@ class PlaylistTree(QtGui.QTreeWidget): def mimeTypes(self): return [MIMETYPES['songs'], MIMETYPES['plistsongs']] + def _update_menu(self): + """Update popup menu. Invoked on (dis)connect.""" + self._same_menu.clear() + for tag in self.plugin.mpclient.tagtypes: + self._same_menu.addAction(tag, lambda tag = tag: self._add_selected_same(tag)) + + def _add_selected_same(self, tag): + """Adds all tracks in DB with tag 'tag' same as selected tracks.""" + for it in self.selectedItems(): + self.plugin.mpclient.findadd(tag, it.song[tag]) + + def _show_context_menu(self, pos): + if not self.indexAt(pos).isValid(): + return + self._menu.popup(self.mapToGlobal(pos)) + class PlaylistSongItem(QtGui.QTreeWidgetItem): ### PUBLIC ### song = None |