mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-06 16:44:06 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"]),
|
||||
|
||||
@@ -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)
|
||||
|
||||
110
picard/ui/ui_exception_script_selector.py
Normal file
110
picard/ui/ui_exception_script_selector.py
Normal 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"))
|
||||
@@ -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"))
|
||||
|
||||
194
ui/exception_script_selector.ui
Normal file
194
ui/exception_script_selector.ui
Normal 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>
|
||||
@@ -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><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></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">
|
||||
|
||||
Reference in New Issue
Block a user