Move modules to a separate dir.
[nephilim.git] / nephilim / plugins / Playlist.py
blob2258701c42c0608dee8d97d3d72a7b186da0fb5c
1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import QVariant
4 from ..clPlugin import Plugin
6 # Dependencies:
7 # playcontrol
8 class pluginPlaylist(Plugin):
9 o = None
10 DEFAULTS = {'columns': ['track', 'title', 'artist',
11 'date', 'album', 'length']}
13 def __init__(self, winMain):
14 Plugin.__init__(self, winMain, 'Playlist')
15 def _load(self):
16 self.o = PlaylistWidget(self)
17 self.mpclient.add_listener('onPlaylistChange', self.on_playlist_change)
18 self.mpclient.add_listener('onDisconnect', self.on_playlist_change)
19 self.mpclient.add_listener('onReady', self.on_playlist_change)
21 def _unload(self):
22 self.o = None
23 def getInfo(self):
24 return "The playlist showing the songs that will be played."
26 def _getDockWidget(self):
27 return self._createDock(self.o)
29 def on_playlist_change(self, params = None):
30 self.o.fill_playlist()
32 class PlaylistWidget(QtGui.QWidget):
33 plugin = None
34 playlist = None
36 def __init__(self, plugin):
37 QtGui.QWidget.__init__(self)
38 self.plugin = plugin
40 self.playlist = self.Playlist(self.plugin)
42 self.setLayout(QtGui.QVBoxLayout())
43 self.layout().setSpacing(0)
44 self.layout().setMargin(0)
45 self.layout().addWidget(self.playlist)
47 class Playlist(QtGui.QTreeWidget):
48 song = None
49 plugin = None
51 def __init__(self, plugin):
52 QtGui.QTreeWidget.__init__(self)
53 self.plugin = plugin
55 self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection)
56 self.setAlternatingRowColors(True)
57 self.setRootIsDecorated(False)
58 columns = self.plugin.settings.value(self.plugin.getName() + '/columns').toStringList()
59 self.setColumnCount(len(columns))
60 self.setHeaderLabels(columns)
61 self.header().restoreState(self.plugin.settings.value(self.plugin.getName() + '/header_state').toByteArray())
62 self.connect(self, QtCore.SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self._song_activated)
63 self.connect(self.header(), QtCore.SIGNAL('geometriesChanged()'), self._save_state)
65 def _save_state(self):
66 self.plugin.settings.setValue(self.plugin.getName() + '/header_state', QVariant(self.header().saveState()))
68 def _song_activated(self, item):
69 self.plugin.mpclient.play(item.data(0, QtCore.Qt.UserRole).toPyObject().getID())
71 def fill(self):
72 columns = self.plugin.settings.value(self.plugin.getName() + '/columns').toStringList()
73 self.clear()
74 for song in self.plugin.mpclient.listPlaylist():
75 item = QtGui.QTreeWidgetItem()
76 for i in range(len(columns)):
77 item.setText(i, unicode(song.getTag(str(columns[i]))))
78 item.setData(0, QtCore.Qt.UserRole, QVariant(song))
79 self.addTopLevelItem(item)
81 def keyPressEvent(self, event):
82 if event.matches(QtGui.QKeySequence.Delete):
83 ids = []
84 for item in self.selectedItems():
85 ids.append(item.data(0, QtCore.Qt.UserRole).toPyObject().getID())
87 self.plugin.mpclient.deleteFromPlaylist(ids)
88 else:
89 QtGui.QTreeWidget.keyPressEvent(self, event)
91 def fill_playlist(self):
92 self.playlist.fill()