PICARD-1671: Moved tags compatibility options to separate page

This commit is contained in:
Philipp Wolfer
2019-11-19 17:49:44 +01:00
parent 55492bc74b
commit 3585bbb32e
7 changed files with 602 additions and 494 deletions

View File

@@ -57,6 +57,7 @@ from picard.ui.options import ( # noqa: F401 # pylint: disable=unused-import
renaming,
scripting,
tags,
tags_compatibility,
)
from picard.ui.util import StandardButton

View File

@@ -17,7 +17,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from functools import partial
import re
from PyQt5 import (
@@ -44,71 +43,31 @@ class TagsOptionsPage(OptionsPage):
ACTIVE = True
options = [
config.BoolOption("setting", "clear_existing_tags", False),
config.TextOption("setting", "preserved_tags", ""),
config.BoolOption("setting", "write_id3v1", True),
config.BoolOption("setting", "write_id3v23", True),
config.TextOption("setting", "id3v2_encoding", "utf-16"),
config.TextOption("setting", "id3v23_join_with", "/"),
config.BoolOption("setting", "remove_id3_from_flac", False),
config.BoolOption("setting", "remove_ape_from_mp3", False),
config.BoolOption("setting", "tpe2_albumartist", False),
config.BoolOption("setting", "itunes_compatible_grouping", False),
config.BoolOption("setting", "dont_write_tags", False),
config.BoolOption("setting", "preserve_timestamps", False),
config.BoolOption("setting", "aac_save_ape", True),
config.BoolOption("setting", "remove_ape_from_aac", False),
config.BoolOption("setting", "ac3_save_ape", True),
config.BoolOption("setting", "remove_ape_from_ac3", False),
config.BoolOption("setting", "clear_existing_tags", False),
config.BoolOption("setting", "remove_id3_from_flac", False),
config.BoolOption("setting", "remove_ape_from_mp3", False),
config.TextOption("setting", "preserved_tags", ""),
]
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_TagsOptionsPage()
self.ui.setupUi(self)
self.ui.write_id3v23.clicked.connect(self.update_encodings)
self.ui.write_id3v24.clicked.connect(partial(self.update_encodings, force_utf8=True))
self.completer = QtWidgets.QCompleter(sorted(TAG_NAMES.keys()), self)
self.completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.completer.setWidget(self.ui.preserved_tags)
self.ui.preserved_tags.textEdited.connect(self.preserved_tags_edited)
self.completer.activated.connect(self.completer_activated)
self.ui.aac_no_tags.toggled.connect(self.ui.remove_ape_from_aac.setEnabled)
self.ui.ac3_no_tags.toggled.connect(self.ui.remove_ape_from_ac3.setEnabled)
def load(self):
self.ui.write_tags.setChecked(not config.setting["dont_write_tags"])
self.ui.preserve_timestamps.setChecked(config.setting["preserve_timestamps"])
self.ui.clear_existing_tags.setChecked(config.setting["clear_existing_tags"])
self.ui.write_id3v1.setChecked(config.setting["write_id3v1"])
if config.setting["write_id3v23"]:
self.ui.write_id3v23.setChecked(True)
else:
self.ui.write_id3v24.setChecked(True)
if config.setting["id3v2_encoding"] == "iso-8859-1":
self.ui.enc_iso88591.setChecked(True)
elif config.setting["id3v2_encoding"] == "utf-16":
self.ui.enc_utf16.setChecked(True)
else:
self.ui.enc_utf8.setChecked(True)
self.ui.id3v23_join_with.setEditText(config.setting["id3v23_join_with"])
self.ui.remove_ape_from_mp3.setChecked(config.setting["remove_ape_from_mp3"])
self.ui.remove_id3_from_flac.setChecked(config.setting["remove_id3_from_flac"])
self.ui.itunes_compatible_grouping.setChecked(config.setting["itunes_compatible_grouping"])
self.ui.preserved_tags.setText(config.setting["preserved_tags"])
if config.setting["aac_save_ape"]:
self.ui.aac_save_ape.setChecked(True)
else:
self.ui.aac_no_tags.setChecked(True)
self.ui.remove_ape_from_aac.setChecked(config.setting["remove_ape_from_aac"])
self.ui.remove_ape_from_aac.setEnabled(not config.setting["aac_save_ape"])
if config.setting["ac3_save_ape"]:
self.ui.ac3_save_ape.setChecked(True)
else:
self.ui.ac3_no_tags.setChecked(True)
self.ui.remove_ape_from_ac3.setChecked(config.setting["remove_ape_from_ac3"])
self.ui.remove_ape_from_ac3.setEnabled(not config.setting["ac3_save_ape"])
self.update_encodings()
def save(self):
config.setting["dont_write_tags"] = not self.ui.write_tags.isChecked()
@@ -117,39 +76,11 @@ class TagsOptionsPage(OptionsPage):
if clear_existing_tags != config.setting["clear_existing_tags"]:
config.setting["clear_existing_tags"] = clear_existing_tags
self.tagger.window.metadata_box.update()
config.setting["write_id3v1"] = self.ui.write_id3v1.isChecked()
config.setting["write_id3v23"] = self.ui.write_id3v23.isChecked()
config.setting["id3v23_join_with"] = self.ui.id3v23_join_with.currentText()
if self.ui.enc_iso88591.isChecked():
config.setting["id3v2_encoding"] = "iso-8859-1"
elif self.ui.enc_utf16.isChecked():
config.setting["id3v2_encoding"] = "utf-16"
else:
config.setting["id3v2_encoding"] = "utf-8"
config.setting["remove_ape_from_mp3"] = self.ui.remove_ape_from_mp3.isChecked()
config.setting["remove_id3_from_flac"] = self.ui.remove_id3_from_flac.isChecked()
config.setting["itunes_compatible_grouping"] = self.ui.itunes_compatible_grouping.isChecked()
config.setting["preserved_tags"] = re.sub(r"[,\s]+$", "", self.ui.preserved_tags.text())
config.setting["aac_save_ape"] = self.ui.aac_save_ape.isChecked()
config.setting["remove_ape_from_aac"] = self.ui.remove_ape_from_aac.isChecked()
config.setting["ac3_save_ape"] = self.ui.ac3_save_ape.isChecked()
config.setting["remove_ape_from_ac3"] = self.ui.remove_ape_from_ac3.isChecked()
self.tagger.window.enable_tag_saving_action.setChecked(not config.setting["dont_write_tags"])
def update_encodings(self, force_utf8=False):
if self.ui.write_id3v23.isChecked():
if self.ui.enc_utf8.isChecked():
self.ui.enc_utf16.setChecked(True)
self.ui.enc_utf8.setEnabled(False)
self.ui.label_id3v23_join_with.setEnabled(True)
self.ui.id3v23_join_with.setEnabled(True)
else:
self.ui.enc_utf8.setEnabled(True)
if force_utf8:
self.ui.enc_utf8.setChecked(True)
self.ui.label_id3v23_join_with.setEnabled(False)
self.ui.id3v23_join_with.setEnabled(False)
def preserved_tags_edited(self, text):
prefix = text[:self.ui.preserved_tags.cursorPosition()].split(",")[-1]
self.completer.setCompletionPrefix(prefix.strip())

View File

@@ -0,0 +1,121 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2006 Lukáš Lalinský
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from functools import partial
from picard import config
from picard.ui.options import (
OptionsPage,
register_options_page,
)
from picard.ui.ui_options_tags_compatibility import (
Ui_TagsCompatibilityOptionsPage,
)
class TagsCompatibilityOptionsPage(OptionsPage):
NAME = "tags_compatibility"
TITLE = N_("Tag Compatibility")
PARENT = "tags"
SORT_ORDER = 30
ACTIVE = True
options = [
config.BoolOption("setting", "write_id3v1", True),
config.BoolOption("setting", "write_id3v23", True),
config.TextOption("setting", "id3v2_encoding", "utf-16"),
config.TextOption("setting", "id3v23_join_with", "/"),
config.BoolOption("setting", "itunes_compatible_grouping", False),
config.BoolOption("setting", "aac_save_ape", True),
config.BoolOption("setting", "remove_ape_from_aac", False),
config.BoolOption("setting", "ac3_save_ape", True),
config.BoolOption("setting", "remove_ape_from_ac3", False),
]
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_TagsCompatibilityOptionsPage()
self.ui.setupUi(self)
self.ui.write_id3v23.clicked.connect(self.update_encodings)
self.ui.write_id3v24.clicked.connect(partial(self.update_encodings, force_utf8=True))
self.ui.aac_no_tags.toggled.connect(self.ui.remove_ape_from_aac.setEnabled)
self.ui.ac3_no_tags.toggled.connect(self.ui.remove_ape_from_ac3.setEnabled)
def load(self):
self.ui.write_id3v1.setChecked(config.setting["write_id3v1"])
if config.setting["write_id3v23"]:
self.ui.write_id3v23.setChecked(True)
else:
self.ui.write_id3v24.setChecked(True)
if config.setting["id3v2_encoding"] == "iso-8859-1":
self.ui.enc_iso88591.setChecked(True)
elif config.setting["id3v2_encoding"] == "utf-16":
self.ui.enc_utf16.setChecked(True)
else:
self.ui.enc_utf8.setChecked(True)
self.ui.id3v23_join_with.setEditText(config.setting["id3v23_join_with"])
self.ui.itunes_compatible_grouping.setChecked(config.setting["itunes_compatible_grouping"])
if config.setting["aac_save_ape"]:
self.ui.aac_save_ape.setChecked(True)
else:
self.ui.aac_no_tags.setChecked(True)
self.ui.remove_ape_from_aac.setChecked(config.setting["remove_ape_from_aac"])
self.ui.remove_ape_from_aac.setEnabled(not config.setting["aac_save_ape"])
if config.setting["ac3_save_ape"]:
self.ui.ac3_save_ape.setChecked(True)
else:
self.ui.ac3_no_tags.setChecked(True)
self.ui.remove_ape_from_ac3.setChecked(config.setting["remove_ape_from_ac3"])
self.ui.remove_ape_from_ac3.setEnabled(not config.setting["ac3_save_ape"])
self.update_encodings()
def save(self):
config.setting["write_id3v1"] = self.ui.write_id3v1.isChecked()
config.setting["write_id3v23"] = self.ui.write_id3v23.isChecked()
config.setting["id3v23_join_with"] = self.ui.id3v23_join_with.currentText()
if self.ui.enc_iso88591.isChecked():
config.setting["id3v2_encoding"] = "iso-8859-1"
elif self.ui.enc_utf16.isChecked():
config.setting["id3v2_encoding"] = "utf-16"
else:
config.setting["id3v2_encoding"] = "utf-8"
config.setting["itunes_compatible_grouping"] = self.ui.itunes_compatible_grouping.isChecked()
config.setting["aac_save_ape"] = self.ui.aac_save_ape.isChecked()
config.setting["remove_ape_from_aac"] = self.ui.remove_ape_from_aac.isChecked()
config.setting["ac3_save_ape"] = self.ui.ac3_save_ape.isChecked()
config.setting["remove_ape_from_ac3"] = self.ui.remove_ape_from_ac3.isChecked()
def update_encodings(self, force_utf8=False):
if self.ui.write_id3v23.isChecked():
if self.ui.enc_utf8.isChecked():
self.ui.enc_utf16.setChecked(True)
self.ui.enc_utf8.setEnabled(False)
self.ui.label_id3v23_join_with.setEnabled(True)
self.ui.id3v23_join_with.setEnabled(True)
else:
self.ui.enc_utf8.setEnabled(True)
if force_utf8:
self.ui.enc_utf8.setChecked(True)
self.ui.label_id3v23_join_with.setEnabled(False)
self.ui.id3v23_join_with.setEnabled(False)
register_options_page(TagsCompatibilityOptionsPage)

View File

@@ -10,7 +10,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_TagsOptionsPage(object):
def setupUi(self, TagsOptionsPage):
TagsOptionsPage.setObjectName("TagsOptionsPage")
TagsOptionsPage.resize(539, 633)
TagsOptionsPage.resize(539, 525)
self.vboxlayout = QtWidgets.QVBoxLayout(TagsOptionsPage)
self.vboxlayout.setObjectName("vboxlayout")
self.write_tags = QtWidgets.QCheckBox(TagsOptionsPage)
@@ -46,122 +46,8 @@ class Ui_TagsOptionsPage(object):
self.preserved_tags_help.setObjectName("preserved_tags_help")
self.vboxlayout1.addWidget(self.preserved_tags_help)
self.vboxlayout.addWidget(self.before_tagging)
self.tag_compatibility = QtWidgets.QGroupBox(TagsOptionsPage)
self.tag_compatibility.setObjectName("tag_compatibility")
self.vboxlayout2 = QtWidgets.QVBoxLayout(self.tag_compatibility)
self.vboxlayout2.setContentsMargins(-1, 6, -1, 7)
self.vboxlayout2.setSpacing(2)
self.vboxlayout2.setObjectName("vboxlayout2")
self.id3v2_version = QtWidgets.QGroupBox(self.tag_compatibility)
self.id3v2_version.setFlat(False)
self.id3v2_version.setCheckable(False)
self.id3v2_version.setObjectName("id3v2_version")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.id3v2_version)
self.horizontalLayout.setContentsMargins(-1, 6, -1, 7)
self.horizontalLayout.setObjectName("horizontalLayout")
self.write_id3v24 = QtWidgets.QRadioButton(self.id3v2_version)
self.write_id3v24.setChecked(True)
self.write_id3v24.setObjectName("write_id3v24")
self.horizontalLayout.addWidget(self.write_id3v24)
self.write_id3v23 = QtWidgets.QRadioButton(self.id3v2_version)
self.write_id3v23.setChecked(False)
self.write_id3v23.setObjectName("write_id3v23")
self.horizontalLayout.addWidget(self.write_id3v23)
self.label = QtWidgets.QLabel(self.id3v2_version)
self.label.setText("")
self.label.setWordWrap(True)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
self.vboxlayout2.addWidget(self.id3v2_version)
self.id3v2_text_encoding = QtWidgets.QGroupBox(self.tag_compatibility)
self.id3v2_text_encoding.setObjectName("id3v2_text_encoding")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.id3v2_text_encoding)
self.horizontalLayout_2.setContentsMargins(-1, 6, -1, 7)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.enc_utf8 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_utf8.setObjectName("enc_utf8")
self.horizontalLayout_2.addWidget(self.enc_utf8)
self.enc_utf16 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_utf16.setObjectName("enc_utf16")
self.horizontalLayout_2.addWidget(self.enc_utf16)
self.enc_iso88591 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_iso88591.setObjectName("enc_iso88591")
self.horizontalLayout_2.addWidget(self.enc_iso88591)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem2)
self.label_2 = QtWidgets.QLabel(self.id3v2_text_encoding)
self.label_2.setText("")
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.vboxlayout2.addWidget(self.id3v2_text_encoding)
self.hbox_id3v23_join_with = QtWidgets.QHBoxLayout()
self.hbox_id3v23_join_with.setObjectName("hbox_id3v23_join_with")
self.label_id3v23_join_with = QtWidgets.QLabel(self.tag_compatibility)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(4)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_id3v23_join_with.sizePolicy().hasHeightForWidth())
self.label_id3v23_join_with.setSizePolicy(sizePolicy)
self.label_id3v23_join_with.setObjectName("label_id3v23_join_with")
self.hbox_id3v23_join_with.addWidget(self.label_id3v23_join_with)
self.id3v23_join_with = QtWidgets.QComboBox(self.tag_compatibility)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.id3v23_join_with.sizePolicy().hasHeightForWidth())
self.id3v23_join_with.setSizePolicy(sizePolicy)
self.id3v23_join_with.setEditable(True)
self.id3v23_join_with.setObjectName("id3v23_join_with")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(0, "/")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(1, "; ")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(2, " / ")
self.hbox_id3v23_join_with.addWidget(self.id3v23_join_with)
self.vboxlayout2.addLayout(self.hbox_id3v23_join_with)
self.itunes_compatible_grouping = QtWidgets.QCheckBox(self.tag_compatibility)
self.itunes_compatible_grouping.setObjectName("itunes_compatible_grouping")
self.vboxlayout2.addWidget(self.itunes_compatible_grouping)
self.write_id3v1 = QtWidgets.QCheckBox(self.tag_compatibility)
self.write_id3v1.setObjectName("write_id3v1")
self.vboxlayout2.addWidget(self.write_id3v1)
self.vboxlayout.addWidget(self.tag_compatibility)
self.aac_tags = QtWidgets.QGroupBox(TagsOptionsPage)
self.aac_tags.setObjectName("aac_tags")
self.verticalLayout = QtWidgets.QVBoxLayout(self.aac_tags)
self.verticalLayout.setObjectName("verticalLayout")
self.aac_save_ape = QtWidgets.QRadioButton(self.aac_tags)
self.aac_save_ape.setChecked(True)
self.aac_save_ape.setObjectName("aac_save_ape")
self.verticalLayout.addWidget(self.aac_save_ape)
self.aac_no_tags = QtWidgets.QRadioButton(self.aac_tags)
self.aac_no_tags.setObjectName("aac_no_tags")
self.verticalLayout.addWidget(self.aac_no_tags)
self.remove_ape_from_aac = QtWidgets.QCheckBox(self.aac_tags)
self.remove_ape_from_aac.setObjectName("remove_ape_from_aac")
self.verticalLayout.addWidget(self.remove_ape_from_aac)
self.vboxlayout.addWidget(self.aac_tags)
self.ac3_files = QtWidgets.QGroupBox(TagsOptionsPage)
self.ac3_files.setObjectName("ac3_files")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.ac3_files)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.ac3_save_ape = QtWidgets.QRadioButton(self.ac3_files)
self.ac3_save_ape.setChecked(True)
self.ac3_save_ape.setObjectName("ac3_save_ape")
self.verticalLayout_2.addWidget(self.ac3_save_ape)
self.ac3_no_tags = QtWidgets.QRadioButton(self.ac3_files)
self.ac3_no_tags.setObjectName("ac3_no_tags")
self.verticalLayout_2.addWidget(self.ac3_no_tags)
self.remove_ape_from_ac3 = QtWidgets.QCheckBox(self.ac3_files)
self.remove_ape_from_ac3.setObjectName("remove_ape_from_ac3")
self.verticalLayout_2.addWidget(self.remove_ape_from_ac3)
self.vboxlayout.addWidget(self.ac3_files)
spacerItem3 = QtWidgets.QSpacerItem(274, 41, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem3)
spacerItem1 = QtWidgets.QSpacerItem(274, 41, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem1)
self.retranslateUi(TagsOptionsPage)
QtCore.QMetaObject.connectSlotsByName(TagsOptionsPage)
@@ -170,13 +56,6 @@ class Ui_TagsOptionsPage(object):
TagsOptionsPage.setTabOrder(self.clear_existing_tags, self.remove_id3_from_flac)
TagsOptionsPage.setTabOrder(self.remove_id3_from_flac, self.remove_ape_from_mp3)
TagsOptionsPage.setTabOrder(self.remove_ape_from_mp3, self.preserved_tags)
TagsOptionsPage.setTabOrder(self.preserved_tags, self.write_id3v24)
TagsOptionsPage.setTabOrder(self.write_id3v24, self.write_id3v23)
TagsOptionsPage.setTabOrder(self.write_id3v23, self.enc_utf8)
TagsOptionsPage.setTabOrder(self.enc_utf8, self.enc_utf16)
TagsOptionsPage.setTabOrder(self.enc_utf16, self.enc_iso88591)
TagsOptionsPage.setTabOrder(self.enc_iso88591, self.id3v23_join_with)
TagsOptionsPage.setTabOrder(self.id3v23_join_with, self.write_id3v1)
def retranslateUi(self, TagsOptionsPage):
_translate = QtCore.QCoreApplication.translate
@@ -188,23 +67,3 @@ class Ui_TagsOptionsPage(object):
self.remove_ape_from_mp3.setText(_("Remove APEv2 tags from MP3 files"))
self.preserved_tags_label.setText(_("Preserve these tags from being cleared or overwritten with MusicBrainz data:"))
self.preserved_tags_help.setText(_("Tags are separated by commas, and are case-sensitive."))
self.tag_compatibility.setTitle(_("Tag Compatibility"))
self.id3v2_version.setTitle(_("ID3v2 Version"))
self.write_id3v24.setText(_("2.4"))
self.write_id3v23.setText(_("2.3"))
self.id3v2_text_encoding.setTitle(_("ID3v2 Text Encoding"))
self.enc_utf8.setText(_("UTF-8"))
self.enc_utf16.setText(_("UTF-16"))
self.enc_iso88591.setText(_("ISO-8859-1"))
self.label_id3v23_join_with.setText(_("Join multiple ID3v2.3 tags with:"))
self.id3v23_join_with.setToolTip(_("<html><head/><body><p>Default is \'/\' to maintain compatibility with previous Picard releases.</p><p>New alternatives are \';_\' or \'_/_\' or type your own. </p></body></html>"))
self.itunes_compatible_grouping.setText(_("Save iTunes compatible grouping and work"))
self.write_id3v1.setText(_("Also include ID3v1 tags in the files"))
self.aac_tags.setTitle(_("AAC files"))
self.aac_save_ape.setText(_("Save APEv2 tags"))
self.aac_no_tags.setText(_("Do not save tags"))
self.remove_ape_from_aac.setText(_("Remove APEv2 tags from AAC files"))
self.ac3_files.setTitle(_("AC3 files"))
self.ac3_save_ape.setText(_("Save APEv2 tags"))
self.ac3_no_tags.setText(_("Do not save tags"))
self.remove_ape_from_ac3.setText(_("Remove APEv2 tags from AC3 files"))

View File

@@ -0,0 +1,163 @@
# -*- 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_TagsCompatibilityOptionsPage(object):
def setupUi(self, TagsCompatibilityOptionsPage):
TagsCompatibilityOptionsPage.setObjectName("TagsCompatibilityOptionsPage")
TagsCompatibilityOptionsPage.resize(539, 525)
self.vboxlayout = QtWidgets.QVBoxLayout(TagsCompatibilityOptionsPage)
self.vboxlayout.setObjectName("vboxlayout")
self.tag_compatibility = QtWidgets.QGroupBox(TagsCompatibilityOptionsPage)
self.tag_compatibility.setObjectName("tag_compatibility")
self.vboxlayout1 = QtWidgets.QVBoxLayout(self.tag_compatibility)
self.vboxlayout1.setContentsMargins(-1, 6, -1, 7)
self.vboxlayout1.setSpacing(2)
self.vboxlayout1.setObjectName("vboxlayout1")
self.id3v2_version = QtWidgets.QGroupBox(self.tag_compatibility)
self.id3v2_version.setFlat(False)
self.id3v2_version.setCheckable(False)
self.id3v2_version.setObjectName("id3v2_version")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.id3v2_version)
self.horizontalLayout.setContentsMargins(-1, 6, -1, 7)
self.horizontalLayout.setObjectName("horizontalLayout")
self.write_id3v24 = QtWidgets.QRadioButton(self.id3v2_version)
self.write_id3v24.setChecked(True)
self.write_id3v24.setObjectName("write_id3v24")
self.horizontalLayout.addWidget(self.write_id3v24)
self.write_id3v23 = QtWidgets.QRadioButton(self.id3v2_version)
self.write_id3v23.setChecked(False)
self.write_id3v23.setObjectName("write_id3v23")
self.horizontalLayout.addWidget(self.write_id3v23)
self.label = QtWidgets.QLabel(self.id3v2_version)
self.label.setText("")
self.label.setWordWrap(True)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.vboxlayout1.addWidget(self.id3v2_version)
self.id3v2_text_encoding = QtWidgets.QGroupBox(self.tag_compatibility)
self.id3v2_text_encoding.setObjectName("id3v2_text_encoding")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.id3v2_text_encoding)
self.horizontalLayout_2.setContentsMargins(-1, 6, -1, 7)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.enc_utf8 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_utf8.setObjectName("enc_utf8")
self.horizontalLayout_2.addWidget(self.enc_utf8)
self.enc_utf16 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_utf16.setObjectName("enc_utf16")
self.horizontalLayout_2.addWidget(self.enc_utf16)
self.enc_iso88591 = QtWidgets.QRadioButton(self.id3v2_text_encoding)
self.enc_iso88591.setObjectName("enc_iso88591")
self.horizontalLayout_2.addWidget(self.enc_iso88591)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem1)
self.label_2 = QtWidgets.QLabel(self.id3v2_text_encoding)
self.label_2.setText("")
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.vboxlayout1.addWidget(self.id3v2_text_encoding)
self.hbox_id3v23_join_with = QtWidgets.QHBoxLayout()
self.hbox_id3v23_join_with.setObjectName("hbox_id3v23_join_with")
self.label_id3v23_join_with = QtWidgets.QLabel(self.tag_compatibility)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(4)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_id3v23_join_with.sizePolicy().hasHeightForWidth())
self.label_id3v23_join_with.setSizePolicy(sizePolicy)
self.label_id3v23_join_with.setObjectName("label_id3v23_join_with")
self.hbox_id3v23_join_with.addWidget(self.label_id3v23_join_with)
self.id3v23_join_with = QtWidgets.QComboBox(self.tag_compatibility)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.id3v23_join_with.sizePolicy().hasHeightForWidth())
self.id3v23_join_with.setSizePolicy(sizePolicy)
self.id3v23_join_with.setEditable(True)
self.id3v23_join_with.setObjectName("id3v23_join_with")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(0, "/")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(1, "; ")
self.id3v23_join_with.addItem("")
self.id3v23_join_with.setItemText(2, " / ")
self.hbox_id3v23_join_with.addWidget(self.id3v23_join_with)
self.vboxlayout1.addLayout(self.hbox_id3v23_join_with)
self.itunes_compatible_grouping = QtWidgets.QCheckBox(self.tag_compatibility)
self.itunes_compatible_grouping.setObjectName("itunes_compatible_grouping")
self.vboxlayout1.addWidget(self.itunes_compatible_grouping)
self.write_id3v1 = QtWidgets.QCheckBox(self.tag_compatibility)
self.write_id3v1.setObjectName("write_id3v1")
self.vboxlayout1.addWidget(self.write_id3v1)
self.vboxlayout.addWidget(self.tag_compatibility)
self.aac_tags = QtWidgets.QGroupBox(TagsCompatibilityOptionsPage)
self.aac_tags.setObjectName("aac_tags")
self.verticalLayout = QtWidgets.QVBoxLayout(self.aac_tags)
self.verticalLayout.setObjectName("verticalLayout")
self.aac_save_ape = QtWidgets.QRadioButton(self.aac_tags)
self.aac_save_ape.setChecked(True)
self.aac_save_ape.setObjectName("aac_save_ape")
self.verticalLayout.addWidget(self.aac_save_ape)
self.aac_no_tags = QtWidgets.QRadioButton(self.aac_tags)
self.aac_no_tags.setObjectName("aac_no_tags")
self.verticalLayout.addWidget(self.aac_no_tags)
self.remove_ape_from_aac = QtWidgets.QCheckBox(self.aac_tags)
self.remove_ape_from_aac.setObjectName("remove_ape_from_aac")
self.verticalLayout.addWidget(self.remove_ape_from_aac)
self.vboxlayout.addWidget(self.aac_tags)
self.ac3_files = QtWidgets.QGroupBox(TagsCompatibilityOptionsPage)
self.ac3_files.setObjectName("ac3_files")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.ac3_files)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.ac3_save_ape = QtWidgets.QRadioButton(self.ac3_files)
self.ac3_save_ape.setChecked(True)
self.ac3_save_ape.setObjectName("ac3_save_ape")
self.verticalLayout_2.addWidget(self.ac3_save_ape)
self.ac3_no_tags = QtWidgets.QRadioButton(self.ac3_files)
self.ac3_no_tags.setObjectName("ac3_no_tags")
self.verticalLayout_2.addWidget(self.ac3_no_tags)
self.remove_ape_from_ac3 = QtWidgets.QCheckBox(self.ac3_files)
self.remove_ape_from_ac3.setObjectName("remove_ape_from_ac3")
self.verticalLayout_2.addWidget(self.remove_ape_from_ac3)
self.vboxlayout.addWidget(self.ac3_files)
spacerItem2 = QtWidgets.QSpacerItem(274, 41, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem2)
self.retranslateUi(TagsCompatibilityOptionsPage)
QtCore.QMetaObject.connectSlotsByName(TagsCompatibilityOptionsPage)
TagsCompatibilityOptionsPage.setTabOrder(self.write_id3v24, self.write_id3v23)
TagsCompatibilityOptionsPage.setTabOrder(self.write_id3v23, self.enc_utf8)
TagsCompatibilityOptionsPage.setTabOrder(self.enc_utf8, self.enc_utf16)
TagsCompatibilityOptionsPage.setTabOrder(self.enc_utf16, self.enc_iso88591)
TagsCompatibilityOptionsPage.setTabOrder(self.enc_iso88591, self.id3v23_join_with)
TagsCompatibilityOptionsPage.setTabOrder(self.id3v23_join_with, self.write_id3v1)
def retranslateUi(self, TagsCompatibilityOptionsPage):
_translate = QtCore.QCoreApplication.translate
self.tag_compatibility.setTitle(_("ID3"))
self.id3v2_version.setTitle(_("ID3v2 Version"))
self.write_id3v24.setText(_("2.4"))
self.write_id3v23.setText(_("2.3"))
self.id3v2_text_encoding.setTitle(_("ID3v2 Text Encoding"))
self.enc_utf8.setText(_("UTF-8"))
self.enc_utf16.setText(_("UTF-16"))
self.enc_iso88591.setText(_("ISO-8859-1"))
self.label_id3v23_join_with.setText(_("Join multiple ID3v2.3 tags with:"))
self.id3v23_join_with.setToolTip(_("<html><head/><body><p>Default is \'/\' to maintain compatibility with previous Picard releases.</p><p>New alternatives are \';_\' or \'_/_\' or type your own. </p></body></html>"))
self.itunes_compatible_grouping.setText(_("Save iTunes compatible grouping and work"))
self.write_id3v1.setText(_("Also include ID3v1 tags in the files"))
self.aac_tags.setTitle(_("AAC files"))
self.aac_save_ape.setText(_("Save APEv2 tags"))
self.aac_no_tags.setText(_("Do not save tags"))
self.remove_ape_from_aac.setText(_("Remove APEv2 tags from AAC files"))
self.ac3_files.setTitle(_("AC3 files"))
self.ac3_save_ape.setText(_("Save APEv2 tags"))
self.ac3_no_tags.setText(_("Do not save tags"))
self.remove_ape_from_ac3.setText(_("Remove APEv2 tags from AC3 files"))

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>539</width>
<height>633</height>
<height>525</height>
</rect>
</property>
<layout class="QVBoxLayout">
@@ -97,275 +97,6 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="tag_compatibility">
<property name="title">
<string>Tag Compatibility</string>
</property>
<layout class="QVBoxLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QGroupBox" name="id3v2_version">
<property name="title">
<string>ID3v2 Version</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QRadioButton" name="write_id3v24">
<property name="text">
<string>2.4</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="write_id3v23">
<property name="text">
<string>2.3</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="id3v2_text_encoding">
<property name="title">
<string>ID3v2 Text Encoding</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QRadioButton" name="enc_utf8">
<property name="text">
<string>UTF-8</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="enc_utf16">
<property name="text">
<string>UTF-16</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="enc_iso88591">
<property name="text">
<string>ISO-8859-1</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hbox_id3v23_join_with">
<item>
<widget class="QLabel" name="label_id3v23_join_with">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Join multiple ID3v2.3 tags with:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="id3v23_join_with">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Default is '/' to maintain compatibility with previous Picard releases.&lt;/p&gt;&lt;p&gt;New alternatives are ';_' or '_/_' or type your own. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string notr="true">/</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">; </string>
</property>
</item>
<item>
<property name="text">
<string notr="true"> / </string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="itunes_compatible_grouping">
<property name="text">
<string>Save iTunes compatible grouping and work</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="write_id3v1">
<property name="text">
<string>Also include ID3v1 tags in the files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="aac_tags">
<property name="title">
<string>AAC files</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="aac_save_ape">
<property name="text">
<string>Save APEv2 tags</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="aac_no_tags">
<property name="text">
<string>Do not save tags</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="remove_ape_from_aac">
<property name="text">
<string>Remove APEv2 tags from AAC files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="ac3_files">
<property name="title">
<string>AC3 files</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QRadioButton" name="ac3_save_ape">
<property name="text">
<string>Save APEv2 tags</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="ac3_no_tags">
<property name="text">
<string>Do not save tags</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="remove_ape_from_ac3">
<property name="text">
<string>Remove APEv2 tags from AC3 files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
@@ -388,13 +119,6 @@
<tabstop>remove_id3_from_flac</tabstop>
<tabstop>remove_ape_from_mp3</tabstop>
<tabstop>preserved_tags</tabstop>
<tabstop>write_id3v24</tabstop>
<tabstop>write_id3v23</tabstop>
<tabstop>enc_utf8</tabstop>
<tabstop>enc_utf16</tabstop>
<tabstop>enc_iso88591</tabstop>
<tabstop>id3v23_join_with</tabstop>
<tabstop>write_id3v1</tabstop>
</tabstops>
<resources/>
<connections/>

View File

@@ -0,0 +1,309 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TagsCompatibilityOptionsPage</class>
<widget class="QWidget" name="TagsCompatibilityOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>525</height>
</rect>
</property>
<layout class="QVBoxLayout">
<item>
<widget class="QGroupBox" name="tag_compatibility">
<property name="title">
<string>ID3</string>
</property>
<layout class="QVBoxLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QGroupBox" name="id3v2_version">
<property name="title">
<string>ID3v2 Version</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QRadioButton" name="write_id3v24">
<property name="text">
<string>2.4</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="write_id3v23">
<property name="text">
<string>2.3</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="id3v2_text_encoding">
<property name="title">
<string>ID3v2 Text Encoding</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>7</number>
</property>
<item>
<widget class="QRadioButton" name="enc_utf8">
<property name="text">
<string>UTF-8</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="enc_utf16">
<property name="text">
<string>UTF-16</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="enc_iso88591">
<property name="text">
<string>ISO-8859-1</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hbox_id3v23_join_with">
<item>
<widget class="QLabel" name="label_id3v23_join_with">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Join multiple ID3v2.3 tags with:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="id3v23_join_with">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Default is '/' to maintain compatibility with previous Picard releases.&lt;/p&gt;&lt;p&gt;New alternatives are ';_' or '_/_' or type your own. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string notr="true">/</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">; </string>
</property>
</item>
<item>
<property name="text">
<string notr="true"> / </string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="itunes_compatible_grouping">
<property name="text">
<string>Save iTunes compatible grouping and work</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="write_id3v1">
<property name="text">
<string>Also include ID3v1 tags in the files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="aac_tags">
<property name="title">
<string>AAC files</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="aac_save_ape">
<property name="text">
<string>Save APEv2 tags</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="aac_no_tags">
<property name="text">
<string>Do not save tags</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="remove_ape_from_aac">
<property name="text">
<string>Remove APEv2 tags from AAC files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="ac3_files">
<property name="title">
<string>AC3 files</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QRadioButton" name="ac3_save_ape">
<property name="text">
<string>Save APEv2 tags</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="ac3_no_tags">
<property name="text">
<string>Do not save tags</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="remove_ape_from_ac3">
<property name="text">
<string>Remove APEv2 tags from AC3 files</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>274</width>
<height>41</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<tabstops>
<tabstop>write_id3v24</tabstop>
<tabstop>write_id3v23</tabstop>
<tabstop>enc_utf8</tabstop>
<tabstop>enc_utf16</tabstop>
<tabstop>enc_iso88591</tabstop>
<tabstop>id3v23_join_with</tabstop>
<tabstop>write_id3v1</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>