Merging with gsoc-ngs branch.

This commit is contained in:
Michael Wiencek
2011-07-11 22:34:24 -05:00
parent 7204a1e931
commit dbd3b79e6c
18 changed files with 1870 additions and 1478 deletions

View File

@@ -43,7 +43,7 @@ class Cluster(QtCore.QObject, Item):
self.lookup_queued = False self.lookup_queued = False
# Weights for different elements when comparing a cluster to a release # Weights for different elements when comparing a cluster to a release
self.comparison_weights = { 'title' : 17, 'artist' : 6, 'totaltracks' : 5, 'country': 4 } self.comparison_weights = { 'album' : 17, 'artist' : 6, 'totaltracks' : 5, 'releasecountry': 2, 'format': 2 }
def __repr__(self): def __repr__(self):
return '<Cluster %r>' % self.metadata['album'] return '<Cluster %r>' % self.metadata['album']
@@ -132,41 +132,24 @@ class Cluster(QtCore.QObject, Item):
* title = 17 * title = 17
* artist name = 6 * artist name = 6
* number of tracks = 5 * number of tracks = 5
* release country = 4 * release country = 2
* format = 2
TODO:
* prioritize official albums over compilations (optional?)
""" """
total = 0.0 total = 0.0
parts = []
a = self.metadata['album'] w = self.comparison_weights
b = release.title[0].text
total += similarity2(a, b) * self.comparison_weights['title']
a = self.metadata['artist'] a = self.metadata['artist']
b = artist_credit_from_node(release.artist_credit[0], self.config)[0] b = artist_credit_from_node(release.artist_credit[0], self.config)[0]
total += similarity2(a, b) * self.comparison_weights['artist'] parts.append((similarity2(a, b), w["artist"]))
total += w["artist"]
a = len(self.files) t, p = self.metadata.compare_to_release(release, w, self.config)
b = int(release.medium_list[0].track_count[0].text) total += t
if a > b: parts.extend(p)
score = 0.0
elif a < b:
score = 0.3
else:
score = 1.0
total += score * self.comparison_weights['totaltracks']
preferred_country = self.config.setting["preferred_release_country"] return reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
if preferred_country:
if "country" in release.children and preferred_country == release.country[0].text:
score = 1.0
else:
score = 0.0
total += score * self.comparison_weights["country"]
return total / sum(self.comparison_weights.values())
def _lookup_finished(self, document, http, error): def _lookup_finished(self, document, http, error):
self._signal_lookup_finished() self._signal_lookup_finished()

View File

@@ -43,8 +43,7 @@ from picard.util import (
format_time, format_time,
LockableObject, LockableObject,
pathcmp, pathcmp,
mimetype, mimetype
load_release_type_scores,
) )
@@ -87,6 +86,10 @@ class File(LockableObject, Item):
self.parent = None self.parent = None
self.lookup_queued = False self.lookup_queued = False
self.comparison_weights = {"title": 13, "artist": 4, "album": 5,
"length": 10, "totaltracks": 4, "releasetype": 20,
"releasecountry": 2, "format": 2}
def __repr__(self): def __repr__(self):
return '<File #%d %r>' % (self.id, self.base_filename) return '<File #%d %r>' % (self.id, self.base_filename)
@@ -440,89 +443,45 @@ class File(LockableObject, Item):
* length = 10 * length = 10
* number of tracks = 4 * number of tracks = 4
* album type = 20 * album type = 20
* release country = 4 * release country = 2
* format = 2
""" """
total = 0.0 total = 0.0
parts = [] parts = []
scores = [] w = self.comparison_weights
if 'title' in self.metadata: if 'title' in self.metadata:
a = self.metadata['title'] a = self.metadata['title']
b = track.title[0].text b = track.title[0].text
parts.append((similarity2(a, b), 13)) parts.append((similarity2(a, b), w["title"]))
total += 13 total += w["title"]
if 'artist' in self.metadata: if 'artist' in self.metadata:
a = self.metadata['artist'] a = self.metadata['artist']
b = artist_credit_from_node(track.artist_credit[0], self.config)[0] b = artist_credit_from_node(track.artist_credit[0], self.config)[0]
parts.append((similarity2(a, b), 4)) parts.append((similarity2(a, b), w["artist"]))
total += 4 total += w["artist"]
a = self.metadata.length a = self.metadata.length
if a > 0 and 'duration' in track.children: if a > 0 and 'length' in track.children:
b = int(track.duration[0].text) b = int(track.length[0].text)
score = 1.0 - min(abs(a - b), 30000) / 30000.0 score = 1.0 - min(abs(a - b), 30000) / 30000.0
parts.append((score, 10)) parts.append((score, w["length"]))
total += 10 total += w["length"]
album = totaltracks = None
if 'album' in self.metadata:
album = self.metadata['album']
if 'totaltracks' in self.metadata:
totaltracks = int(self.metadata['totaltracks'])
releases = [] releases = []
if "release_list" in track.children and "release" in track.release_list[0].children: if "release_list" in track.children and "release" in track.release_list[0].children:
releases = track.release_list[0].release releases = track.release_list[0].release
if not releases: if not releases:
return (reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0), None) return (total, None)
preferred_country = self.config.setting["preferred_release_country"]
scores = []
for release in releases: for release in releases:
total_ = total t, p = self.metadata.compare_to_release(release, w, self.config)
parts_ = list(parts) total_ = total + t
parts_ = list(parts) + p
if album:
b = release.title[0].text
parts_.append((similarity2(album, b), 5))
total_ += 5
if preferred_country:
total_ += 4
if "country" in release.children and preferred_country == release.country[0].text:
score = 1.0
else:
score = 0.0
parts_.append((score, 4))
track_list = release.medium_list[0].medium[0].track_list[0]
if totaltracks and 'count' in track_list.attribs:
try:
a = totaltracks
b = int(track_list.count)
if a > b:
score = 0.0
elif a < b:
score = 0.3
else:
score = 1.0
parts_.append((score, 4))
total_ += 4
except ValueError:
pass
type_scores = load_release_type_scores(self.config.setting["release_type_scores"])
if 'release_group' in release.children and 'type' in release.release_group[0].attribs:
release_type = release.release_group[0].type
score = type_scores.get(release_type, type_scores.get('Other', 0.5))
else:
score = 0.0
parts_.append((score, 20))
total_ += 20
scores.append((reduce(lambda x, y: x + y[0] * y[1] / total_, parts_, 0.0), release.id)) scores.append((reduce(lambda x, y: x + y[0] * y[1] / total_, parts_, 0.0), release.id))
return max(scores, key=lambda x: x[0]) return max(scores, key=lambda x: x[0])

View File

@@ -21,7 +21,7 @@ import re
import unicodedata import unicodedata
from picard.plugin import ExtensionPoint from picard.plugin import ExtensionPoint
from picard.similarity import similarity, similarity2 from picard.similarity import similarity, similarity2
from picard.util import format_time from picard.util import format_time, load_release_type_scores
class Metadata(object): class Metadata(object):
@@ -78,6 +78,71 @@ class Metadata(object):
#print "******", reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0) #print "******", reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
return reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0) return reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
def compare_to_release(self, release, weights, config):
total = 0.0
parts = []
if "album" in self:
b = release.title[0].text
parts.append((similarity2(self["album"], b), weights["album"]))
total += weights["album"]
if "totaltracks" in self:
a = int(self["totaltracks"])
if "title" in weights:
b = int(release.medium_list[0].medium[0].track_list[0].count)
else:
b = int(release.medium_list[0].track_count[0].text)
if a > b:
score = 0.0
elif a < b:
score = 0.3
else:
score = 1.0
parts.append((score, weights["totaltracks"]))
total += weights["totaltracks"]
preferred_countries = config.setting["preferred_release_countries"].split(" ")
preferred_formats = config.setting["preferred_release_formats"].split(" ")
total_countries = len(preferred_countries)
if total_countries:
score = 0.0
if "country" in release.children:
try:
i = preferred_countries.index(release.country[0].text)
score = float(total_countries - i) / float(total_countries)
except ValueError:
pass
parts.append((score, weights["releasecountry"]))
total_formats = len(preferred_formats)
if total_formats:
score = 0.0
subtotal = 0
for medium in release.medium_list[0].medium:
if "format" in medium.children:
try:
i = preferred_formats.index(medium.format[0].text)
score += float(total_formats - i) / float(total_formats)
except ValueError:
pass
subtotal += 1
if subtotal > 0: score /= subtotal
parts.append((score, weights["format"]))
if "releasetype" in weights:
type_scores = load_release_type_scores(config.setting["release_type_scores"])
if 'release_group' in release.children and 'type' in release.release_group[0].attribs:
release_type = release.release_group[0].type
score = type_scores.get(release_type, type_scores.get('Other', 0.5))
else:
score = 0.0
parts.append((score, weights["releasetype"]))
total += weights["releasetype"]
return (total, parts)
def copy(self, other): def copy(self, other):
self._items = {} self._items = {}
for key, values in other.rawitems(): for key, values in other.rawitems():

View File

@@ -20,23 +20,42 @@
from PyQt4 import QtCore from PyQt4 import QtCore
import imp import imp
import os.path import os.path
import shutil
import picard.plugins import picard.plugins
import traceback import traceback
_suffixes = [s[0] for s in imp.get_suffixes()]
_package_entries = ["__init__.py", "__init__.pyc", "__init__.pyo"]
_extension_points = []
def plugin_name_from_module(module):
name = module.__name__ def _plugin_name_from_path(path):
if name.startswith("picard.plugins"): path = os.path.normpath(path)
return name[15:] file = os.path.basename(path)
if os.path.isdir(path):
for entry in _package_entries:
if os.path.isfile(os.path.join(path, entry)):
return file
else: else:
if file in _package_entries:
return None
name, ext = os.path.splitext(file)
if ext in _suffixes:
return name
return None return None
def _unregister_module_extensions(module):
for ep in _extension_points:
ep.unregister_module(module)
class ExtensionPoint(QtCore.QObject): class ExtensionPoint(QtCore.QObject):
def __init__(self): def __init__(self):
QtCore.QObject.__init__(self) QtCore.QObject.__init__(self)
self.__items = [] self.__items = []
_extension_points.append(self)
def register(self, module, item): def register(self, module, item):
if module.startswith("picard.plugins"): if module.startswith("picard.plugins"):
@@ -45,6 +64,9 @@ class ExtensionPoint(QtCore.QObject):
module = None module = None
self.__items.append((module, item)) self.__items.append((module, item))
def unregister_module(self, name):
self.__items = filter(lambda i: i[0] != name, self.__items)
def __iter__(self): def __iter__(self):
enabled_plugins = self.config.setting["enabled_plugins"].split() enabled_plugins = self.config.setting["enabled_plugins"].split()
for module, item in self.__items: for module, item in self.__items:
@@ -56,15 +78,23 @@ class PluginWrapper(object):
def __init__(self, module, plugindir): def __init__(self, module, plugindir):
self.module = module self.module = module
self.compatible = False
self.dir = plugindir self.dir = plugindir
def __get_name(self): def __get_name(self):
try: try:
return self.module.PLUGIN_NAME return self.module.PLUGIN_NAME
except AttributeError: except AttributeError:
return self.module.__name__ return self.module_name
name = property(__get_name) name = property(__get_name)
def __get_module_name(self):
name = self.module.__name__
if name.startswith("picard.plugins"):
name = name[15:]
return name
module_name = property(__get_module_name)
def __get_author(self): def __get_author(self):
try: try:
return self.module.PLUGIN_AUTHOR return self.module.PLUGIN_AUTHOR
@@ -104,57 +134,71 @@ class PluginManager(QtCore.QObject):
QtCore.QObject.__init__(self) QtCore.QObject.__init__(self)
self.plugins = [] self.plugins = []
def load(self, plugindir): def load_plugindir(self, plugindir):
if not os.path.isdir(plugindir): if not os.path.isdir(plugindir):
self.log.debug("Plugin directory %r doesn't exist", plugindir) self.log.debug("Plugin directory %r doesn't exist", plugindir)
return return
names = set() names = set()
suffixes = [s[0] for s in imp.get_suffixes()] for path in [os.path.join(plugindir, file) for file in os.listdir(plugindir)]:
package_entries = ["__init__.py", "__init__.pyc", "__init__.pyo"] name = _plugin_name_from_path(path)
for name in os.listdir(plugindir): if name:
if name in package_entries:
continue
path = os.path.join(plugindir, name)
if os.path.isdir(path):
for entry in package_entries:
if os.path.isfile(os.path.join(path, entry)):
break
else:
continue
else:
name, suffix = os.path.splitext(name)
if suffix not in suffixes:
continue
if hasattr(picard.plugins, name):
self.log.debug("Plugin %r already loaded!", name)
else:
names.add(name) names.add(name)
for name in names: for name in names:
self.log.debug("Loading plugin %r", name) self.load_plugin(name, plugindir)
info = imp.find_module(name, [plugindir])
try: def load_plugin(self, name, plugindir):
plugin_module = imp.load_module('picard.plugins.' + name, *info) self.log.debug("Loading plugin %r", name)
plugin = PluginWrapper(plugin_module, plugindir) info = imp.find_module(name, [plugindir])
for version in list(plugin.api_versions): plugin = None
found = False try:
for api_version in picard.api_versions: index = None
if api_version.startswith(version): for i, p in enumerate(self.plugins):
setattr(picard.plugins, name, plugin_module) if name == p.module_name:
_unregister_module_extensions(name)
index = i
break
plugin_module = imp.load_module("picard.plugins." + name, *info)
plugin = PluginWrapper(plugin_module, plugindir)
for version in list(plugin.api_versions):
for api_version in picard.api_versions:
if api_version.startswith(version):
plugin.compatible = True
setattr(picard.plugins, name, plugin_module)
if index:
self.plugins[index] = plugin
else:
self.plugins.append(plugin) self.plugins.append(plugin)
found = True
break
if found:
break break
else: else:
self.log.info("Plugin '%s' from '%s' is not compatible " continue
"with this version of Picard." % break
(plugin.name, plugin.file)) else:
except: self.log.info("Plugin '%s' from '%s' is not compatible"
self.log.error(traceback.format_exc()) " with this version of Picard." % (plugin.name, plugin.file))
if info[0] is not None: except:
info[0].close() self.log.error(traceback.format_exc())
if info[0] is not None:
info[0].close()
return plugin
def install_plugin(self, path, dest):
plugin_name = _plugin_name_from_path(path)
plugin_dir = self.tagger.user_plugin_dir
if plugin_name:
try:
dest_exists = os.path.exists(dest)
same_file = os.path.samefile(path, dest) if dest_exists else False
if os.path.isfile(path) and not (dest_exists and same_file):
shutil.copy(path, dest)
elif os.path.isdir(path) and not same_file:
if dest_exists:
shutil.rmtree(dest)
shutil.copytree(path, dest)
plugin = self.load_plugin(plugin_name, plugin_dir)
if plugin is not None:
self.emit(QtCore.SIGNAL("plugin_installed"), plugin, False)
except OSError, IOError:
self.tagger.log.debug("Unable to copy %s to plugin folder %s" % (path, plugin_dir))
def enabled(self, name): def enabled(self, name):
return True return True

View File

@@ -185,14 +185,14 @@ class Tagger(QtGui.QApplication):
# Load plugins # Load plugins
self.pluginmanager = PluginManager() self.pluginmanager = PluginManager()
user_plugin_dir = os.path.join(self.userdir, "plugins") self.user_plugin_dir = os.path.join(self.userdir, "plugins")
if not os.path.exists(user_plugin_dir): if not os.path.exists(self.user_plugin_dir):
os.makedirs(user_plugin_dir) os.makedirs(self.user_plugin_dir)
self.pluginmanager.load(user_plugin_dir) self.pluginmanager.load_plugindir(self.user_plugin_dir)
if hasattr(sys, "frozen"): if hasattr(sys, "frozen"):
self.pluginmanager.load(os.path.join(os.path.dirname(sys.argv[0]), "plugins")) self.pluginmanager.load_plugindir(os.path.join(os.path.dirname(sys.argv[0]), "plugins"))
else: else:
self.pluginmanager.load(os.path.join(os.path.dirname(__file__), "plugins")) self.pluginmanager.load_plugindir(os.path.join(os.path.dirname(__file__), "plugins"))
self.puidmanager = PUIDManager() self.puidmanager = PUIDManager()

View File

@@ -33,6 +33,7 @@ from picard.ui.options import (
ratings, ratings,
matching, matching,
metadata, metadata,
releases,
moving, moving,
renaming, renaming,
plugins, plugins,

View File

@@ -19,7 +19,6 @@
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from picard.config import FloatOption, TextOption from picard.config import FloatOption, TextOption
from picard.util import load_release_type_scores, save_release_type_scores
from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page
from picard.ui.ui_options_matching import Ui_MatchingOptionsPage from picard.ui.ui_options_matching import Ui_MatchingOptionsPage
@@ -36,7 +35,6 @@ class MatchingOptionsPage(OptionsPage):
FloatOption("setting", "file_lookup_threshold", 0.7), FloatOption("setting", "file_lookup_threshold", 0.7),
FloatOption("setting", "cluster_lookup_threshold", 0.8), FloatOption("setting", "cluster_lookup_threshold", 0.8),
FloatOption("setting", "track_matching_threshold", 0.4), FloatOption("setting", "track_matching_threshold", 0.4),
TextOption("setting", "release_type_scores", "Album 0.5 Single 0.5 EP 0.5 Compilation 0.5 Soundtrack 0.5 Spokenword 0.5 Interview 0.5 Audiobook 0.5 Live 0.5 Remix 0.5 Other 0.5"),
] ]
_release_type_sliders = {} _release_type_sliders = {}
@@ -45,39 +43,16 @@ class MatchingOptionsPage(OptionsPage):
super(MatchingOptionsPage, self).__init__(parent) super(MatchingOptionsPage, self).__init__(parent)
self.ui = Ui_MatchingOptionsPage() self.ui = Ui_MatchingOptionsPage()
self.ui.setupUi(self) self.ui.setupUi(self)
self.connect(self.ui.reset_preferred_types_btn, QtCore.SIGNAL("clicked()"), self.reset_preferred_types)
self._release_type_sliders["Album"] = self.ui.prefer_album_score
self._release_type_sliders["Single"] = self.ui.prefer_single_score
self._release_type_sliders["EP"] = self.ui.prefer_ep_score
self._release_type_sliders["Compilation"] = self.ui.prefer_compilation_score
self._release_type_sliders["Soundtrack"] = self.ui.prefer_soundtrack_score
self._release_type_sliders["Spokenword"] = self.ui.prefer_spokenword_score
self._release_type_sliders["Interview"] = self.ui.prefer_interview_score
self._release_type_sliders["Audiobook"] = self.ui.prefer_audiobook_score
self._release_type_sliders["Live"] = self.ui.prefer_live_score
self._release_type_sliders["Remix"] = self.ui.prefer_remix_score
self._release_type_sliders["Other"] = self.ui.prefer_other_score
def load(self): def load(self):
self.ui.file_lookup_threshold.setValue(int(self.config.setting["file_lookup_threshold"] * 100)) self.ui.file_lookup_threshold.setValue(int(self.config.setting["file_lookup_threshold"] * 100))
self.ui.cluster_lookup_threshold.setValue(int(self.config.setting["cluster_lookup_threshold"] * 100)) self.ui.cluster_lookup_threshold.setValue(int(self.config.setting["cluster_lookup_threshold"] * 100))
self.ui.track_matching_threshold.setValue(int(self.config.setting["track_matching_threshold"] * 100)) self.ui.track_matching_threshold.setValue(int(self.config.setting["track_matching_threshold"] * 100))
scores = load_release_type_scores(self.config.setting["release_type_scores"])
for (release_type, release_type_slider) in self._release_type_sliders.iteritems():
release_type_slider.setValue(int(scores.get(release_type, 0.5) * 100))
def save(self): def save(self):
self.config.setting["file_lookup_threshold"] = float(self.ui.file_lookup_threshold.value()) / 100.0 self.config.setting["file_lookup_threshold"] = float(self.ui.file_lookup_threshold.value()) / 100.0
self.config.setting["cluster_lookup_threshold"] = float(self.ui.cluster_lookup_threshold.value()) / 100.0 self.config.setting["cluster_lookup_threshold"] = float(self.ui.cluster_lookup_threshold.value()) / 100.0
self.config.setting["track_matching_threshold"] = float(self.ui.track_matching_threshold.value()) / 100.0 self.config.setting["track_matching_threshold"] = float(self.ui.track_matching_threshold.value()) / 100.0
scores = {}
for (release_type, release_type_slider) in self._release_type_sliders.iteritems():
scores[release_type] = float(release_type_slider.value()) / 100.0
self.config.setting["release_type_scores"] = save_release_type_scores(scores)
def reset_preferred_types(self):
for release_type_slider in self._release_type_sliders.values():
release_type_slider.setValue(50)
register_options_page(MatchingOptionsPage) register_options_page(MatchingOptionsPage)

View File

@@ -21,9 +21,6 @@ from PyQt4 import QtCore, QtGui
from picard.config import BoolOption, TextOption from picard.config import BoolOption, TextOption
from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page
from picard.ui.ui_options_metadata import Ui_MetadataOptionsPage from picard.ui.ui_options_metadata import Ui_MetadataOptionsPage
from picard.const import RELEASE_COUNTRIES
import operator
import locale
class MetadataOptionsPage(OptionsPage): class MetadataOptionsPage(OptionsPage):
@@ -41,7 +38,6 @@ class MetadataOptionsPage(OptionsPage):
BoolOption("setting", "release_ars", True), BoolOption("setting", "release_ars", True),
BoolOption("setting", "track_ars", False), BoolOption("setting", "track_ars", False),
BoolOption("setting", "folksonomy_tags", False), BoolOption("setting", "folksonomy_tags", False),
TextOption("setting", "preferred_release_country", u""),
BoolOption("setting", "convert_punctuation", False), BoolOption("setting", "convert_punctuation", False),
BoolOption("setting", "standardize_tracks", False), BoolOption("setting", "standardize_tracks", False),
BoolOption("setting", "standardize_releases", False), BoolOption("setting", "standardize_releases", False),
@@ -55,19 +51,12 @@ class MetadataOptionsPage(OptionsPage):
self.connect(self.ui.va_name_default, QtCore.SIGNAL("clicked()"), self.set_va_name_default) self.connect(self.ui.va_name_default, QtCore.SIGNAL("clicked()"), self.set_va_name_default)
self.connect(self.ui.nat_name_default, QtCore.SIGNAL("clicked()"), self.set_nat_name_default) self.connect(self.ui.nat_name_default, QtCore.SIGNAL("clicked()"), self.set_nat_name_default)
self.ui.preferred_release_country.addItem(_("None"), QtCore.QVariant(""))
country_list = [(c[0], _(c[1])) for c in RELEASE_COUNTRIES.items()]
for country, name in sorted(country_list, key=operator.itemgetter(1), cmp=locale.strcoll):
self.ui.preferred_release_country.addItem(name, QtCore.QVariant(country))
def load(self): def load(self):
self.ui.translate_artist_names.setChecked(self.config.setting["translate_artist_names"]) self.ui.translate_artist_names.setChecked(self.config.setting["translate_artist_names"])
self.ui.convert_punctuation.setChecked(self.config.setting["convert_punctuation"]) self.ui.convert_punctuation.setChecked(self.config.setting["convert_punctuation"])
self.ui.release_ars.setChecked(self.config.setting["release_ars"]) self.ui.release_ars.setChecked(self.config.setting["release_ars"])
self.ui.track_ars.setChecked(self.config.setting["track_ars"]) self.ui.track_ars.setChecked(self.config.setting["track_ars"])
self.ui.folksonomy_tags.setChecked(self.config.setting["folksonomy_tags"]) self.ui.folksonomy_tags.setChecked(self.config.setting["folksonomy_tags"])
current_release_country = QtCore.QVariant(self.config.setting["preferred_release_country"])
self.ui.preferred_release_country.setCurrentIndex(self.ui.preferred_release_country.findData(current_release_country))
self.ui.va_name.setText(self.config.setting["va_name"]) self.ui.va_name.setText(self.config.setting["va_name"])
self.ui.nat_name.setText(self.config.setting["nat_name"]) self.ui.nat_name.setText(self.config.setting["nat_name"])
self.ui.standardize_tracks.setChecked(self.config.setting["standardize_tracks"]) self.ui.standardize_tracks.setChecked(self.config.setting["standardize_tracks"])
@@ -80,7 +69,6 @@ class MetadataOptionsPage(OptionsPage):
self.config.setting["release_ars"] = self.ui.release_ars.isChecked() self.config.setting["release_ars"] = self.ui.release_ars.isChecked()
self.config.setting["track_ars"] = self.ui.track_ars.isChecked() self.config.setting["track_ars"] = self.ui.track_ars.isChecked()
self.config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked() self.config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked()
self.config.setting["preferred_release_country"] = self.ui.preferred_release_country.itemData(self.ui.preferred_release_country.currentIndex()).toString()
self.config.setting["va_name"] = self.ui.va_name.text() self.config.setting["va_name"] = self.ui.va_name.text()
self.config.setting["nat_name"] = self.ui.nat_name.text() self.config.setting["nat_name"] = self.ui.nat_name.text()
self.config.setting["standardize_tracks"] = self.ui.standardize_tracks.isChecked() self.config.setting["standardize_tracks"] = self.ui.standardize_tracks.isChecked()

View File

@@ -22,7 +22,7 @@ import os.path
import sys import sys
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from picard.config import TextOption from picard.config import TextOption
from picard.plugin import plugin_name_from_module from picard.util import encode_filename
from picard.ui.options import OptionsPage, register_options_page from picard.ui.options import OptionsPage, register_options_page
from picard.ui.ui_options_plugins import Ui_PluginsOptionsPage from picard.ui.ui_options_plugins import Ui_PluginsOptionsPage
@@ -47,40 +47,65 @@ class PluginsOptionsPage(OptionsPage):
super(PluginsOptionsPage, self).__init__(parent) super(PluginsOptionsPage, self).__init__(parent)
self.ui = Ui_PluginsOptionsPage() self.ui = Ui_PluginsOptionsPage()
self.ui.setupUi(self) self.ui.setupUi(self)
self.items = {}
self.connect(self.ui.plugins, QtCore.SIGNAL("itemSelectionChanged()"), self.change_details) self.connect(self.ui.plugins, QtCore.SIGNAL("itemSelectionChanged()"), self.change_details)
self.user_plugin_dir = os.path.join(self.tagger.userdir, "plugins") self.ui.plugins.__class__.mimeTypes = self.mimeTypes
self.ui.plugins.__class__.dropEvent = self.dropEvent
if sys.platform == "win32": if sys.platform == "win32":
self.loader="file:///%s" self.loader="file:///%s"
else: else:
self.loader="file://%s" self.loader="file://%s"
self.connect(self.ui.install_plugin, QtCore.SIGNAL("clicked()"), self.open_plugins)
self.connect(self.ui.folder_open, QtCore.SIGNAL("clicked()"), self.open_plugin_dir) self.connect(self.ui.folder_open, QtCore.SIGNAL("clicked()"), self.open_plugin_dir)
self.connect(self.ui.plugin_download, QtCore.SIGNAL("clicked()"), self.open_plugin_site) self.connect(self.ui.plugin_download, QtCore.SIGNAL("clicked()"), self.open_plugin_site)
self.connect(self.tagger.pluginmanager, QtCore.SIGNAL("plugin_installed"), self.plugin_installed)
def load(self): def load(self):
plugins = sorted(self.tagger.pluginmanager.plugins, cmp=cmp_plugins) plugins = sorted(self.tagger.pluginmanager.plugins, cmp=cmp_plugins)
enabled_plugins = self.config.setting["enabled_plugins"].split() enabled_plugins = self.config.setting["enabled_plugins"].split()
self.items = {}
firstitem = None firstitem = None
for plugin in plugins: for plugin in plugins:
item = QtGui.QTreeWidgetItem(self.ui.plugins) enabled = plugin.module_name in enabled_plugins
item.setText(0, plugin.name) item = self.add_plugin_item(plugin, enabled=enabled)
if plugin_name_from_module(plugin.module) in enabled_plugins:
item.setCheckState(0, QtCore.Qt.Checked)
else:
item.setCheckState(0, QtCore.Qt.Unchecked)
item.setText(1, plugin.version)
item.setText(2, plugin.author)
if not firstitem: if not firstitem:
firstitem = item firstitem = item
self.items[item] = plugin
self.ui.plugins.header().resizeSections(QtGui.QHeaderView.ResizeToContents)
self.ui.plugins.setCurrentItem(firstitem) self.ui.plugins.setCurrentItem(firstitem)
def plugin_installed(self, plugin):
if not plugin.compatible:
msgbox = QtGui.QMessageBox(self)
msgbox.setText(u"The plugin %s is not compatible with this version of Picard." % plugin.name)
msgbox.setStandardButtons(QtGui.QMessageBox.Ok)
msgbox.setDefaultButton(QtGui.QMessageBox.Ok)
msgbox.exec_()
return
for i, p in self.items.items():
if plugin.module_name == p.module_name:
enabled = i.checkState(0) == QtCore.Qt.Checked
self.add_plugin_item(plugin, enabled=enabled, item=i)
break
else:
self.add_plugin_item(plugin)
def add_plugin_item(self, plugin, enabled=False, item=None):
if item is None:
item = QtGui.QTreeWidgetItem(self.ui.plugins)
item.setText(0, plugin.name)
if enabled:
item.setCheckState(0, QtCore.Qt.Checked)
else:
item.setCheckState(0, QtCore.Qt.Unchecked)
item.setText(1, plugin.version)
item.setText(2, plugin.author)
self.ui.plugins.header().resizeSections(QtGui.QHeaderView.ResizeToContents)
self.items[item] = plugin
return item
def save(self): def save(self):
enabled_plugins = [] enabled_plugins = []
for item, plugin in self.items.iteritems(): for item, plugin in self.items.iteritems():
if item.checkState(0) == QtCore.Qt.Checked: if item.checkState(0) == QtCore.Qt.Checked:
enabled_plugins.append(plugin_name_from_module(plugin.module)) enabled_plugins.append(plugin.module_name)
self.config.setting["enabled_plugins"] = " ".join(enabled_plugins) self.config.setting["enabled_plugins"] = " ".join(enabled_plugins)
def change_details(self): def change_details(self):
@@ -99,11 +124,39 @@ class PluginsOptionsPage(OptionsPage):
text.append("<b>" + _("File") + "</b>: " + plugin.file[len(plugin.dir)+1:]) text.append("<b>" + _("File") + "</b>: " + plugin.file[len(plugin.dir)+1:])
self.ui.details.setText("<p>%s</p>" % "<br/>\n".join(text)) self.ui.details.setText("<p>%s</p>" % "<br/>\n".join(text))
def open_plugins(self):
files = QtGui.QFileDialog.getOpenFileNames(self, "", "/", "Picard plugin (*.py *.pyc)")
if files:
files = map(unicode, files)
for path in files:
self.install_plugin(path)
def install_plugin(self, path):
path = encode_filename(path)
file = os.path.basename(path)
dest = os.path.join(self.tagger.user_plugin_dir, file)
if os.path.exists(dest):
msgbox = QtGui.QMessageBox(self)
msgbox.setText("A plugin named %s is already installed." % file)
msgbox.setInformativeText("Do you want to overwrite the existing plugin?")
msgbox.setStandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
msgbox.setDefaultButton(QtGui.QMessageBox.No)
if msgbox.exec_() == QtGui.QMessageBox.No:
return
self.tagger.pluginmanager.install_plugin(path, dest)
def open_plugin_dir(self): def open_plugin_dir(self):
QtGui.QDesktopServices.openUrl(QtCore.QUrl(self.loader % self.user_plugin_dir, QtCore.QUrl.TolerantMode)) QtGui.QDesktopServices.openUrl(QtCore.QUrl(self.loader % self.tagger.user_plugin_dir, QtCore.QUrl.TolerantMode))
def open_plugin_site(self): def open_plugin_site(self):
QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://musicbrainz.org/doc/Picard_Plugins", QtCore.QUrl.TolerantMode)) QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://musicbrainz.org/doc/Picard_Plugins", QtCore.QUrl.TolerantMode))
def mimeTypes(self):
return ["text/uri-list"]
def dropEvent(self, event):
for path in [os.path.normpath(unicode(u.toLocalFile())) for u in event.mimeData().urls()]:
self.install_plugin(path)
register_options_page(PluginsOptionsPage) register_options_page(PluginsOptionsPage)

View File

@@ -0,0 +1,140 @@
# -*- 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 operator import itemgetter
from locale import strcoll
from PyQt4 import QtCore, QtGui
from picard.config import TextOption
from picard.util import load_release_type_scores, save_release_type_scores
from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page
from picard.ui.ui_options_releases import Ui_ReleasesOptionsPage
from picard.const import RELEASE_COUNTRIES, RELEASE_FORMATS
class ReleasesOptionsPage(OptionsPage):
NAME = "releases"
TITLE = N_("Preferred Releases")
PARENT = "metadata"
SORT_ORDER = 10
ACTIVE = True
options = [
TextOption("setting", "release_type_scores", "Album 0.5 Single 0.5 EP 0.5 Compilation 0.5 Soundtrack 0.5 Spokenword 0.5 Interview 0.5 Audiobook 0.5 Live 0.5 Remix 0.5 Other 0.5"),
TextOption("setting", "preferred_release_countries", u""),
TextOption("setting", "preferred_release_formats", u""),
]
_release_type_sliders = {}
def __init__(self, parent=None):
super(ReleasesOptionsPage, self).__init__(parent)
self.ui = Ui_ReleasesOptionsPage()
self.ui.setupUi(self)
self.connect(self.ui.reset_preferred_types_btn, QtCore.SIGNAL("clicked()"), self.reset_preferred_types)
self._release_type_sliders["Album"] = self.ui.prefer_album_score
self._release_type_sliders["Single"] = self.ui.prefer_single_score
self._release_type_sliders["EP"] = self.ui.prefer_ep_score
self._release_type_sliders["Compilation"] = self.ui.prefer_compilation_score
self._release_type_sliders["Soundtrack"] = self.ui.prefer_soundtrack_score
self._release_type_sliders["Spokenword"] = self.ui.prefer_spokenword_score
self._release_type_sliders["Interview"] = self.ui.prefer_interview_score
self._release_type_sliders["Audiobook"] = self.ui.prefer_audiobook_score
self._release_type_sliders["Live"] = self.ui.prefer_live_score
self._release_type_sliders["Remix"] = self.ui.prefer_remix_score
self._release_type_sliders["Other"] = self.ui.prefer_other_score
self.connect(self.ui.add_countries, QtCore.SIGNAL("clicked()"), self.add_preferred_countries)
self.connect(self.ui.remove_countries, QtCore.SIGNAL("clicked()"), self.remove_preferred_countries)
self.connect(self.ui.add_formats, QtCore.SIGNAL("clicked()"), self.add_preferred_formats)
self.connect(self.ui.remove_formats, QtCore.SIGNAL("clicked()"), self.remove_preferred_formats)
self.ui.country_list.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.ui.preferred_country_list.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.ui.format_list.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.ui.preferred_format_list.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
def load(self):
scores = load_release_type_scores(self.config.setting["release_type_scores"])
for (release_type, release_type_slider) in self._release_type_sliders.iteritems():
release_type_slider.setValue(int(scores.get(release_type, 0.5) * 100))
self._load_list_items("preferred_release_countries", RELEASE_COUNTRIES,
self.ui.country_list, self.ui.preferred_country_list)
self._load_list_items("preferred_release_formats", RELEASE_FORMATS,
self.ui.format_list, self.ui.preferred_format_list)
def save(self):
scores = {}
for (release_type, release_type_slider) in self._release_type_sliders.iteritems():
scores[release_type] = float(release_type_slider.value()) / 100.0
self.config.setting["release_type_scores"] = save_release_type_scores(scores)
self._save_list_items("preferred_release_countries", self.ui.preferred_country_list)
self._save_list_items("preferred_release_formats", self.ui.preferred_format_list)
def reset_preferred_types(self):
for release_type_slider in self._release_type_sliders.values():
release_type_slider.setValue(50)
def add_preferred_countries(self):
self._move_selected_items(self.ui.country_list, self.ui.preferred_country_list)
def remove_preferred_countries(self):
self._move_selected_items(self.ui.preferred_country_list, self.ui.country_list)
self.ui.country_list.sortItems()
def add_preferred_formats(self):
self._move_selected_items(self.ui.format_list, self.ui.preferred_format_list)
def remove_preferred_formats(self):
self._move_selected_items(self.ui.preferred_format_list, self.ui.format_list)
self.ui.format_list.sortItems()
def _move_selected_items(self, list1, list2):
for item in list1.selectedItems():
clone = item.clone()
list2.addItem(clone)
list1.takeItem(list1.row(item))
def _load_list_items(self, setting, source, list1, list2):
source_list = [(c[0], c[1]) for c in source.items()]
source_list.sort(key=itemgetter(1), cmp=strcoll)
saved_data = self.config.setting[setting].split(" ")
move = []
for data, name in source_list:
item = QtGui.QListWidgetItem(name)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
try:
i = saved_data.index(data)
move.append((i, item))
except:
list1.addItem(item)
move.sort(key=itemgetter(0))
for i, item in move:
list2.addItem(item)
def _save_list_items(self, setting, list1):
data = []
for i in range(list1.count()):
item = list1.item(i)
data.append(unicode(item.data(QtCore.Qt.UserRole).toString()))
self.config.setting[setting] = " ".join(data)
register_options_page(ReleasesOptionsPage)

View File

@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_matching.ui' # Form implementation generated from reading ui file 'ui/options_matching.ui'
# #
# Created: Thu May 12 23:52:13 2011 # Created: Tue Jun 21 15:31:51 2011
# by: PyQt4 UI code generator 4.7.2 # by: PyQt4 UI code generator 4.8.4
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
@@ -12,21 +12,16 @@ from PyQt4 import QtCore, QtGui
class Ui_MatchingOptionsPage(object): class Ui_MatchingOptionsPage(object):
def setupUi(self, MatchingOptionsPage): def setupUi(self, MatchingOptionsPage):
MatchingOptionsPage.setObjectName("MatchingOptionsPage") MatchingOptionsPage.setObjectName("MatchingOptionsPage")
MatchingOptionsPage.resize(382, 498) MatchingOptionsPage.resize(413, 612)
self.vboxlayout = QtGui.QVBoxLayout(MatchingOptionsPage) self.vboxlayout = QtGui.QVBoxLayout(MatchingOptionsPage)
self.vboxlayout.setSpacing(6)
self.vboxlayout.setMargin(9)
self.vboxlayout.setObjectName("vboxlayout") self.vboxlayout.setObjectName("vboxlayout")
self.rename_files = QtGui.QGroupBox(MatchingOptionsPage) self.rename_files = QtGui.QGroupBox(MatchingOptionsPage)
self.rename_files.setObjectName("rename_files") self.rename_files.setObjectName("rename_files")
self.gridlayout = QtGui.QGridLayout(self.rename_files) self.gridlayout = QtGui.QGridLayout(self.rename_files)
self.gridlayout.setMargin(9)
self.gridlayout.setSpacing(2) self.gridlayout.setSpacing(2)
self.gridlayout.setObjectName("gridlayout") self.gridlayout.setObjectName("gridlayout")
self.label_6 = QtGui.QLabel(self.rename_files) self.label_6 = QtGui.QLabel(self.rename_files)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth())
self.label_6.setSizePolicy(sizePolicy) self.label_6.setSizePolicy(sizePolicy)
self.label_6.setObjectName("label_6") self.label_6.setObjectName("label_6")
@@ -45,140 +40,19 @@ class Ui_MatchingOptionsPage(object):
self.gridlayout.addWidget(self.file_lookup_threshold, 0, 1, 1, 1) self.gridlayout.addWidget(self.file_lookup_threshold, 0, 1, 1, 1)
self.label_4 = QtGui.QLabel(self.rename_files) self.label_4 = QtGui.QLabel(self.rename_files)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
self.label_4.setSizePolicy(sizePolicy) self.label_4.setSizePolicy(sizePolicy)
self.label_4.setObjectName("label_4") self.label_4.setObjectName("label_4")
self.gridlayout.addWidget(self.label_4, 0, 0, 1, 1) self.gridlayout.addWidget(self.label_4, 0, 0, 1, 1)
self.label_5 = QtGui.QLabel(self.rename_files) self.label_5 = QtGui.QLabel(self.rename_files)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth())
self.label_5.setSizePolicy(sizePolicy) self.label_5.setSizePolicy(sizePolicy)
self.label_5.setObjectName("label_5") self.label_5.setObjectName("label_5")
self.gridlayout.addWidget(self.label_5, 1, 0, 1, 1) self.gridlayout.addWidget(self.label_5, 1, 0, 1, 1)
self.vboxlayout.addWidget(self.rename_files) self.vboxlayout.addWidget(self.rename_files)
self.groupBox = QtGui.QGroupBox(MatchingOptionsPage) spacerItem = QtGui.QSpacerItem(20, 41, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.groupBox.setObjectName("groupBox") self.vboxlayout.addItem(spacerItem)
self.gridLayout = QtGui.QGridLayout(self.groupBox)
self.gridLayout.setObjectName("gridLayout")
self.prefer_album_score = QtGui.QSlider(self.groupBox)
self.prefer_album_score.setMaximum(100)
self.prefer_album_score.setProperty("value", 50)
self.prefer_album_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_album_score.setObjectName("prefer_album_score")
self.gridLayout.addWidget(self.prefer_album_score, 0, 2, 1, 1)
self.prefer_single_score = QtGui.QSlider(self.groupBox)
self.prefer_single_score.setMaximum(100)
self.prefer_single_score.setProperty("value", 50)
self.prefer_single_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_single_score.setObjectName("prefer_single_score")
self.gridLayout.addWidget(self.prefer_single_score, 1, 2, 1, 1)
self.label = QtGui.QLabel(self.groupBox)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtGui.QLabel(self.groupBox)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.prefer_ep_score = QtGui.QSlider(self.groupBox)
self.prefer_ep_score.setMaximum(100)
self.prefer_ep_score.setProperty("value", 50)
self.prefer_ep_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_ep_score.setObjectName("prefer_ep_score")
self.gridLayout.addWidget(self.prefer_ep_score, 2, 2, 1, 1)
self.prefer_compilation_score = QtGui.QSlider(self.groupBox)
self.prefer_compilation_score.setMaximum(100)
self.prefer_compilation_score.setProperty("value", 50)
self.prefer_compilation_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_compilation_score.setObjectName("prefer_compilation_score")
self.gridLayout.addWidget(self.prefer_compilation_score, 3, 2, 1, 1)
self.prefer_soundtrack_score = QtGui.QSlider(self.groupBox)
self.prefer_soundtrack_score.setMaximum(100)
self.prefer_soundtrack_score.setProperty("value", 50)
self.prefer_soundtrack_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_soundtrack_score.setObjectName("prefer_soundtrack_score")
self.gridLayout.addWidget(self.prefer_soundtrack_score, 4, 2, 1, 1)
self.prefer_spokenword_score = QtGui.QSlider(self.groupBox)
self.prefer_spokenword_score.setMaximum(100)
self.prefer_spokenword_score.setProperty("value", 50)
self.prefer_spokenword_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_spokenword_score.setObjectName("prefer_spokenword_score")
self.gridLayout.addWidget(self.prefer_spokenword_score, 5, 2, 1, 1)
self.label_3 = QtGui.QLabel(self.groupBox)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.label_7 = QtGui.QLabel(self.groupBox)
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 3, 0, 1, 1)
self.label_8 = QtGui.QLabel(self.groupBox)
self.label_8.setObjectName("label_8")
self.gridLayout.addWidget(self.label_8, 4, 0, 1, 1)
self.label_9 = QtGui.QLabel(self.groupBox)
self.label_9.setObjectName("label_9")
self.gridLayout.addWidget(self.label_9, 5, 0, 1, 1)
self.prefer_interview_score = QtGui.QSlider(self.groupBox)
self.prefer_interview_score.setMaximum(100)
self.prefer_interview_score.setProperty("value", 50)
self.prefer_interview_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_interview_score.setObjectName("prefer_interview_score")
self.gridLayout.addWidget(self.prefer_interview_score, 6, 2, 1, 1)
self.prefer_audiobook_score = QtGui.QSlider(self.groupBox)
self.prefer_audiobook_score.setMaximum(100)
self.prefer_audiobook_score.setProperty("value", 50)
self.prefer_audiobook_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_audiobook_score.setObjectName("prefer_audiobook_score")
self.gridLayout.addWidget(self.prefer_audiobook_score, 7, 2, 1, 1)
self.prefer_live_score = QtGui.QSlider(self.groupBox)
self.prefer_live_score.setMaximum(100)
self.prefer_live_score.setProperty("value", 50)
self.prefer_live_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_live_score.setObjectName("prefer_live_score")
self.gridLayout.addWidget(self.prefer_live_score, 8, 2, 1, 1)
self.label_10 = QtGui.QLabel(self.groupBox)
self.label_10.setObjectName("label_10")
self.gridLayout.addWidget(self.label_10, 6, 0, 1, 1)
self.label_11 = QtGui.QLabel(self.groupBox)
self.label_11.setObjectName("label_11")
self.gridLayout.addWidget(self.label_11, 7, 0, 1, 1)
self.label_12 = QtGui.QLabel(self.groupBox)
self.label_12.setObjectName("label_12")
self.gridLayout.addWidget(self.label_12, 8, 0, 1, 1)
self.prefer_remix_score = QtGui.QSlider(self.groupBox)
self.prefer_remix_score.setMaximum(100)
self.prefer_remix_score.setProperty("value", 50)
self.prefer_remix_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_remix_score.setObjectName("prefer_remix_score")
self.gridLayout.addWidget(self.prefer_remix_score, 9, 2, 1, 1)
self.label_13 = QtGui.QLabel(self.groupBox)
self.label_13.setObjectName("label_13")
self.gridLayout.addWidget(self.label_13, 9, 0, 1, 1)
self.prefer_other_score = QtGui.QSlider(self.groupBox)
self.prefer_other_score.setMaximum(100)
self.prefer_other_score.setSliderPosition(50)
self.prefer_other_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_other_score.setObjectName("prefer_other_score")
self.gridLayout.addWidget(self.prefer_other_score, 10, 2, 1, 1)
self.label_14 = QtGui.QLabel(self.groupBox)
self.label_14.setObjectName("label_14")
self.gridLayout.addWidget(self.label_14, 10, 0, 1, 1)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.reset_preferred_types_btn = QtGui.QPushButton(self.groupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.reset_preferred_types_btn.sizePolicy().hasHeightForWidth())
self.reset_preferred_types_btn.setSizePolicy(sizePolicy)
self.reset_preferred_types_btn.setObjectName("reset_preferred_types_btn")
self.horizontalLayout.addWidget(self.reset_preferred_types_btn)
self.gridLayout.addLayout(self.horizontalLayout, 12, 2, 1, 1)
self.vboxlayout.addWidget(self.groupBox)
spacerItem1 = QtGui.QSpacerItem(20, 41, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem1)
self.label_6.setBuddy(self.file_lookup_threshold) self.label_6.setBuddy(self.file_lookup_threshold)
self.label_4.setBuddy(self.file_lookup_threshold) self.label_4.setBuddy(self.file_lookup_threshold)
self.label_5.setBuddy(self.file_lookup_threshold) self.label_5.setBuddy(self.file_lookup_threshold)
@@ -191,22 +65,9 @@ class Ui_MatchingOptionsPage(object):
def retranslateUi(self, MatchingOptionsPage): def retranslateUi(self, MatchingOptionsPage):
self.rename_files.setTitle(_("Thresholds")) self.rename_files.setTitle(_("Thresholds"))
self.label_6.setText(_("Minimal similarity for matching files to tracks:")) self.label_6.setText(_("Minimal similarity for matching files to tracks:"))
self.track_matching_threshold.setSuffix(_(" %")) self.track_matching_threshold.setSuffix(" %")
self.cluster_lookup_threshold.setSuffix(_(" %")) self.cluster_lookup_threshold.setSuffix(" %")
self.file_lookup_threshold.setSuffix(_(" %")) self.file_lookup_threshold.setSuffix(" %")
self.label_4.setText(_("Minimal similarity for file lookups:")) self.label_4.setText(_("Minimal similarity for file lookups:"))
self.label_5.setText(_("Minimal similarity for cluster lookups:")) self.label_5.setText(_("Minimal similarity for cluster lookups:"))
self.groupBox.setTitle(_("Preferred release types"))
self.label.setText(_("Album"))
self.label_2.setText(_("Single"))
self.label_3.setText(_("EP"))
self.label_7.setText(_("Compilation"))
self.label_8.setText(_("Soundtrack"))
self.label_9.setText(_("Spokenword"))
self.label_10.setText(_("Interview"))
self.label_11.setText(_("Audiobook"))
self.label_12.setText(_("Live"))
self.label_13.setText(_("Remix"))
self.label_14.setText(_("Other"))
self.reset_preferred_types_btn.setText(_("Reset all"))

View File

@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui/options_metadata.ui' # Form implementation generated from reading ui file 'ui/options_metadata.ui'
# #
# Created: Fri Jun 17 15:22:22 2011 # Created: Tue Jun 21 17:09:36 2011
# by: PyQt4 UI code generator 4.8.4 # by: PyQt4 UI code generator 4.8.4
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
@@ -14,17 +14,9 @@ class Ui_MetadataOptionsPage(object):
MetadataOptionsPage.setObjectName("MetadataOptionsPage") MetadataOptionsPage.setObjectName("MetadataOptionsPage")
MetadataOptionsPage.resize(423, 553) MetadataOptionsPage.resize(423, 553)
self.verticalLayout = QtGui.QVBoxLayout(MetadataOptionsPage) self.verticalLayout = QtGui.QVBoxLayout(MetadataOptionsPage)
self.verticalLayout.setContentsMargins(-1, 0, -1, -1)
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setObjectName("verticalLayout")
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setSpacing(0)
self.verticalLayout_2.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
self.verticalLayout_2.setContentsMargins(-1, 0, -1, -1)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.rename_files = QtGui.QGroupBox(MetadataOptionsPage) self.rename_files = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.rename_files.sizePolicy().hasHeightForWidth())
self.rename_files.setSizePolicy(sizePolicy) self.rename_files.setSizePolicy(sizePolicy)
self.rename_files.setMinimumSize(QtCore.QSize(397, 135)) self.rename_files.setMinimumSize(QtCore.QSize(397, 135))
@@ -49,38 +41,18 @@ class Ui_MetadataOptionsPage(object):
self.folksonomy_tags = QtGui.QCheckBox(self.rename_files) self.folksonomy_tags = QtGui.QCheckBox(self.rename_files)
self.folksonomy_tags.setObjectName("folksonomy_tags") self.folksonomy_tags.setObjectName("folksonomy_tags")
self.verticalLayout_3.addWidget(self.folksonomy_tags) self.verticalLayout_3.addWidget(self.folksonomy_tags)
self.label_8 = QtGui.QLabel(self.rename_files) self.verticalLayout.addWidget(self.rename_files)
self.label_8.setObjectName("label_8")
self.verticalLayout_3.addWidget(self.label_8)
self.preferred_release_country = QtGui.QComboBox(self.rename_files)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.preferred_release_country.sizePolicy().hasHeightForWidth())
self.preferred_release_country.setSizePolicy(sizePolicy)
self.preferred_release_country.setMaximumSize(QtCore.QSize(373, 16777215))
self.preferred_release_country.setObjectName("preferred_release_country")
self.verticalLayout_3.addWidget(self.preferred_release_country)
self.verticalLayout_2.addWidget(self.rename_files)
self.rename_files_2 = QtGui.QGroupBox(MetadataOptionsPage) self.rename_files_2 = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files_2.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.rename_files_2.sizePolicy().hasHeightForWidth())
self.rename_files_2.setSizePolicy(sizePolicy) self.rename_files_2.setSizePolicy(sizePolicy)
self.rename_files_2.setMinimumSize(QtCore.QSize(397, 144)) self.rename_files_2.setMinimumSize(QtCore.QSize(397, 144))
self.rename_files_2.setFlat(False) self.rename_files_2.setFlat(False)
self.rename_files_2.setObjectName("rename_files_2") self.rename_files_2.setObjectName("rename_files_2")
self.layoutWidget = QtGui.QWidget(self.rename_files_2) self.gridLayout = QtGui.QGridLayout(self.rename_files_2)
self.layoutWidget.setGeometry(QtCore.QRect(16, 31, 301, 101))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtGui.QGridLayout(self.layoutWidget)
self.gridLayout.setMargin(0)
self.gridLayout.setObjectName("gridLayout") self.gridLayout.setObjectName("gridLayout")
self.label = QtGui.QLabel(self.layoutWidget) self.label = QtGui.QLabel(self.rename_files_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy) self.label.setSizePolicy(sizePolicy)
font = QtGui.QFont() font = QtGui.QFont()
@@ -90,7 +62,7 @@ class Ui_MetadataOptionsPage(object):
self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label") self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 1, 1, 3) self.gridLayout.addWidget(self.label, 0, 1, 1, 3)
self.label_2 = QtGui.QLabel(self.layoutWidget) self.label_2 = QtGui.QLabel(self.rename_files_2)
font = QtGui.QFont() font = QtGui.QFont()
font.setWeight(75) font.setWeight(75)
font.setBold(True) font.setBold(True)
@@ -98,63 +70,15 @@ class Ui_MetadataOptionsPage(object):
self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2") self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 0, 4, 1, 3) self.gridLayout.addWidget(self.label_2, 0, 4, 1, 3)
self.label_3 = QtGui.QLabel(self.layoutWidget) self.label_3 = QtGui.QLabel(self.rename_files_2)
self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight) self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3") self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1) self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
self.label_4 = QtGui.QLabel(self.layoutWidget) spacerItem = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.gridLayout.addItem(spacerItem, 1, 1, 1, 1)
self.label_4.setObjectName("label_4") self.tracks_on_cover = QtGui.QRadioButton(self.rename_files_2)
self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
self.label_5 = QtGui.QLabel(self.layoutWidget)
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
self.standardize_tracks = QtGui.QRadioButton(self.layoutWidget)
self.standardize_tracks.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_tracks.sizePolicy().hasHeightForWidth())
self.standardize_tracks.setSizePolicy(sizePolicy)
self.standardize_tracks.setMinimumSize(QtCore.QSize(18, 18))
self.standardize_tracks.setText("")
self.standardize_tracks.setObjectName("standardize_tracks")
self.buttonGroup = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup.setObjectName("buttonGroup")
self.buttonGroup.addButton(self.standardize_tracks)
self.gridLayout.addWidget(self.standardize_tracks, 1, 5, 1, 1)
self.standardize_releases = QtGui.QRadioButton(self.layoutWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_releases.sizePolicy().hasHeightForWidth())
self.standardize_releases.setSizePolicy(sizePolicy)
self.standardize_releases.setMinimumSize(QtCore.QSize(18, 18))
self.standardize_releases.setText("")
self.standardize_releases.setObjectName("standardize_releases")
self.buttonGroup_2 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_2.setObjectName("buttonGroup_2")
self.buttonGroup_2.addButton(self.standardize_releases)
self.gridLayout.addWidget(self.standardize_releases, 2, 5, 1, 1)
self.standardize_artists = QtGui.QRadioButton(self.layoutWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_artists.sizePolicy().hasHeightForWidth())
self.standardize_artists.setSizePolicy(sizePolicy)
self.standardize_artists.setMinimumSize(QtCore.QSize(18, 18))
self.standardize_artists.setText("")
self.standardize_artists.setObjectName("standardize_artists")
self.buttonGroup_3 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_3.setObjectName("buttonGroup_3")
self.buttonGroup_3.addButton(self.standardize_artists)
self.gridLayout.addWidget(self.standardize_artists, 3, 5, 1, 1)
self.tracks_on_cover = QtGui.QRadioButton(self.layoutWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tracks_on_cover.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.tracks_on_cover.sizePolicy().hasHeightForWidth())
self.tracks_on_cover.setSizePolicy(sizePolicy) self.tracks_on_cover.setSizePolicy(sizePolicy)
self.tracks_on_cover.setMinimumSize(QtCore.QSize(18, 18)) self.tracks_on_cover.setMinimumSize(QtCore.QSize(18, 18))
@@ -163,24 +87,67 @@ class Ui_MetadataOptionsPage(object):
self.tracks_on_cover.setIconSize(QtCore.QSize(16, 16)) self.tracks_on_cover.setIconSize(QtCore.QSize(16, 16))
self.tracks_on_cover.setChecked(True) self.tracks_on_cover.setChecked(True)
self.tracks_on_cover.setObjectName("tracks_on_cover") self.tracks_on_cover.setObjectName("tracks_on_cover")
self.buttonGroup = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup.setObjectName("buttonGroup")
self.buttonGroup.addButton(self.tracks_on_cover) self.buttonGroup.addButton(self.tracks_on_cover)
self.gridLayout.addWidget(self.tracks_on_cover, 1, 2, 1, 1) self.gridLayout.addWidget(self.tracks_on_cover, 1, 2, 1, 1)
self.releases_on_cover = QtGui.QRadioButton(self.layoutWidget) spacerItem1 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) self.gridLayout.addItem(spacerItem1, 1, 3, 1, 1)
sizePolicy.setHorizontalStretch(0) spacerItem2 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
sizePolicy.setVerticalStretch(0) self.gridLayout.addItem(spacerItem2, 1, 4, 1, 1)
self.standardize_tracks = QtGui.QRadioButton(self.rename_files_2)
self.standardize_tracks.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHeightForWidth(self.standardize_tracks.sizePolicy().hasHeightForWidth())
self.standardize_tracks.setSizePolicy(sizePolicy)
self.standardize_tracks.setMinimumSize(QtCore.QSize(18, 18))
self.standardize_tracks.setText("")
self.standardize_tracks.setObjectName("standardize_tracks")
self.buttonGroup.addButton(self.standardize_tracks)
self.gridLayout.addWidget(self.standardize_tracks, 1, 5, 1, 1)
spacerItem3 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem3, 1, 6, 1, 1)
self.label_4 = QtGui.QLabel(self.rename_files_2)
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1)
spacerItem4 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem4, 2, 1, 1, 1)
self.releases_on_cover = QtGui.QRadioButton(self.rename_files_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHeightForWidth(self.releases_on_cover.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.releases_on_cover.sizePolicy().hasHeightForWidth())
self.releases_on_cover.setSizePolicy(sizePolicy) self.releases_on_cover.setSizePolicy(sizePolicy)
self.releases_on_cover.setMinimumSize(QtCore.QSize(18, 18)) self.releases_on_cover.setMinimumSize(QtCore.QSize(18, 18))
self.releases_on_cover.setText("") self.releases_on_cover.setText("")
self.releases_on_cover.setChecked(True) self.releases_on_cover.setChecked(True)
self.releases_on_cover.setObjectName("releases_on_cover") self.releases_on_cover.setObjectName("releases_on_cover")
self.buttonGroup_2 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_2.setObjectName("buttonGroup_2")
self.buttonGroup_2.addButton(self.releases_on_cover) self.buttonGroup_2.addButton(self.releases_on_cover)
self.gridLayout.addWidget(self.releases_on_cover, 2, 2, 1, 1) self.gridLayout.addWidget(self.releases_on_cover, 2, 2, 1, 1)
self.artists_on_cover = QtGui.QRadioButton(self.layoutWidget) spacerItem5 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) self.gridLayout.addItem(spacerItem5, 2, 3, 1, 1)
sizePolicy.setHorizontalStretch(0) spacerItem6 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
sizePolicy.setVerticalStretch(0) self.gridLayout.addItem(spacerItem6, 2, 4, 1, 1)
self.standardize_releases = QtGui.QRadioButton(self.rename_files_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHeightForWidth(self.standardize_releases.sizePolicy().hasHeightForWidth())
self.standardize_releases.setSizePolicy(sizePolicy)
self.standardize_releases.setMinimumSize(QtCore.QSize(18, 18))
self.standardize_releases.setText("")
self.standardize_releases.setObjectName("standardize_releases")
self.buttonGroup_2.addButton(self.standardize_releases)
self.gridLayout.addWidget(self.standardize_releases, 2, 5, 1, 1)
spacerItem7 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem7, 2, 6, 1, 1)
self.label_5 = QtGui.QLabel(self.rename_files_2)
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
spacerItem8 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem8, 3, 1, 1, 1)
self.artists_on_cover = QtGui.QRadioButton(self.rename_files_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHeightForWidth(self.artists_on_cover.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.artists_on_cover.sizePolicy().hasHeightForWidth())
self.artists_on_cover.setSizePolicy(sizePolicy) self.artists_on_cover.setSizePolicy(sizePolicy)
self.artists_on_cover.setMinimumSize(QtCore.QSize(18, 18)) self.artists_on_cover.setMinimumSize(QtCore.QSize(18, 18))
@@ -188,37 +155,30 @@ class Ui_MetadataOptionsPage(object):
self.artists_on_cover.setIconSize(QtCore.QSize(16, 16)) self.artists_on_cover.setIconSize(QtCore.QSize(16, 16))
self.artists_on_cover.setChecked(True) self.artists_on_cover.setChecked(True)
self.artists_on_cover.setObjectName("artists_on_cover") self.artists_on_cover.setObjectName("artists_on_cover")
self.buttonGroup_3 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_3.setObjectName("buttonGroup_3")
self.buttonGroup_3.addButton(self.artists_on_cover) self.buttonGroup_3.addButton(self.artists_on_cover)
self.gridLayout.addWidget(self.artists_on_cover, 3, 2, 1, 1) self.gridLayout.addWidget(self.artists_on_cover, 3, 2, 1, 1)
spacerItem = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) spacerItem9 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 1, 1, 1, 1) self.gridLayout.addItem(spacerItem9, 3, 3, 1, 1)
spacerItem1 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) spacerItem10 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 2, 1, 1, 1) self.gridLayout.addItem(spacerItem10, 3, 4, 1, 1)
spacerItem2 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.standardize_artists = QtGui.QRadioButton(self.rename_files_2)
self.gridLayout.addItem(spacerItem2, 3, 1, 1, 1) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
spacerItem3 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) sizePolicy.setHeightForWidth(self.standardize_artists.sizePolicy().hasHeightForWidth())
self.gridLayout.addItem(spacerItem3, 1, 4, 1, 1) self.standardize_artists.setSizePolicy(sizePolicy)
spacerItem4 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.standardize_artists.setMinimumSize(QtCore.QSize(18, 18))
self.gridLayout.addItem(spacerItem4, 2, 4, 1, 1) self.standardize_artists.setText("")
spacerItem5 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.standardize_artists.setObjectName("standardize_artists")
self.gridLayout.addItem(spacerItem5, 3, 4, 1, 1) self.buttonGroup_3.addButton(self.standardize_artists)
spacerItem6 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addWidget(self.standardize_artists, 3, 5, 1, 1)
self.gridLayout.addItem(spacerItem6, 1, 3, 1, 1) spacerItem11 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
spacerItem7 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem7, 2, 3, 1, 1)
spacerItem8 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem8, 3, 3, 1, 1)
spacerItem9 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem9, 1, 6, 1, 1)
spacerItem10 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem10, 2, 6, 1, 1)
spacerItem11 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem11, 3, 6, 1, 1) self.gridLayout.addItem(spacerItem11, 3, 6, 1, 1)
self.verticalLayout_2.addWidget(self.rename_files_2) spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem12, 2, 7, 1, 1)
self.verticalLayout.addWidget(self.rename_files_2)
self.rename_files_3 = QtGui.QGroupBox(MetadataOptionsPage) self.rename_files_3 = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files_3.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.rename_files_3.sizePolicy().hasHeightForWidth())
self.rename_files_3.setSizePolicy(sizePolicy) self.rename_files_3.setSizePolicy(sizePolicy)
self.rename_files_3.setMinimumSize(QtCore.QSize(397, 0)) self.rename_files_3.setMinimumSize(QtCore.QSize(397, 0))
@@ -244,10 +204,9 @@ class Ui_MetadataOptionsPage(object):
self.va_name = QtGui.QLineEdit(self.rename_files_3) self.va_name = QtGui.QLineEdit(self.rename_files_3)
self.va_name.setObjectName("va_name") self.va_name.setObjectName("va_name")
self.gridlayout.addWidget(self.va_name, 1, 0, 1, 1) self.gridlayout.addWidget(self.va_name, 1, 0, 1, 1)
self.verticalLayout_2.addWidget(self.rename_files_3) self.verticalLayout.addWidget(self.rename_files_3)
self.verticalLayout.addLayout(self.verticalLayout_2) spacerItem13 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding)
spacerItem12 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding) self.verticalLayout.addItem(spacerItem13)
self.verticalLayout.addItem(spacerItem12)
self.label_6.setBuddy(self.va_name_default) self.label_6.setBuddy(self.va_name_default)
self.label_7.setBuddy(self.nat_name_default) self.label_7.setBuddy(self.nat_name_default)
@@ -265,7 +224,6 @@ class Ui_MetadataOptionsPage(object):
self.release_ars.setText(_("Use release relationships")) self.release_ars.setText(_("Use release relationships"))
self.track_ars.setText(_("Use track relationships")) self.track_ars.setText(_("Use track relationships"))
self.folksonomy_tags.setText(_("Use folksonomy tags as genre")) self.folksonomy_tags.setText(_("Use folksonomy tags as genre"))
self.label_8.setText(_("Preferred release country:"))
self.rename_files_2.setTitle(_("Standardization")) self.rename_files_2.setTitle(_("Standardization"))
self.label.setText(_("As on cover")) self.label.setText(_("As on cover"))
self.label_2.setText(_("Standardized")) self.label_2.setText(_("Standardized"))

View File

@@ -1,126 +1,117 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui\options_plugins.ui' # Form implementation generated from reading ui file 'ui/options_plugins.ui'
# #
# Created: Thu Oct 22 00:04:48 2009 # Created: Mon Jun 20 19:52:58 2011
# by: PyQt4 UI code generator 4.6 # by: PyQt4 UI code generator 4.8.4
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
class Ui_PluginsOptionsPage(object): class Ui_PluginsOptionsPage(object):
def setupUi(self, PluginsOptionsPage): def setupUi(self, PluginsOptionsPage):
PluginsOptionsPage.setObjectName("PluginsOptionsPage") PluginsOptionsPage.setObjectName("PluginsOptionsPage")
PluginsOptionsPage.resize(406, 297) PluginsOptionsPage.resize(513, 312)
self.vboxlayout = QtGui.QVBoxLayout(PluginsOptionsPage) self.vboxlayout = QtGui.QVBoxLayout(PluginsOptionsPage)
self.vboxlayout.setSpacing(6) self.vboxlayout.setObjectName("vboxlayout")
self.vboxlayout.setMargin(9) self.splitter = QtGui.QSplitter(PluginsOptionsPage)
self.vboxlayout.setObjectName("vboxlayout") self.splitter.setOrientation(QtCore.Qt.Vertical)
self.splitter = QtGui.QSplitter(PluginsOptionsPage) self.splitter.setHandleWidth(2)
self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName("splitter")
self.splitter.setHandleWidth(2) self.groupBox_2 = QtGui.QGroupBox(self.splitter)
self.splitter.setObjectName("splitter") self.groupBox_2.setObjectName("groupBox_2")
self.groupBox_2 = QtGui.QGroupBox(self.splitter) self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox_2)
self.groupBox_2.setObjectName("groupBox_2") self.vboxlayout1.setSpacing(2)
self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox_2) self.vboxlayout1.setObjectName("vboxlayout1")
self.vboxlayout1.setSpacing(2) self.plugins = QtGui.QTreeWidget(self.groupBox_2)
self.vboxlayout1.setMargin(9) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
self.vboxlayout1.setObjectName("vboxlayout1") sizePolicy.setHeightForWidth(self.plugins.sizePolicy().hasHeightForWidth())
self.plugins = QtGui.QTreeWidget(self.groupBox_2) self.plugins.setSizePolicy(sizePolicy)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding) self.plugins.setAcceptDrops(True)
sizePolicy.setHorizontalStretch(0) self.plugins.setDragDropMode(QtGui.QAbstractItemView.DropOnly)
sizePolicy.setVerticalStretch(0) self.plugins.setRootIsDecorated(False)
sizePolicy.setHeightForWidth(self.plugins.sizePolicy().hasHeightForWidth()) self.plugins.setObjectName("plugins")
self.plugins.setSizePolicy(sizePolicy) self.vboxlayout1.addWidget(self.plugins)
self.plugins.setRootIsDecorated(False) self.horizontalLayout = QtGui.QHBoxLayout()
self.plugins.setObjectName("plugins") self.horizontalLayout.setObjectName("horizontalLayout")
self.vboxlayout1.addWidget(self.plugins) self.install_plugin = QtGui.QPushButton(self.groupBox_2)
self.horizontalLayout = QtGui.QHBoxLayout() sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
self.horizontalLayout.setObjectName("horizontalLayout") sizePolicy.setHeightForWidth(self.install_plugin.sizePolicy().hasHeightForWidth())
self.folder_open = QtGui.QPushButton(self.groupBox_2) self.install_plugin.setSizePolicy(sizePolicy)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) self.install_plugin.setObjectName("install_plugin")
sizePolicy.setHorizontalStretch(0) self.horizontalLayout.addWidget(self.install_plugin)
sizePolicy.setVerticalStretch(0) self.folder_open = QtGui.QPushButton(self.groupBox_2)
sizePolicy.setHeightForWidth(self.folder_open.sizePolicy().hasHeightForWidth()) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
self.folder_open.setSizePolicy(sizePolicy) sizePolicy.setHeightForWidth(self.folder_open.sizePolicy().hasHeightForWidth())
self.folder_open.setObjectName("folder_open") self.folder_open.setSizePolicy(sizePolicy)
self.horizontalLayout.addWidget(self.folder_open) self.folder_open.setObjectName("folder_open")
self.plugin_download = QtGui.QPushButton(self.groupBox_2) self.horizontalLayout.addWidget(self.folder_open)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) self.plugin_download = QtGui.QPushButton(self.groupBox_2)
sizePolicy.setHorizontalStretch(0) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.plugin_download.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(self.plugin_download.sizePolicy().hasHeightForWidth()) self.plugin_download.setSizePolicy(sizePolicy)
self.plugin_download.setSizePolicy(sizePolicy) self.plugin_download.setObjectName("plugin_download")
self.plugin_download.setObjectName("plugin_download") self.horizontalLayout.addWidget(self.plugin_download)
self.horizontalLayout.addWidget(self.plugin_download) self.vboxlayout1.addLayout(self.horizontalLayout)
self.vboxlayout1.addLayout(self.horizontalLayout) self.groupBox = QtGui.QGroupBox(self.splitter)
self.groupBox = QtGui.QGroupBox(self.splitter) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
sizePolicy.setHorizontalStretch(0) self.groupBox.setSizePolicy(sizePolicy)
sizePolicy.setVerticalStretch(0) self.groupBox.setObjectName("groupBox")
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) self.vboxlayout2 = QtGui.QVBoxLayout(self.groupBox)
self.groupBox.setSizePolicy(sizePolicy) self.vboxlayout2.setSpacing(0)
self.groupBox.setObjectName("groupBox") self.vboxlayout2.setObjectName("vboxlayout2")
self.vboxlayout2 = QtGui.QVBoxLayout(self.groupBox) self.scrollArea = QtGui.QScrollArea(self.groupBox)
self.vboxlayout2.setSpacing(0) self.scrollArea.setEnabled(True)
self.vboxlayout2.setMargin(9) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.vboxlayout2.setObjectName("vboxlayout2") sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
self.scrollArea = QtGui.QScrollArea(self.groupBox) self.scrollArea.setSizePolicy(sizePolicy)
self.scrollArea.setEnabled(True) self.scrollArea.setFrameShape(QtGui.QFrame.HLine)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.scrollArea.setFrameShadow(QtGui.QFrame.Plain)
sizePolicy.setHorizontalStretch(0) self.scrollArea.setLineWidth(0)
sizePolicy.setVerticalStretch(0) self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setWidgetResizable(True)
self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.scrollArea.setFrameShape(QtGui.QFrame.HLine) self.scrollArea.setObjectName("scrollArea")
self.scrollArea.setFrameShadow(QtGui.QFrame.Plain) self.scrollAreaWidgetContents = QtGui.QWidget()
self.scrollArea.setLineWidth(0) self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 459, 76))
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.scrollArea.setWidgetResizable(True) sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())
self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) self.scrollAreaWidgetContents.setSizePolicy(sizePolicy)
self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) self.verticalLayout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 368, 69)) self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.verticalLayout.setContentsMargins(0, 0, 6, 0)
sizePolicy.setHorizontalStretch(0) self.verticalLayout.setObjectName("verticalLayout")
sizePolicy.setVerticalStretch(0) self.details = QtGui.QLabel(self.scrollAreaWidgetContents)
sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth()) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.scrollAreaWidgetContents.setSizePolicy(sizePolicy) sizePolicy.setHeightForWidth(self.details.sizePolicy().hasHeightForWidth())
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.details.setSizePolicy(sizePolicy)
self.verticalLayout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) self.details.setFrameShape(QtGui.QFrame.Box)
self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint) self.details.setLineWidth(0)
self.verticalLayout.setContentsMargins(0, 0, 6, 0) self.details.setText("")
self.verticalLayout.setObjectName("verticalLayout") self.details.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.details = QtGui.QLabel(self.scrollAreaWidgetContents) self.details.setWordWrap(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.details.setIndent(0)
sizePolicy.setHorizontalStretch(0) self.details.setOpenExternalLinks(True)
sizePolicy.setVerticalStretch(0) self.details.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
sizePolicy.setHeightForWidth(self.details.sizePolicy().hasHeightForWidth()) self.details.setObjectName("details")
self.details.setSizePolicy(sizePolicy) self.verticalLayout.addWidget(self.details)
self.details.setMinimumSize(QtCore.QSize(0, 0)) self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.details.setFrameShape(QtGui.QFrame.Box) self.vboxlayout2.addWidget(self.scrollArea)
self.details.setLineWidth(0) self.vboxlayout.addWidget(self.splitter)
self.details.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.details.setWordWrap(True) self.retranslateUi(PluginsOptionsPage)
self.details.setIndent(0) QtCore.QMetaObject.connectSlotsByName(PluginsOptionsPage)
self.details.setOpenExternalLinks(True)
self.details.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) def retranslateUi(self, PluginsOptionsPage):
self.details.setObjectName("details") self.groupBox_2.setTitle(_("Plugins"))
self.verticalLayout.addWidget(self.details) self.plugins.headerItem().setText(0, _("Name"))
self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.plugins.headerItem().setText(1, _("Version"))
self.vboxlayout2.addWidget(self.scrollArea) self.plugins.headerItem().setText(2, _("Author"))
self.vboxlayout.addWidget(self.splitter) self.install_plugin.setText(_(u"Install plugin…"))
self.folder_open.setText(_("Open plugin folder"))
self.retranslateUi(PluginsOptionsPage) self.plugin_download.setText(_("Download plugins"))
QtCore.QMetaObject.connectSlotsByName(PluginsOptionsPage) self.groupBox.setTitle(_("Details"))
def retranslateUi(self, PluginsOptionsPage):
self.groupBox_2.setTitle(_("Plugins"))
self.plugins.headerItem().setText(0, _("Name"))
self.plugins.headerItem().setText(1, _("Version"))
self.plugins.headerItem().setText(2, _("Author"))
self.folder_open.setText(_("Open plugin folder"))
self.plugin_download.setText(_("Download plugins"))
self.groupBox.setTitle(_("Details"))

View File

@@ -0,0 +1,220 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui/options_releases.ui'
#
# Created: Tue Jun 21 18:35:44 2011
# by: PyQt4 UI code generator 4.8.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_ReleasesOptionsPage(object):
def setupUi(self, ReleasesOptionsPage):
ReleasesOptionsPage.setObjectName("ReleasesOptionsPage")
ReleasesOptionsPage.resize(551, 497)
self.verticalLayout_3 = QtGui.QVBoxLayout(ReleasesOptionsPage)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.type_group = QtGui.QGroupBox(ReleasesOptionsPage)
self.type_group.setObjectName("type_group")
self.gridLayout = QtGui.QGridLayout(self.type_group)
self.gridLayout.setVerticalSpacing(6)
self.gridLayout.setObjectName("gridLayout")
self.label = QtGui.QLabel(self.type_group)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.prefer_album_score = QtGui.QSlider(self.type_group)
self.prefer_album_score.setMaximum(100)
self.prefer_album_score.setProperty("value", 50)
self.prefer_album_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_album_score.setObjectName("prefer_album_score")
self.gridLayout.addWidget(self.prefer_album_score, 0, 1, 1, 1)
self.label_2 = QtGui.QLabel(self.type_group)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 0, 2, 1, 1)
self.prefer_single_score = QtGui.QSlider(self.type_group)
self.prefer_single_score.setMaximum(100)
self.prefer_single_score.setProperty("value", 50)
self.prefer_single_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_single_score.setObjectName("prefer_single_score")
self.gridLayout.addWidget(self.prefer_single_score, 0, 3, 1, 1)
self.label_3 = QtGui.QLabel(self.type_group)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 0, 4, 1, 1)
self.prefer_ep_score = QtGui.QSlider(self.type_group)
self.prefer_ep_score.setMaximum(100)
self.prefer_ep_score.setProperty("value", 50)
self.prefer_ep_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_ep_score.setObjectName("prefer_ep_score")
self.gridLayout.addWidget(self.prefer_ep_score, 0, 5, 1, 1)
self.label_7 = QtGui.QLabel(self.type_group)
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1)
self.prefer_compilation_score = QtGui.QSlider(self.type_group)
self.prefer_compilation_score.setMaximum(100)
self.prefer_compilation_score.setProperty("value", 50)
self.prefer_compilation_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_compilation_score.setObjectName("prefer_compilation_score")
self.gridLayout.addWidget(self.prefer_compilation_score, 1, 1, 1, 1)
self.label_8 = QtGui.QLabel(self.type_group)
self.label_8.setObjectName("label_8")
self.gridLayout.addWidget(self.label_8, 1, 2, 1, 1)
self.prefer_soundtrack_score = QtGui.QSlider(self.type_group)
self.prefer_soundtrack_score.setMaximum(100)
self.prefer_soundtrack_score.setProperty("value", 50)
self.prefer_soundtrack_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_soundtrack_score.setObjectName("prefer_soundtrack_score")
self.gridLayout.addWidget(self.prefer_soundtrack_score, 1, 3, 1, 1)
self.label_9 = QtGui.QLabel(self.type_group)
self.label_9.setObjectName("label_9")
self.gridLayout.addWidget(self.label_9, 1, 4, 1, 1)
self.prefer_spokenword_score = QtGui.QSlider(self.type_group)
self.prefer_spokenword_score.setMaximum(100)
self.prefer_spokenword_score.setProperty("value", 50)
self.prefer_spokenword_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_spokenword_score.setObjectName("prefer_spokenword_score")
self.gridLayout.addWidget(self.prefer_spokenword_score, 1, 5, 1, 1)
self.label_10 = QtGui.QLabel(self.type_group)
self.label_10.setObjectName("label_10")
self.gridLayout.addWidget(self.label_10, 2, 0, 1, 1)
self.prefer_interview_score = QtGui.QSlider(self.type_group)
self.prefer_interview_score.setMaximum(100)
self.prefer_interview_score.setProperty("value", 50)
self.prefer_interview_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_interview_score.setObjectName("prefer_interview_score")
self.gridLayout.addWidget(self.prefer_interview_score, 2, 1, 1, 1)
self.label_11 = QtGui.QLabel(self.type_group)
self.label_11.setObjectName("label_11")
self.gridLayout.addWidget(self.label_11, 2, 2, 1, 1)
self.prefer_audiobook_score = QtGui.QSlider(self.type_group)
self.prefer_audiobook_score.setMaximum(100)
self.prefer_audiobook_score.setProperty("value", 50)
self.prefer_audiobook_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_audiobook_score.setObjectName("prefer_audiobook_score")
self.gridLayout.addWidget(self.prefer_audiobook_score, 2, 3, 1, 1)
self.label_12 = QtGui.QLabel(self.type_group)
self.label_12.setObjectName("label_12")
self.gridLayout.addWidget(self.label_12, 2, 4, 1, 1)
self.prefer_live_score = QtGui.QSlider(self.type_group)
self.prefer_live_score.setMaximum(100)
self.prefer_live_score.setProperty("value", 50)
self.prefer_live_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_live_score.setObjectName("prefer_live_score")
self.gridLayout.addWidget(self.prefer_live_score, 2, 5, 1, 1)
self.label_13 = QtGui.QLabel(self.type_group)
self.label_13.setObjectName("label_13")
self.gridLayout.addWidget(self.label_13, 3, 0, 1, 1)
self.prefer_remix_score = QtGui.QSlider(self.type_group)
self.prefer_remix_score.setMaximum(100)
self.prefer_remix_score.setProperty("value", 50)
self.prefer_remix_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_remix_score.setObjectName("prefer_remix_score")
self.gridLayout.addWidget(self.prefer_remix_score, 3, 1, 1, 1)
self.label_14 = QtGui.QLabel(self.type_group)
self.label_14.setObjectName("label_14")
self.gridLayout.addWidget(self.label_14, 3, 2, 1, 1)
self.prefer_other_score = QtGui.QSlider(self.type_group)
self.prefer_other_score.setMaximum(100)
self.prefer_other_score.setSliderPosition(50)
self.prefer_other_score.setOrientation(QtCore.Qt.Horizontal)
self.prefer_other_score.setObjectName("prefer_other_score")
self.gridLayout.addWidget(self.prefer_other_score, 3, 3, 1, 1)
self.reset_preferred_types_btn = QtGui.QPushButton(self.type_group)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
sizePolicy.setHeightForWidth(self.reset_preferred_types_btn.sizePolicy().hasHeightForWidth())
self.reset_preferred_types_btn.setSizePolicy(sizePolicy)
self.reset_preferred_types_btn.setObjectName("reset_preferred_types_btn")
self.gridLayout.addWidget(self.reset_preferred_types_btn, 4, 5, 1, 1)
self.verticalLayout_3.addWidget(self.type_group)
self.country_group = QtGui.QGroupBox(ReleasesOptionsPage)
self.country_group.setObjectName("country_group")
self.horizontalLayout = QtGui.QHBoxLayout(self.country_group)
self.horizontalLayout.setSpacing(4)
self.horizontalLayout.setObjectName("horizontalLayout")
self.country_list = QtGui.QListWidget(self.country_group)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHeightForWidth(self.country_list.sizePolicy().hasHeightForWidth())
self.country_list.setSizePolicy(sizePolicy)
self.country_list.setObjectName("country_list")
self.horizontalLayout.addWidget(self.country_list)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.add_countries = QtGui.QPushButton(self.country_group)
self.add_countries.setObjectName("add_countries")
self.verticalLayout.addWidget(self.add_countries)
self.remove_countries = QtGui.QPushButton(self.country_group)
self.remove_countries.setObjectName("remove_countries")
self.verticalLayout.addWidget(self.remove_countries)
spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem1)
self.horizontalLayout.addLayout(self.verticalLayout)
self.preferred_country_list = QtGui.QListWidget(self.country_group)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHeightForWidth(self.preferred_country_list.sizePolicy().hasHeightForWidth())
self.preferred_country_list.setSizePolicy(sizePolicy)
self.preferred_country_list.setDragEnabled(True)
self.preferred_country_list.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
self.preferred_country_list.setObjectName("preferred_country_list")
self.horizontalLayout.addWidget(self.preferred_country_list)
self.verticalLayout_3.addWidget(self.country_group)
self.format_group = QtGui.QGroupBox(ReleasesOptionsPage)
self.format_group.setObjectName("format_group")
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.format_group)
self.horizontalLayout_2.setSpacing(4)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.format_list = QtGui.QListWidget(self.format_group)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHeightForWidth(self.format_list.sizePolicy().hasHeightForWidth())
self.format_list.setSizePolicy(sizePolicy)
self.format_list.setObjectName("format_list")
self.horizontalLayout_2.addWidget(self.format_list)
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem2)
self.add_formats = QtGui.QPushButton(self.format_group)
self.add_formats.setObjectName("add_formats")
self.verticalLayout_2.addWidget(self.add_formats)
self.remove_formats = QtGui.QPushButton(self.format_group)
self.remove_formats.setObjectName("remove_formats")
self.verticalLayout_2.addWidget(self.remove_formats)
spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem3)
self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.preferred_format_list = QtGui.QListWidget(self.format_group)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHeightForWidth(self.preferred_format_list.sizePolicy().hasHeightForWidth())
self.preferred_format_list.setSizePolicy(sizePolicy)
self.preferred_format_list.setDragEnabled(True)
self.preferred_format_list.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
self.preferred_format_list.setObjectName("preferred_format_list")
self.horizontalLayout_2.addWidget(self.preferred_format_list)
self.verticalLayout_3.addWidget(self.format_group)
self.retranslateUi(ReleasesOptionsPage)
QtCore.QMetaObject.connectSlotsByName(ReleasesOptionsPage)
def retranslateUi(self, ReleasesOptionsPage):
ReleasesOptionsPage.setWindowTitle(_("Form"))
self.type_group.setTitle(_("Preferred release types"))
self.label.setText(_("Album"))
self.label_2.setText(_("Single"))
self.label_3.setText(_("EP"))
self.label_7.setText(_("Compilation"))
self.label_8.setText(_("Soundtrack"))
self.label_9.setText(_("Spokenword"))
self.label_10.setText(_("Interview"))
self.label_11.setText(_("Audiobook"))
self.label_12.setText(_("Live"))
self.label_13.setText(_("Remix"))
self.label_14.setText(_("Other"))
self.reset_preferred_types_btn.setText(_("Reset all"))
self.country_group.setTitle(_("Preferred release countries"))
self.add_countries.setText(">")
self.remove_countries.setText("<")
self.format_group.setTitle(_("Preferred release formats"))
self.add_formats.setText(">")
self.remove_formats.setText("<")

View File

@@ -6,26 +6,17 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>382</width> <width>413</width>
<height>498</height> <height>612</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout"> <layout class="QVBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="margin">
<number>9</number>
</property>
<item> <item>
<widget class="QGroupBox" name="rename_files"> <widget class="QGroupBox" name="rename_files">
<property name="title"> <property name="title">
<string>Thresholds</string> <string>Thresholds</string>
</property> </property>
<layout class="QGridLayout"> <layout class="QGridLayout">
<property name="margin">
<number>9</number>
</property>
<property name="spacing"> <property name="spacing">
<number>2</number> <number>2</number>
</property> </property>
@@ -110,265 +101,6 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Preferred release types</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="2">
<widget class="QSlider" name="prefer_album_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSlider" name="prefer_single_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Album</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Single</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSlider" name="prefer_ep_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QSlider" name="prefer_compilation_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QSlider" name="prefer_soundtrack_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QSlider" name="prefer_spokenword_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>EP</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Compilation</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Soundtrack</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Spokenword</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QSlider" name="prefer_interview_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QSlider" name="prefer_audiobook_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QSlider" name="prefer_live_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Interview</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Audiobook</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Live</string>
</property>
</widget>
</item>
<item row="9" column="2">
<widget class="QSlider" name="prefer_remix_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Remix</string>
</property>
</widget>
</item>
<item row="10" column="2">
<widget class="QSlider" name="prefer_other_score">
<property name="maximum">
<number>100</number>
</property>
<property name="sliderPosition">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Other</string>
</property>
</widget>
</item>
<item row="12" column="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<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="QPushButton" name="reset_preferred_types_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Reset all</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item> <item>
<spacer> <spacer>
<property name="orientation"> <property name="orientation">

File diff suppressed because it is too large Load Diff

View File

@@ -6,17 +6,11 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>406</width> <width>513</width>
<height>297</height> <height>312</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout"> <layout class="QVBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="margin">
<number>9</number>
</property>
<item> <item>
<widget class="QSplitter" name="splitter"> <widget class="QSplitter" name="splitter">
<property name="orientation"> <property name="orientation">
@@ -33,9 +27,6 @@
<property name="spacing"> <property name="spacing">
<number>2</number> <number>2</number>
</property> </property>
<property name="margin">
<number>9</number>
</property>
<item> <item>
<widget class="QTreeWidget" name="plugins"> <widget class="QTreeWidget" name="plugins">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -44,6 +35,12 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DropOnly</enum>
</property>
<property name="rootIsDecorated"> <property name="rootIsDecorated">
<bool>false</bool> <bool>false</bool>
</property> </property>
@@ -66,6 +63,19 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="install_plugin">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Install plugin…</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="folder_open"> <widget class="QPushButton" name="folder_open">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -110,9 +120,6 @@
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin">
<number>9</number>
</property>
<item> <item>
<widget class="QScrollArea" name="scrollArea"> <widget class="QScrollArea" name="scrollArea">
<property name="enabled"> <property name="enabled">
@@ -147,8 +154,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>368</width> <width>459</width>
<height>69</height> <height>76</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">

430
ui/options_releases.ui Normal file
View File

@@ -0,0 +1,430 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ReleasesOptionsPage</class>
<widget class="QWidget" name="ReleasesOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>551</width>
<height>497</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="type_group">
<property name="title">
<string>Preferred release types</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Album</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="prefer_album_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Single</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QSlider" name="prefer_single_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_3">
<property name="text">
<string>EP</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QSlider" name="prefer_ep_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Compilation</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="prefer_compilation_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Soundtrack</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QSlider" name="prefer_soundtrack_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Spokenword</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QSlider" name="prefer_spokenword_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Interview</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSlider" name="prefer_interview_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Audiobook</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QSlider" name="prefer_audiobook_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Live</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QSlider" name="prefer_live_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Remix</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSlider" name="prefer_remix_score">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Other</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QSlider" name="prefer_other_score">
<property name="maximum">
<number>100</number>
</property>
<property name="sliderPosition">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QPushButton" name="reset_preferred_types_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Reset all</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="country_group">
<property name="title">
<string>Preferred release countries</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
</property>
<item>
<widget class="QListWidget" name="country_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<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>
<item>
<widget class="QPushButton" name="add_countries">
<property name="text">
<string>&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="remove_countries">
<property name="text">
<string>&lt;</string>
</property>
</widget>
</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>
</item>
<item>
<widget class="QListWidget" name="preferred_country_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::InternalMove</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="format_group">
<property name="title">
<string>Preferred release formats</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<item>
<widget class="QListWidget" name="format_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<spacer name="verticalSpacer_3">
<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="QPushButton" name="add_formats">
<property name="text">
<string>&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="remove_formats">
<property name="text">
<string>&lt;</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<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>
<widget class="QListWidget" name="preferred_format_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::InternalMove</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>