diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-03-17 08:20:07 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-03-17 08:20:07 +0100 |
commit | 384e11f82ef1d8cc985b56810633bb99c16ce48e (patch) | |
tree | 0e8bf01d67f88e59046198f36d2d974fc7eda898 /nephilim/plugins/Library.py | |
parent | 1146ca7357aff757da1e46e3ee24334e038e7b49 (diff) |
Library: QTreeWidget->QTreeView/QStandardItemModel
Diffstat (limited to 'nephilim/plugins/Library.py')
-rw-r--r-- | nephilim/plugins/Library.py | 84 |
1 files changed, 48 insertions, 36 deletions
diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py index a10b0b6..e1fe94f 100644 --- a/nephilim/plugins/Library.py +++ b/nephilim/plugins/Library.py @@ -47,22 +47,14 @@ class Library(Plugin): class LibraryWidget(QtGui.QWidget): - library = None - search_txt = None - modes = None - settings = None - plugin = None - - class LibraryTree(QtGui.QTreeWidget): - - def __init__(self): - QtGui.QTreeWidget.__init__(self) - - self.setColumnCount(1) - self.setAlternatingRowColors(True) - self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection) - self.headerItem().setHidden(True) - + library_view = None + library_model = None + search_txt = None + modes = None + settings = None + plugin = None + + class LibraryModel(QtGui.QStandardItemModel): def fill(self, songs, mode): self.clear() @@ -78,22 +70,39 @@ class LibraryWidget(QtGui.QWidget): if tag in cur_item[0]: cur_item = cur_item[0][tag] else: - it = QtGui.QTreeWidgetItem([tag]) - cur_item[1].addChild(it) + 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 = QtGui.QTreeWidgetItem(['%s%02d %s'%(song.tag('disc') + '/' if song.tag('disc') else '', + it = QtGui.QStandardItem('%s%02d %s'%(song.tag('disc') + '/' if song.tag('disc') else '', song.track() if song.track() else 0, - song.title() if song.title() else song.filepath())], 1000) - it.setData(0, QtCore.Qt.UserRole, QVariant(song)) - cur_item[1].addChild(it) + song.title() if song.title() else song.filepath())) + it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) + it.setData(QVariant(song), QtCore.Qt.UserRole) + cur_item[1].appendRow(it) - self.sortItems(0, QtCore.Qt.AscendingOrder) + self.sort(0, QtCore.Qt.AscendingOrder) + 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) + + def selectedItems(self): + ret = [] + for index in self.selectedIndexes(): + ret.append(self.model().itemFromIndex(index)) + + return ret def __init__(self, plugin): QtGui.QWidget.__init__(self) - self.plugin = plugin + self.plugin = plugin self.settings = QtCore.QSettings() self.settings.beginGroup(self.plugin.name()) @@ -107,16 +116,19 @@ class LibraryWidget(QtGui.QWidget): self.connect(self.search_txt, QtCore.SIGNAL('returnPressed()'), self.add_filtered) #construct the library - self.library = self.LibraryTree() + self.library_model = self.LibraryModel() self.fill_library() - self.connect(self.library, QtCore.SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.add_selection) + + self.library_view = self.LibraryView() + self.library_view.setModel(self.library_model) + self.connect(self.library_view, QtCore.SIGNAL('activated(const QModelIndex &)'), self.add_selection) self.setLayout(QtGui.QVBoxLayout()) self.layout().setSpacing(2) self.layout().setMargin(0) self.layout().addWidget(self.modes) self.layout().addWidget(self.search_txt) - self.layout().addWidget(self.library) + self.layout().addWidget(self.library_view) self.connect(self.plugin.mpclient(), QtCore.SIGNAL('connected'), self.fill_library) self.connect(self.plugin.mpclient(), QtCore.SIGNAL('disconnected'), self.fill_library) @@ -129,16 +141,16 @@ class LibraryWidget(QtGui.QWidget): self.modes.setCurrentIndex(self.settings.value('current_mode').toInt()[0]) def fill_library(self): - self.library.fill(self.plugin.mpclient().library(), str(self.modes.currentText())) + self.library_model.fill(self.plugin.mpclient().library(), str(self.modes.currentText())) def filter_changed(self, text): - items = self.library.findItems(text, QtCore.Qt.MatchContains|QtCore.Qt.MatchRecursive) - for i in range(self.library.topLevelItemCount()): - self.library.topLevelItem(i).setHidden(True) + items = self.library_model.findItems(text, QtCore.Qt.MatchContains|QtCore.Qt.MatchRecursive) + for i in range(self.library_model.rowCount()): + self.library_view.setRowHidden(i, QtCore.QModelIndex(), True) for item in items: while item.parent(): item = item.parent() - item.setHidden(False) + self.library_view.setRowHidden(item.row(), QtCore.QModelIndex(), False) self.filtered_items = items def add_filtered(self): @@ -146,7 +158,7 @@ class LibraryWidget(QtGui.QWidget): self.search_txt.clear() def add_selection(self): - self.add_items(self.library.selectedItems()) + self.add_items(self.library_view.selectedItems()) def add_items(self, items): paths = [] @@ -155,10 +167,10 @@ class LibraryWidget(QtGui.QWidget): self.plugin.mpclient().add(paths) def item_to_playlist(self, item, add_queue): - if item.type() == 1000: - add_queue.append(item.data(0, QtCore.Qt.UserRole).toPyObject().filepath()) + if not item.hasChildren(): + add_queue.append(item.data(QtCore.Qt.UserRole).toPyObject().filepath()) else: - for i in range(item.childCount()): + for i in range(item.rowCount()): self.item_to_playlist(item.child(i), add_queue) def modes_activated(self): |