mirror of
https://github.com/fergalmoran/picard.git
synced 2026-04-28 15:21:18 +00:00
Merge pull request #260 from Sophist-UK/sophist_add_view_variables_plugin
Add View Variables plugin
This commit is contained in:
116
contrib/plugins/viewvariables/__init__.py
Normal file
116
contrib/plugins/viewvariables/__init__.py
Normal 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)
|
||||
79
contrib/plugins/viewvariables/ui_variables_dialog.py
Normal file
79
contrib/plugins/viewvariables/ui_variables_dialog.py
Normal 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)
|
||||
|
||||
98
contrib/plugins/viewvariables/variables_dialog.ui
Normal file
98
contrib/plugins/viewvariables/variables_dialog.ui
Normal 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>
|
||||
Reference in New Issue
Block a user