Merge pull request #260 from Sophist-UK/sophist_add_view_variables_plugin

Add View Variables plugin
This commit is contained in:
Laurent Monin
2014-04-16 16:19:11 +02:00
3 changed files with 293 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
# -*- coding: utf-8 -*-
PLUGIN_NAME = u'View script variables'
PLUGIN_AUTHOR = u'Sophist'
PLUGIN_DESCRIPTION = u'''Display a dialog box listing the metadata variables for the track / file.'''
PLUGIN_VERSION = '0.5'
PLUGIN_API_VERSIONS = ['1.0']
from PyQt4 import QtGui, QtCore
try:
from picard.util.tags import PRESERVED_TAGS
except ImportError:
from picard.file import File
PRESERVED_TAGS = File._default_preserved_tags
from picard.file import File
from picard.track import Track
from picard.ui.itemviews import BaseAction, register_file_action, register_track_action
from picard.plugins.viewvariables.ui_variables_dialog import Ui_VariablesDialog
class ViewVariables(BaseAction):
NAME = 'View script variables'
def callback(self, objs):
obj = objs[0]
files = self.tagger.get_files_from_objects(objs)
if files:
obj = files[0]
dialog = ViewVariablesDialog(obj)
dialog.exec_()
class ViewVariablesDialog(QtGui.QDialog):
def __init__(self, obj, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ui = Ui_VariablesDialog()
self.ui.setupUi(self)
self.ui.buttonBox.accepted.connect(self.accept)
self.ui.buttonBox.rejected.connect(self.reject)
metadata = obj.metadata
if isinstance(obj,File):
self.setWindowTitle(_("File: %s") % obj.base_filename)
elif isinstance(obj,Track):
tn = metadata['tracknumber']
if len(tn) == 1:
tn = u"0" + tn
self.setWindowTitle(_("Track: %s %s ") % (tn, metadata['title']))
else:
self.setWindowTitle(_("Variables"))
self._display_metadata(metadata)
def _display_metadata(self, metadata):
keys = metadata.keys()
keys.sort(key=lambda key:
'0' + key if key in PRESERVED_TAGS and key.startswith('~') else
'1' + key if key.startswith('~') else
'2' + key
)
media = hidden = album = False
table = self.ui.metadata_table
key_example, value_example = self.get_table_items(table, 0)
self.key_flags = key_example.flags()
self.value_flags = value_example.flags()
table.setRowCount(len(keys)+3)
i = 0
for key in keys:
if key in PRESERVED_TAGS and key.startswith('~') :
if not media:
self.add_separator_row(table, i, _("File variables"))
i += 1
media = True
elif key.startswith('~'):
if not hidden:
self.add_separator_row(table, i, _("Hidden variables"))
i += 1
hidden = True
else:
if not album:
self.add_separator_row(table, i, _("Tag variables"))
i += 1
album = True
key_item, value_item = self.get_table_items(table, i)
i += 1
key_item.setText(u"_" + key[1:] if key.startswith('~') else key)
if key in metadata:
value = dict.get(metadata, key)
if len(value) == 1 and value[0] != '':
value = value[0]
else:
value = repr(value)
value_item.setText(value)
def add_separator_row(self, table, i, title):
key_item, value_item = self.get_table_items(table, i)
font = key_item.font()
font.setBold(True)
key_item.setFont(font)
key_item.setText(title)
def get_table_items(self, table, i):
key_item = table.item(i, 0)
value_item = table.item(i, 1)
if not key_item:
key_item = QtGui.QTableWidgetItem()
key_item.setFlags(self.key_flags)
table.setItem(i, 0, key_item)
if not value_item:
value_item = QtGui.QTableWidgetItem()
value_item.setFlags(self.value_flags)
table.setItem(i, 1, value_item)
return key_item, value_item
vv = ViewVariables()
register_file_action(vv)
register_track_action(vv)

View File

@@ -0,0 +1,79 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui\variables_dialog.ui'
#
# Created: Wed Mar 26 06:58:04 2014
# by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_VariablesDialog(object):
def setupUi(self, VariablesDialog):
VariablesDialog.setObjectName(_fromUtf8("VariablesDialog"))
VariablesDialog.resize(600, 450)
self.verticalLayout = QtGui.QVBoxLayout(VariablesDialog)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.metadata_table = QtGui.QTableWidget(VariablesDialog)
self.metadata_table.setAutoFillBackground(False)
self.metadata_table.setSelectionMode(QtGui.QAbstractItemView.ContiguousSelection)
self.metadata_table.setRowCount(1)
self.metadata_table.setColumnCount(2)
self.metadata_table.setObjectName(_fromUtf8("metadata_table"))
item = QtGui.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.metadata_table.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.metadata_table.setHorizontalHeaderItem(1, item)
item = QtGui.QTableWidgetItem()
item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
self.metadata_table.setItem(0, 0, item)
item = QtGui.QTableWidgetItem()
item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
self.metadata_table.setItem(0, 1, item)
self.metadata_table.horizontalHeader().setDefaultSectionSize(150)
self.metadata_table.horizontalHeader().setSortIndicatorShown(False)
self.metadata_table.horizontalHeader().setStretchLastSection(True)
self.metadata_table.verticalHeader().setVisible(False)
self.metadata_table.verticalHeader().setDefaultSectionSize(20)
self.metadata_table.verticalHeader().setMinimumSectionSize(20)
self.verticalLayout.addWidget(self.metadata_table)
self.buttonBox = QtGui.QDialogButtonBox(VariablesDialog)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
self.verticalLayout.addWidget(self.buttonBox)
self.retranslateUi(VariablesDialog)
QtCore.QMetaObject.connectSlotsByName(VariablesDialog)
def retranslateUi(self, VariablesDialog):
item = self.metadata_table.horizontalHeaderItem(0)
item.setText(_("Variable"))
item = self.metadata_table.horizontalHeaderItem(1)
item.setText(_("Value"))
__sortingEnabled = self.metadata_table.isSortingEnabled()
self.metadata_table.setSortingEnabled(False)
self.metadata_table.setSortingEnabled(__sortingEnabled)

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>VariablesDialog</class>
<widget class="QDialog" name="VariablesDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>450</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="metadata_table">
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ContiguousSelection</enum>
</property>
<property name="rowCount">
<number>1</number>
</property>
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>150</number>
</attribute>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>20</number>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>20</number>
</attribute>
<row/>
<column>
<property name="text">
<string>Variable</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string/>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
</item>
<item row="0" column="1">
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
</item>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>