summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-25 12:09:12 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-25 12:09:12 +0200
commit09bb49dc791ee9631bc9d856df25ce5988422064 (patch)
treeade3eef20911551e6c67b7569f4808590b1efbf3
parent5af7d4610a3a6f69ebcc6596dc45d9630f89ffe4 (diff)
Library: safer system for grouping.
-rw-r--r--nephilim/plugins/Library.py84
1 files changed, 44 insertions, 40 deletions
diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py
index 50f85a3..f59d297 100644
--- a/nephilim/plugins/Library.py
+++ b/nephilim/plugins/Library.py
@@ -25,60 +25,71 @@ class Library(Plugin):
info = 'Display MPD database as a tree.'
# public, read-only
- o=None
- DEFAULTS = {'modes' : QtCore.QStringList(['artist',
- 'artist/album',
- 'artist/date/album',
- 'genre',
- 'genre/artist',
- 'genre/artist/album'])}
+ o = None
+
+ # private
+ DEFAULTS = {'grouping' : QtCore.QStringList(['artist', 'album'])}
def _load(self):
self.o = LibraryWidget(self)
def _unload(self):
self.o = None
- def getInfo(self):
- return "List showing all the songs allowing filtering and grouping."
-
def _get_dock_widget(self):
return self._create_dock(self.o)
- def fill_library(self, params):
+ def fill_library(self):
if not self.o:
return
self.o.fill_library()
class SettingsWidgetLibrary(Plugin.SettingsWidget):
- modes = None
+ taglist = None
def __init__(self, plugin):
Plugin.SettingsWidget.__init__(self, plugin)
+ self.settings.beginGroup(self.plugin.name)
+
+ tags_enabled = self.settings.value('grouping').toStringList()
+ tags = self.plugin.mpclient.tagtypes()
+ self.taglist = QtGui.QListWidget(self)
+ self.taglist.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
+ for tag in [tag for tag in tags_enabled if tag in tags]:
+ it = QtGui.QListWidgetItem(tag)
+ it.setCheckState(QtCore.Qt.Checked)
+ self.taglist.addItem(it)
+ for tag in [tag for tag in tags if tag not in tags_enabled]:
+ it = QtGui.QListWidgetItem(tag)
+ it.setCheckState(QtCore.Qt.Unchecked)
+ self.taglist.addItem(it)
+
self.setLayout(QtGui.QVBoxLayout())
+ self._add_widget(self.taglist, label = 'Group', tooltip = 'Checked items and their order determines,\n'
+ 'by what tags will songs be grouped in Library. Use drag and drop to change the\n'
+ 'order of tags.')
- self.modes = QtGui.QComboBox()
- self.modes.setEditable(True)
- for mode in self.settings.value(self.plugin.name + '/modes').toStringList():
- self.modes.addItem(mode)
- self._add_widget(self.modes, 'Modes', 'How should the songs in library be grouped.\n'
- 'Should be written in form tag1/tag2/...,\n'
- 'using tags supported by MPD.')
+ self.settings.endGroup()
def save_settings(self):
- modes = QtCore.QStringList()
- for i in range(0, self.modes.count()):
- modes.append(self.modes.itemText(i))
- self.settings.setValue(self.plugin.name + '/modes', QVariant(modes))
- self.plugin.o.refresh_modes()
+ self.settings.beginGroup(self.plugin.name)
+
+ tags = QtCore.QStringList()
+ for i in range(self.taglist.count()):
+ it = self.taglist.item(i)
+ if it.checkState() == QtCore.Qt.Checked:
+ tags.append(it.text())
+ self.settings.setValue('grouping', QtCore.QVariant(tags))
+
+ self.settings.endGroup()
+ self.plugin.fill_library()
def get_settings_widget(self):
return self.SettingsWidgetLibrary(self)
-
class LibraryWidget(QtGui.QWidget):
library_view = None
library_model = None
search_txt = None
- modes = None
+ grouping = None
settings = None
plugin = None
logger = None
@@ -89,16 +100,16 @@ class LibraryWidget(QtGui.QWidget):
path = None
class LibraryModel(QtGui.QStandardItemModel):
- def fill(self, songs, mode):
+ def fill(self, songs, grouping):
self.clear()
tree = [{},self.invisibleRootItem()]
for song in songs:
cur_item = tree
- for part in mode.split('/'):
+ for part in grouping:
tag = song[part]
if isinstance(tag, list):
- tag = tag[0] #FIXME hack to make songs with multiple genres work.
+ tag = tag[0] #FIXME is this the best solution?
if not tag:
tag = 'Unknown'
if tag in cur_item[0]:
@@ -140,9 +151,7 @@ class LibraryWidget(QtGui.QWidget):
self.settings = QtCore.QSettings()
self.settings.beginGroup(self.plugin.name)
- self.modes = QtGui.QComboBox()
- self.refresh_modes()
- self.modes.activated.connect(self.modes_activated)
+ self.grouping = QtGui.QLabel()
self.search_txt = QtGui.QLineEdit()
self.search_txt.textChanged.connect(self.filter_changed)
@@ -159,22 +168,17 @@ class LibraryWidget(QtGui.QWidget):
self.setLayout(QtGui.QVBoxLayout())
self.layout().setSpacing(2)
self.layout().setMargin(0)
- self.layout().addWidget(self.modes)
+ self.layout().addWidget(self.grouping)
self.layout().addWidget(self.search_txt)
self.layout().addWidget(self.library_view)
self.plugin.mpclient.connect_changed.connect(self.fill_library)
self.plugin.mpclient.db_updated.connect(self.fill_library)
- def refresh_modes(self):
- self.modes.clear()
- for mode in self.settings.value('/modes').toStringList():
- self.modes.addItem(mode)
- self.modes.setCurrentIndex(self.settings.value('current_mode').toInt()[0])
-
def fill_library(self):
self.logger.info('Refreshing library.')
- self.library_model.fill(self.plugin.mpclient.library(), str(self.modes.currentText()))
+ self.grouping.setText(self.settings.value('grouping').toStringList().join('/'))
+ self.library_model.fill(self.plugin.mpclient.library(), self.settings.value('grouping').toStringList())
def filter_changed(self, text):
items = self.library_model.findItems(text, QtCore.Qt.MatchContains|QtCore.Qt.MatchRecursive)