summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2010-02-10 20:37:47 +0100
committerAnton Khirnov <wyskas@gmail.com>2010-02-11 08:36:42 +0100
commit2da79841f38a6b134db7c0232e7f23071db0314c (patch)
treeb7f0e13bfd648e5c2ba3273d128caad7ad919eba
parenta3d29f073d721c4a34ea7f702a84eb1f4d639a6d (diff)
Playlist: add a popup menu with 'add same'
-rw-r--r--nephilim/plugins/Playlist.py30
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