From 07d4c019967bd821294eb2b35aa1d559e8ec43c2 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 29 Aug 2010 12:47:50 +0200 Subject: Library: move subclasses to top level --- nephilim/plugins/Library.py | 140 ++++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py index 6e6550e..0e2b153 100644 --- a/nephilim/plugins/Library.py +++ b/nephilim/plugins/Library.py @@ -98,74 +98,6 @@ class LibraryWidget(QtGui.QWidget): filter = None - class LibrarySongItem(QtGui.QStandardItem): - # public - "Song path" - path = None - - class LibraryModel(QtGui.QStandardItemModel): - def fill(self, songs, grouping): - self.clear() - - tree = [{},self.invisibleRootItem()] - for song in songs: - cur_item = tree - for part in grouping: - try: - tag = song[part] - except KeyError: - tag = 'Unknown' - if tag in cur_item[0]: - cur_item = cur_item[0][tag] - else: - it = QtGui.QStandardItem(tag) - it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) - cur_item[1].appendRow(it) - cur_item[0][tag] = [{}, it] - cur_item = cur_item[0][tag] - it = LibraryWidget.LibrarySongItem('%s%02d %s'%(song['disc'] + '/' if 'disc' in song else '', - song['tracknum'] if 'tracknum' in song else 0, - song['?title'])) - it.path = song['?file'] - it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) - cur_item[1].appendRow(it) - - self.sort(0, QtCore.Qt.AscendingOrder) - - def walk_tree(self, indices): - """Returns a generator over all songs that are children of indices.""" - for index in indices: - if self.hasChildren(index): - for song in self.walk_tree([self.index(i, 0, index) for i in range(self.rowCount(index))]): - yield song - else: - yield self.itemFromIndex(index).path - - def flags(self, index): - return (QtCore.Qt.ItemIsDragEnabled if index.isValid() else 0) | QtGui.QStandardItemModel.flags(self, index) - - def mimeTypes(self): - return MIMETYPES['songs'] - - def mimeData(self, indices): - data = SongsMimeData() - - songs = [] - for song in self.walk_tree(indices): - songs.append(song) - - data.set_songs(songs) - return data - - class LibraryView(QtGui.QTreeView): - def __init__(self): - QtGui.QTreeView.__init__(self) - - self.setAlternatingRowColors(True) - self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - self.setUniformRowHeights(True) - self.setHeaderHidden(True) - self.setDragEnabled(True) def __init__(self, plugin): QtGui.QWidget.__init__(self) @@ -184,10 +116,10 @@ class LibraryWidget(QtGui.QWidget): self.search_txt.returnPressed.connect(self.add_filtered) #construct the library - self.library_model = self.LibraryModel() + self.library_model = LibraryModel() self.fill_library() - self.library_view = self.LibraryView() + self.library_view = LibraryView() self.library_view.setModel(self.library_model) self.library_view.activated.connect(lambda : self.add_indices(self.library_view.selectedIndexes())) @@ -261,3 +193,71 @@ class LibraryWidget(QtGui.QWidget): paths.append(song) self.plugin.mpclient.add(paths) +class LibrarySongItem(QtGui.QStandardItem): + # public + "Song path" + path = None + +class LibraryModel(QtGui.QStandardItemModel): + def fill(self, songs, grouping): + self.clear() + + tree = [{},self.invisibleRootItem()] + for song in songs: + cur_item = tree + for part in grouping: + try: + tag = song[part] + except KeyError: + tag = 'Unknown' + if tag in cur_item[0]: + cur_item = cur_item[0][tag] + else: + it = QtGui.QStandardItem(tag) + it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) + cur_item[1].appendRow(it) + cur_item[0][tag] = [{}, it] + cur_item = cur_item[0][tag] + it = LibrarySongItem('%s%02d %s'%(song['disc'] + '/' if 'disc' in song else '', + song['tracknum'] if 'tracknum' in song else 0, + song['?title'])) + it.path = song['?file'] + it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) + cur_item[1].appendRow(it) + + self.sort(0, QtCore.Qt.AscendingOrder) + + def walk_tree(self, indices): + """Returns a generator over all songs that are children of indices.""" + for index in indices: + if self.hasChildren(index): + for song in self.walk_tree([self.index(i, 0, index) for i in range(self.rowCount(index))]): + yield song + else: + yield self.itemFromIndex(index).path + + def flags(self, index): + return (QtCore.Qt.ItemIsDragEnabled if index.isValid() else 0) | QtGui.QStandardItemModel.flags(self, index) + + def mimeTypes(self): + return MIMETYPES['songs'] + + def mimeData(self, indices): + data = SongsMimeData() + + songs = [] + for song in self.walk_tree(indices): + songs.append(song) + + data.set_songs(songs) + return data + +class LibraryView(QtGui.QTreeView): + def __init__(self): + QtGui.QTreeView.__init__(self) + + self.setAlternatingRowColors(True) + self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + self.setUniformRowHeights(True) + self.setHeaderHidden(True) + self.setDragEnabled(True) -- cgit v1.2.3