Add script-specific weighting thresholds for translation exceptions:

- Move exception script selection to new dialog.
- Add script-specific weighting thresholds.
This commit is contained in:
Bob Swift
2021-09-10 13:40:31 -06:00
parent feebceb861
commit 6a69fb7291
9 changed files with 482 additions and 201 deletions

View File

@@ -42,7 +42,7 @@ PICARD_APP_NAME = "Picard"
PICARD_DISPLAY_NAME = "MusicBrainz Picard"
PICARD_APP_ID = "org.musicbrainz.Picard"
PICARD_DESKTOP_NAME = PICARD_APP_ID + ".desktop"
PICARD_VERSION = Version(2, 7, 0, 'dev', 4)
PICARD_VERSION = Version(2, 7, 0, 'dev', 5)
# optional build version

View File

@@ -435,6 +435,20 @@ def upgrade_to_v2_7_0_dev_4(config):
_s.remove("artist_locale")
def upgrade_to_v2_7_0_dev_5(config):
"""Replace artist_script_exceptions with script_exceptions and remove artist_script_exception_weighting"""
_s = config.setting
ListOption("setting", "script_exceptions", [])
weighting = _s["artist_script_exception_weighting"] if _s["artist_script_exception_weighting"] else 0
script_exceptions = []
if _s["artist_script_exceptions"]:
for script_exception in _s["artist_script_exceptions"]:
script_exceptions.append((script_exception, weighting))
_s["script_exceptions"] = script_exceptions
_s.remove("artist_script_exceptions")
_s.remove("artist_script_exception_weighting")
def rename_option(config, old_opt, new_opt, option_type, default):
_s = config.setting
if old_opt in _s:
@@ -477,4 +491,5 @@ def upgrade_config(config):
cfg.register_upgrade_hook(upgrade_to_v2_7_0_dev_2)
cfg.register_upgrade_hook(upgrade_to_v2_7_0_dev_3)
cfg.register_upgrade_hook(upgrade_to_v2_7_0_dev_4)
cfg.register_upgrade_hook(upgrade_to_v2_7_0_dev_5)
cfg.run_upgrade_hooks(log.debug)

View File

@@ -35,7 +35,7 @@ from picard.util import (
parse_amazon_url,
translate_from_sortname,
)
from picard.util.script_detector_weighted import list_script_weighted
from picard.util.script_detector_weighted import detect_script_weighted
_artist_rel_types = {
@@ -194,10 +194,10 @@ def _translate_artist_node(node):
transl, translsort = None, None
if config.setting['translate_artist_names']:
if config.setting['translate_artist_names_script_exception']:
threshhold = config.setting["artist_script_exception_weighting"] / 100
detected_scripts = list_script_weighted(node["name"], threshhold)
for script_id in config.setting["artist_script_exceptions"]:
if script_id in detected_scripts:
detected_scripts = detect_script_weighted(node["name"])
for script_item in config.setting["script_exceptions"]:
script_id, script_weighting = script_item
if script_id in detected_scripts and detected_scripts[script_id] >= script_weighting / 100:
return node['name'], node['sort-name']
def check_higher_score(locale_dict, locale, score):

View File

@@ -45,8 +45,7 @@ class UserProfileGroups():
SettingDesc("translate_artist_names", N_("Translate artist names"), ["translate_artist_names"]),
SettingDesc("artist_locales", N_("Translation locales"), ["selected_locales"]),
SettingDesc("translate_artist_names_script_exception", N_("Translate artist names exception"), ["translate_artist_names_script_exception"]),
SettingDesc("artist_script_exceptions", N_("Translation script exceptions"), ["ignore_tx_scripts"]),
SettingDesc("artist_script_exception_weighting", N_("Exception script weighting"), ["minimum_weighting"]),
SettingDesc("script_exceptions", N_("Translation script exceptions"), ["selected_scripts"]),
SettingDesc("release_ars", N_("Use release relationships"), ["release_ars"]),
SettingDesc("track_ars", N_("Use track relationships"), ["track_ars"]),
SettingDesc("convert_punctuation", N_("Convert Unicode punctuation characters to ASCII"), ["convert_punctuation"]),

View File

@@ -34,7 +34,6 @@ from PyQt5 import (
from picard.config import (
BoolOption,
IntOption,
ListOption,
TextOption,
get_config,
@@ -50,6 +49,7 @@ from picard.ui.options import (
OptionsPage,
register_options_page,
)
from picard.ui.ui_exception_script_selector import Ui_ExceptionScriptSelector
from picard.ui.ui_multi_locale_selector import Ui_MultiLocaleSelector
from picard.ui.ui_options_metadata import Ui_MetadataOptionsPage
@@ -86,8 +86,7 @@ class MetadataOptionsPage(OptionsPage):
ListOption("setting", "artist_locales", ["en"]),
BoolOption("setting", "translate_artist_names", False),
BoolOption("setting", "translate_artist_names_script_exception", False),
ListOption("setting", "artist_script_exceptions", []),
IntOption("setting", "artist_script_exception_weighting", 0),
ListOption("setting", "script_exceptions", []),
BoolOption("setting", "release_ars", True),
BoolOption("setting", "track_ars", False),
BoolOption("setting", "convert_punctuation", True),
@@ -103,6 +102,7 @@ class MetadataOptionsPage(OptionsPage):
self.ui.va_name_default.clicked.connect(self.set_va_name_default)
self.ui.nat_name_default.clicked.connect(self.set_nat_name_default)
self.ui.select_locales.clicked.connect(self.open_locale_selector)
self.ui.select_scripts.clicked.connect(self.open_script_selector)
self.ui.translate_artist_names.stateChanged.connect(self.set_enabled_states)
self.ui.translate_artist_names_script_exception.stateChanged.connect(self.set_enabled_states)
@@ -111,16 +111,9 @@ class MetadataOptionsPage(OptionsPage):
self.ui.translate_artist_names.setChecked(config.setting["translate_artist_names"])
self.current_locales = config.setting["artist_locales"]
self.make_locales_text()
self.current_scripts = config.setting["script_exceptions"]
self.make_scripts_text()
self.ui.translate_artist_names_script_exception.setChecked(config.setting["translate_artist_names_script_exception"])
self.ui.ignore_tx_scripts.clear()
for script_id in SCRIPTS:
enabled = script_id in config.setting["artist_script_exceptions"]
item = QtWidgets.QListWidgetItem(_(SCRIPTS[script_id]))
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setData(QtCore.Qt.UserRole, script_id)
item.setCheckState(QtCore.Qt.Checked if enabled else QtCore.Qt.Unchecked)
self.ui.ignore_tx_scripts.addItem(item)
self.ui.minimum_weighting.setValue(config.setting["artist_script_exception_weighting"])
self.ui.convert_punctuation.setChecked(config.setting["convert_punctuation"])
self.ui.release_ars.setChecked(config.setting["release_ars"])
@@ -140,18 +133,22 @@ class MetadataOptionsPage(OptionsPage):
self.ui.selected_locales.setText('; '.join(translated_locales()))
def make_scripts_text(self):
def translated_scripts():
for script in self.current_scripts:
yield "{script} ({weighting}%)".format(
script=_(SCRIPTS[script[0]]),
weighting=script[1],
)
self.ui.selected_scripts.setText('; '.join(translated_scripts()))
def save(self):
config = get_config()
config.setting["translate_artist_names"] = self.ui.translate_artist_names.isChecked()
config.setting["artist_locales"] = self.current_locales
config.setting["translate_artist_names_script_exception"] = self.ui.translate_artist_names_script_exception.isChecked()
script_exceptions = []
for idx in range(self.ui.ignore_tx_scripts.count()):
item = self.ui.ignore_tx_scripts.item(idx)
if item.checkState() == QtCore.Qt.Checked:
script_exceptions.append(item.data(QtCore.Qt.UserRole))
config.setting["artist_script_exceptions"] = script_exceptions
config.setting["artist_script_exception_weighting"] = min(100, max(0, self.ui.minimum_weighting.value()))
config.setting["script_exceptions"] = self.current_scripts
config.setting["convert_punctuation"] = self.ui.convert_punctuation.isChecked()
config.setting["release_ars"] = self.ui.release_ars.isChecked()
config.setting["track_ars"] = self.ui.track_ars.isChecked()
@@ -179,12 +176,17 @@ class MetadataOptionsPage(OptionsPage):
self.ui.select_locales.setEnabled(translate_checked)
self.ui.selected_locales.setEnabled(translate_checked)
self.ui.translate_artist_names_script_exception.setEnabled(translate_checked)
self.ui.ignore_script_frame.setEnabled(translate_checked and translate_exception_checked)
self.ui.selected_scripts.setEnabled(translate_checked and translate_exception_checked)
self.ui.select_scripts.setEnabled(translate_checked and translate_exception_checked)
def open_locale_selector(self):
dialog = MultiLocaleSelector(self)
dialog.show()
def open_script_selector(self):
dialog = ScriptExceptionSelector(self)
dialog.show()
class MultiLocaleSelector(PicardDialog):
def __init__(self, parent=None):
@@ -261,4 +263,106 @@ class MultiLocaleSelector(PicardDialog):
self.accept()
class ScriptExceptionSelector(PicardDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_ExceptionScriptSelector()
self.ui.setupUi(self)
self.ui.button_box.accepted.connect(self.save_changes)
self.ui.button_box.rejected.connect(self.reject)
self.move_view = MoveableListView(self.ui.selected_scripts, self.ui.move_up, self.ui.move_down)
self.ui.add_script.clicked.connect(self.add_script)
self.ui.remove_script.clicked.connect(self.remove_script)
self.ui.selected_scripts.currentRowChanged.connect(self.selected_script_changed)
self.ui.weighting_selector.valueChanged.connect(self.weighting_changed)
self.load()
@staticmethod
def make_label(script_id, script_weighting):
return "{script} ({weighting}%)".format(
script=_(SCRIPTS[script_id]),
weighting=script_weighting,
)
def load(self):
self.ui.selected_scripts.clear()
for script in self.parent().current_scripts:
label = self.make_label(script_id=script[0], script_weighting=script[1])
item = QtWidgets.QListWidgetItem(label)
item.setData(QtCore.Qt.UserRole, script)
self.ui.selected_scripts.addItem(item)
if self.ui.selected_scripts.count() > 0:
self.ui.selected_scripts.setCurrentRow(0)
self.set_weighting_selector()
self.ui.available_scripts.clear()
for script_id in SCRIPTS:
item = QtWidgets.QListWidgetItem(_(SCRIPTS[script_id]))
item.setData(QtCore.Qt.UserRole, script_id)
self.ui.available_scripts.addItem(item)
self.ui.available_scripts.setCurrentRow(0)
self.set_button_state()
def add_script(self):
item = self.ui.available_scripts.currentItem()
if item is None:
return
script_id = item.data(QtCore.Qt.UserRole)
for row in range(self.ui.selected_scripts.count()):
selected_item = self.ui.selected_scripts.item(row)
if selected_item.data(QtCore.Qt.UserRole)[0] == script_id:
return
new_item = QtWidgets.QListWidgetItem(self.make_label(script_id, 0))
new_item.setData(QtCore.Qt.UserRole, (script_id, 0))
self.ui.selected_scripts.addItem(new_item)
self.ui.selected_scripts.setCurrentRow(self.ui.selected_scripts.count() - 1)
self.set_weighting_selector()
def remove_script(self):
row = self.ui.selected_scripts.currentRow()
self.ui.selected_scripts.takeItem(row)
def selected_script_changed(self):
self.set_weighting_selector()
self.set_button_state()
def weighting_changed(self):
self.set_item_from_weighting()
def set_button_state(self):
enabled = self.ui.selected_scripts.count() > 0
self.ui.remove_script.setEnabled(enabled)
self.ui.weighting_selector.setEnabled(enabled)
def set_weighting_selector(self):
row = self.ui.selected_scripts.currentRow()
selected_item = self.ui.selected_scripts.item(row)
if selected_item:
weighting = selected_item.data(QtCore.Qt.UserRole)[1]
else:
weighting = 0
self.ui.weighting_selector.setValue(weighting)
def set_item_from_weighting(self):
row = self.ui.selected_scripts.currentRow()
selected_item = self.ui.selected_scripts.item(row)
if selected_item:
item_data = selected_item.data(QtCore.Qt.UserRole)
weighting = self.ui.weighting_selector.value()
new_data = (item_data[0], weighting)
selected_item.setData(QtCore.Qt.UserRole, new_data)
label = self.make_label(script_id=item_data[0], script_weighting=weighting)
selected_item.setText(label)
def save_changes(self):
scripts = []
for row in range(self.ui.selected_scripts.count()):
selected_item = self.ui.selected_scripts.item(row)
scripts.append(selected_item.data(QtCore.Qt.UserRole))
self.parent().current_scripts = scripts
self.parent().make_scripts_text()
self.accept()
register_options_page(MetadataOptionsPage)

View File

@@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
# Automatically generated - don't edit.
# Use `python setup.py build_ui` to update it.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ExceptionScriptSelector(object):
def setupUi(self, ExceptionScriptSelector):
ExceptionScriptSelector.setObjectName("ExceptionScriptSelector")
ExceptionScriptSelector.setWindowModality(QtCore.Qt.WindowModal)
ExceptionScriptSelector.resize(507, 284)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(ExceptionScriptSelector.sizePolicy().hasHeightForWidth())
ExceptionScriptSelector.setSizePolicy(sizePolicy)
self.verticalLayout = QtWidgets.QVBoxLayout(ExceptionScriptSelector)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label = QtWidgets.QLabel(ExceptionScriptSelector)
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.selected_scripts = QtWidgets.QListWidget(ExceptionScriptSelector)
self.selected_scripts.setObjectName("selected_scripts")
self.verticalLayout_2.addWidget(self.selected_scripts)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setContentsMargins(-1, -1, -1, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_3 = QtWidgets.QLabel(ExceptionScriptSelector)
self.label_3.setObjectName("label_3")
self.horizontalLayout_2.addWidget(self.label_3)
self.weighting_selector = QtWidgets.QSpinBox(ExceptionScriptSelector)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.weighting_selector.sizePolicy().hasHeightForWidth())
self.weighting_selector.setSizePolicy(sizePolicy)
self.weighting_selector.setMaximumSize(QtCore.QSize(50, 16777215))
self.weighting_selector.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.weighting_selector.setMaximum(100)
self.weighting_selector.setObjectName("weighting_selector")
self.horizontalLayout_2.addWidget(self.weighting_selector)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.horizontalLayout.addLayout(self.verticalLayout_2)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
self.move_up = QtWidgets.QToolButton(ExceptionScriptSelector)
self.move_up.setText("")
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-up.png")
self.move_up.setIcon(icon)
self.move_up.setObjectName("move_up")
self.verticalLayout_3.addWidget(self.move_up)
self.add_script = QtWidgets.QToolButton(ExceptionScriptSelector)
self.add_script.setText("")
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-previous.png")
self.add_script.setIcon(icon)
self.add_script.setObjectName("add_script")
self.verticalLayout_3.addWidget(self.add_script)
self.remove_script = QtWidgets.QToolButton(ExceptionScriptSelector)
self.remove_script.setText("")
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-next.png")
self.remove_script.setIcon(icon)
self.remove_script.setObjectName("remove_script")
self.verticalLayout_3.addWidget(self.remove_script)
self.move_down = QtWidgets.QToolButton(ExceptionScriptSelector)
self.move_down.setText("")
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-down.png")
self.move_down.setIcon(icon)
self.move_down.setObjectName("move_down")
self.verticalLayout_3.addWidget(self.move_down)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem1)
self.horizontalLayout.addLayout(self.verticalLayout_3)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.label_2 = QtWidgets.QLabel(ExceptionScriptSelector)
self.label_2.setObjectName("label_2")
self.verticalLayout_4.addWidget(self.label_2)
self.available_scripts = QtWidgets.QListWidget(ExceptionScriptSelector)
self.available_scripts.setObjectName("available_scripts")
self.verticalLayout_4.addWidget(self.available_scripts)
self.horizontalLayout.addLayout(self.verticalLayout_4)
self.verticalLayout.addLayout(self.horizontalLayout)
self.button_box = QtWidgets.QDialogButtonBox(ExceptionScriptSelector)
self.button_box.setOrientation(QtCore.Qt.Horizontal)
self.button_box.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Save)
self.button_box.setObjectName("button_box")
self.verticalLayout.addWidget(self.button_box)
self.retranslateUi(ExceptionScriptSelector)
QtCore.QMetaObject.connectSlotsByName(ExceptionScriptSelector)
def retranslateUi(self, ExceptionScriptSelector):
_translate = QtCore.QCoreApplication.translate
ExceptionScriptSelector.setWindowTitle(_("Exception Script Selector"))
self.label.setText(_("Selected Scripts"))
self.label_3.setText(_("Selected script match threshold:"))
self.move_up.setToolTip(_("Move selected script up"))
self.add_script.setToolTip(_("Add to selected scripts"))
self.remove_script.setToolTip(_("Remove selected script"))
self.move_down.setToolTip(_("Move selected script down"))
self.label_2.setText(_("Available Scripts"))

View File

@@ -41,64 +41,17 @@ class Ui_MetadataOptionsPage(object):
self.translate_artist_names_script_exception = QtWidgets.QCheckBox(self.metadata_groupbox)
self.translate_artist_names_script_exception.setObjectName("translate_artist_names_script_exception")
self.verticalLayout_3.addWidget(self.translate_artist_names_script_exception)
self.ignore_script_frame = QtWidgets.QFrame(self.metadata_groupbox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ignore_script_frame.sizePolicy().hasHeightForWidth())
self.ignore_script_frame.setSizePolicy(sizePolicy)
self.ignore_script_frame.setMinimumSize(QtCore.QSize(0, 0))
self.ignore_script_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.ignore_script_frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.ignore_script_frame.setObjectName("ignore_script_frame")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.ignore_script_frame)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.ignore_tx_scripts = QtWidgets.QListWidget(self.ignore_script_frame)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ignore_tx_scripts.sizePolicy().hasHeightForWidth())
self.ignore_tx_scripts.setSizePolicy(sizePolicy)
self.ignore_tx_scripts.setObjectName("ignore_tx_scripts")
self.horizontalLayout_3.addWidget(self.ignore_tx_scripts)
self.frame = QtWidgets.QFrame(self.ignore_script_frame)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
self.frame.setSizePolicy(sizePolicy)
self.frame.setMinimumSize(QtCore.QSize(180, 0))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_2 = QtWidgets.QLabel(self.frame)
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.verticalLayout_2.addWidget(self.label_2)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setContentsMargins(0, -1, -1, -1)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label = QtWidgets.QLabel(self.frame)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.horizontalLayout_2.addWidget(self.label)
self.minimum_weighting = QtWidgets.QSpinBox(self.frame)
self.minimum_weighting.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.minimum_weighting.setMaximum(100)
self.minimum_weighting.setObjectName("minimum_weighting")
self.horizontalLayout_2.addWidget(self.minimum_weighting)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.horizontalLayout_3.addWidget(self.frame)
self.verticalLayout_3.addWidget(self.ignore_script_frame)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setContentsMargins(-1, -1, -1, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.selected_scripts = QtWidgets.QLineEdit(self.metadata_groupbox)
self.selected_scripts.setReadOnly(True)
self.selected_scripts.setObjectName("selected_scripts")
self.horizontalLayout_4.addWidget(self.selected_scripts)
self.select_scripts = QtWidgets.QPushButton(self.metadata_groupbox)
self.select_scripts.setObjectName("select_scripts")
self.horizontalLayout_4.addWidget(self.select_scripts)
self.verticalLayout_3.addLayout(self.horizontalLayout_4)
self.standardize_artists = QtWidgets.QCheckBox(self.metadata_groupbox)
self.standardize_artists.setObjectName("standardize_artists")
self.verticalLayout_3.addWidget(self.standardize_artists)
@@ -148,8 +101,8 @@ class Ui_MetadataOptionsPage(object):
self.va_name.setObjectName("va_name")
self.gridlayout.addWidget(self.va_name, 1, 0, 1, 1)
self.verticalLayout.addWidget(self.custom_fields_groupbox)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.label_6.setBuddy(self.va_name_default)
self.label_7.setBuddy(self.nat_name_default)
@@ -173,8 +126,7 @@ class Ui_MetadataOptionsPage(object):
self.translate_artist_names.setText(_("Translate artist names to these locales where possible:"))
self.select_locales.setText(_("Select"))
self.translate_artist_names_script_exception.setText(_("Ignore artist name translation for these scripts:"))
self.label_2.setText(_("<html><head/><body><p>Only scripts where the percentage of the artist name that is written using that script are above the specified minimum weighting will be considered.</p></body></html>"))
self.label.setText(_("Minimum Weighting:"))
self.select_scripts.setText(_("Select"))
self.standardize_artists.setText(_("Use standardized artist names"))
self.standardize_instruments.setText(_("Use standardized instrument and vocal credits"))
self.convert_punctuation.setText(_("Convert Unicode punctuation characters to ASCII"))

View File

@@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ExceptionScriptSelector</class>
<widget class="QDialog" name="ExceptionScriptSelector">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>507</width>
<height>284</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Exception Script Selector</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Selected Scripts</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="selected_scripts"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Selected script match threshold:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="weighting_selector">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="move_up">
<property name="toolTip">
<string>Move selected script up</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-up.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="add_script">
<property name="toolTip">
<string>Add to selected scripts</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-previous.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="remove_script">
<property name="toolTip">
<string>Remove selected script</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-next.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="move_down">
<property name="toolTip">
<string>Move selected script down</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-down.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Available Scripts</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="available_scripts"/>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="button_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -68,118 +68,25 @@
</widget>
</item>
<item>
<widget class="QFrame" name="ignore_script_frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="bottomMargin">
<number>0</number>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QListWidget" name="ignore_tx_scripts">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>180</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Only scripts where the percentage of the artist name that is written using that script are above the specified minimum weighting will be considered.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Minimum Weighting:</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="minimum_weighting">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<item>
<widget class="QLineEdit" name="selected_scripts">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="select_scripts">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="standardize_artists">