summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-23 21:21:28 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-23 21:21:28 +0200
commit9d18500f245f4ca7967c10be78fff96b387200ee (patch)
tree9734756b5531077c7415b55f39bb4a5ce3037c49
parent405db9d29530a063475e183a0609d67fc59fe3ac (diff)
Songinfo: allow choosing which tags to display.
-rw-r--r--nephilim/plugins/Songinfo.py65
1 files changed, 57 insertions, 8 deletions
diff --git a/nephilim/plugins/Songinfo.py b/nephilim/plugins/Songinfo.py
index 44de8be..f5b7304 100644
--- a/nephilim/plugins/Songinfo.py
+++ b/nephilim/plugins/Songinfo.py
@@ -27,6 +27,53 @@ class Songinfo(Plugin):
o = None
tags = None
+ # private
+ DEFAULTS = {'tagtypes' : QtCore.QStringList(['track', 'title', 'artist', 'album',
+ 'albumartist', 'disc', 'genre', 'date', 'composer', 'performer', 'file'])}
+
+ #### private ####
+
+ class SettingsWidgetSonginfo(Plugin.SettingsWidget):
+ # private
+ taglist = None
+
+ def __init__(self, plugin):
+ Plugin.SettingsWidget.__init__(self, plugin)
+ self.settings.beginGroup(self.plugin.name)
+
+ tags_enabled = self.settings.value('tagtypes').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 = 'Tags', tooltip = 'A list of tags that should be displayed.\n'
+ 'Use drag and drop to change their order')
+
+ self.settings.endGroup()
+
+ def save_settings(self):
+ 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('tagtypes', QtCore.QVariant(tags))
+
+ self.settings.endGroup()
+ self.plugin.update_tagtypes()
+ self.plugin.refresh()
+
#### public ####
def __init__(self, parent, mpclient, name):
Plugin.__init__(self, parent, mpclient, name)
@@ -36,27 +83,29 @@ class Songinfo(Plugin):
def _load(self):
self.o = SonginfoWidget(self)
self.mpclient.song_changed.connect(self.refresh)
- self.mpclient.connect_changed.connect(self.__update_tagtypes)
+ self.mpclient.connect_changed.connect(self.update_tagtypes)
def _unload(self):
self.mpclient.song_changed.disconnect(self.refresh)
- self.mpclient.connect_changed.disconnect(self.__update_tagtypes)
+ self.mpclient.connect_changed.disconnect(self.update_tagtypes)
self.o = None
- def __update_tagtypes(self):
- self.__tags = self.mpclient.tagtypes()
- self.o.set_tagtypes(self.__tags)
-
def _get_dock_widget(self):
return self._create_dock(self.o)
+ def get_settings_widget(self):
+ return self.SettingsWidgetSonginfo(self)
+
+ def update_tagtypes(self):
+ self.__tags = [tag for tag in self.settings.value(self.name + '/tagtypes').toStringList() if tag in self.mpclient.tagtypes()]
+ self.o.set_tagtypes(self.__tags)
def refresh(self):
self.logger.info('Refreshing.')
metadata = {}
song = self.mpclient.current_song()
for tag in self.__tags:
- metadata[tag] = song.tag(tag, '') if song else ''
+ metadata[tag] = song.tag(str(tag), '') if song else '' #XXX i don't like the explicit conversion to python string
self.o.set_metadata(metadata)
class SonginfoWidget(QtGui.QWidget):
@@ -83,7 +132,7 @@ class SonginfoWidget(QtGui.QWidget):
self.__labels = {}
for tag in tagtypes:
- label = QtGui.QLabel('<b>%s</b>'%tag.title()) #TODO sort known tags
+ label = QtGui.QLabel('<b>%s</b>'%tag) #TODO sort known tags
label1 = QtGui.QLabel() # tag value will go here
label1.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
label.setWordWrap(True)