summaryrefslogtreecommitdiff
path: root/nephilim/plugins/Library.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-03-17 08:20:07 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-03-17 08:20:07 +0100
commit384e11f82ef1d8cc985b56810633bb99c16ce48e (patch)
tree0e8bf01d67f88e59046198f36d2d974fc7eda898 /nephilim/plugins/Library.py
parent1146ca7357aff757da1e46e3ee24334e038e7b49 (diff)
Library: QTreeWidget->QTreeView/QStandardItemModel
Diffstat (limited to 'nephilim/plugins/Library.py')
-rw-r--r--nephilim/plugins/Library.py84
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):