diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-08-23 21:21:28 +0200 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-08-23 21:21:28 +0200 |
commit | 9d18500f245f4ca7967c10be78fff96b387200ee (patch) | |
tree | 9734756b5531077c7415b55f39bb4a5ce3037c49 | |
parent | 405db9d29530a063475e183a0609d67fc59fe3ac (diff) |
Songinfo: allow choosing which tags to display.
-rw-r--r-- | nephilim/plugins/Songinfo.py | 65 |
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) |