From c33e547911585ac0ef7c34edeb2ac70054df7a1d Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 10 Feb 2010 19:20:47 +0100 Subject: Playlist: move all classes at to top level. --- nephilim/plugins/Playlist.py | 171 ++++++++++++++++++++++--------------------- 1 file changed, 86 insertions(+), 85 deletions(-) diff --git a/nephilim/plugins/Playlist.py b/nephilim/plugins/Playlist.py index 72e1d8b..b51701c 100644 --- a/nephilim/plugins/Playlist.py +++ b/nephilim/plugins/Playlist.py @@ -45,19 +45,12 @@ class PlaylistWidget(QtGui.QWidget): plugin = None playlist = None - class PlaylistSongItem(QtGui.QTreeWidgetItem): - # public - id = -1 - - def __init__(self, id): - QtGui.QTreeWidgetItem.__init__(self) - self.id = id def __init__(self, plugin): QtGui.QWidget.__init__(self) self.plugin = plugin - self.playlist = self.Playlist(self.plugin) + self.playlist = PlaylistTree(self.plugin) self.setLayout(QtGui.QVBoxLayout()) self.layout().setSpacing(0) @@ -67,82 +60,90 @@ class PlaylistWidget(QtGui.QWidget): if self.plugin.mpclient.is_connected(): self.playlist.fill() - class Playlist(QtGui.QTreeWidget): - song = None - plugin = None - - def __init__(self, plugin): - QtGui.QTreeWidget.__init__(self) - self.plugin = plugin - - self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection) - self.setAlternatingRowColors(True) - self.setRootIsDecorated(False) - - # drag&drop - self.viewport().setAcceptDrops(True) - self.setDropIndicatorShown(True) - self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) - - columns = self.plugin.settings.value(self.plugin.name + '/columns').toStringList() - self.setColumnCount(len(columns)) - self.setHeaderLabels(columns) - self.header().restoreState(self.plugin.settings.value(self.plugin.name + '/header_state').toByteArray()) - - self.itemActivated.connect(self._song_activated) - self.header().geometriesChanged.connect(self._save_state) - self.plugin.mpclient.playlist_changed.connect(self.fill) - - def _save_state(self): - self.plugin.settings.setValue(self.plugin.name + '/header_state', QVariant(self.header().saveState())) - - def _song_activated(self, item): - self.plugin.mpclient.play(item.id) - - def fill(self): - columns = self.plugin.settings.value(self.plugin.name + '/columns').toStringList() - self.clear() - for song in self.plugin.mpclient.playlistinfo(): - item = PlaylistWidget.PlaylistSongItem(song['id']) - for i in range(len(columns)): - item.setText(i, unicode(song[str(columns[i])])) - self.addTopLevelItem(item) - - def keyPressEvent(self, event): - if event.matches(QtGui.QKeySequence.Delete): - ids = [] - for item in self.selectedItems(): - ids.append(item.id) - - self.plugin.mpclient.delete(ids) - else: - QtGui.QTreeWidget.keyPressEvent(self, event) - - def mimeData(self, items): - data = SongsMimeData() - data.set_plistsongs([items[0].id]) - return data - - def dropMimeData(self, parent, index, data, action): - if data.hasFormat(MIMETYPES['plistsongs']): - if parent: - index = self.indexOfTopLevelItem(parent) - elif index >= self.topLevelItemCount(): - index = self.topLevelItemCount() - 1 - self.plugin.mpclient.move(data.plistsongs()[0], index) - return True - elif data.hasFormat(MIMETYPES['songs']): - if parent: - index = self.indexOfTopLevelItem(parent) - self.plugin.mpclient.add(data.songs(), index) - return True - return False - - def supportedDropActions(self): - return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction - - def mimeTypes(self): - return [MIMETYPES['songs'], MIMETYPES['plistsongs']] - def fill_playlist(self): self.playlist.fill() + +class PlaylistTree(QtGui.QTreeWidget): + song = None + plugin = None + + def __init__(self, plugin): + QtGui.QTreeWidget.__init__(self) + self.plugin = plugin + + self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection) + self.setAlternatingRowColors(True) + self.setRootIsDecorated(False) + + # drag&drop + self.viewport().setAcceptDrops(True) + self.setDropIndicatorShown(True) + self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) + + columns = self.plugin.settings.value(self.plugin.name + '/columns').toStringList() + self.setColumnCount(len(columns)) + self.setHeaderLabels(columns) + self.header().restoreState(self.plugin.settings.value(self.plugin.name + '/header_state').toByteArray()) + + self.itemActivated.connect(self._song_activated) + self.header().geometriesChanged.connect(self._save_state) + self.plugin.mpclient.playlist_changed.connect(self.fill) + + def _save_state(self): + self.plugin.settings.setValue(self.plugin.name + '/header_state', QVariant(self.header().saveState())) + + def _song_activated(self, item): + self.plugin.mpclient.play(item.id) + + def fill(self): + columns = self.plugin.settings.value(self.plugin.name + '/columns').toStringList() + self.clear() + for song in self.plugin.mpclient.playlistinfo(): + item = PlaylistSongItem(song['id']) + for i in range(len(columns)): + item.setText(i, unicode(song[str(columns[i])])) + self.addTopLevelItem(item) + + def keyPressEvent(self, event): + if event.matches(QtGui.QKeySequence.Delete): + ids = [] + for item in self.selectedItems(): + ids.append(item.id) + + self.plugin.mpclient.delete(ids) + else: + QtGui.QTreeWidget.keyPressEvent(self, event) + + def mimeData(self, items): + data = SongsMimeData() + data.set_plistsongs([items[0].id]) + return data + + def dropMimeData(self, parent, index, data, action): + if data.hasFormat(MIMETYPES['plistsongs']): + if parent: + index = self.indexOfTopLevelItem(parent) + elif index >= self.topLevelItemCount(): + index = self.topLevelItemCount() - 1 + self.plugin.mpclient.move(data.plistsongs()[0], index) + return True + elif data.hasFormat(MIMETYPES['songs']): + if parent: + index = self.indexOfTopLevelItem(parent) + self.plugin.mpclient.add(data.songs(), index) + return True + return False + + def supportedDropActions(self): + return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction + + def mimeTypes(self): + return [MIMETYPES['songs'], MIMETYPES['plistsongs']] + +class PlaylistSongItem(QtGui.QTreeWidgetItem): + # public + id = -1 + + def __init__(self, id): + QtGui.QTreeWidgetItem.__init__(self) + self.id = id -- cgit v1.2.3