mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-22 09:18:18 +00:00
Merging with gsoc-ngs branch.
This commit is contained in:
@@ -43,7 +43,7 @@ class Cluster(QtCore.QObject, Item):
|
||||
self.lookup_queued = False
|
||||
|
||||
# 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):
|
||||
return '<Cluster %r>' % self.metadata['album']
|
||||
@@ -132,41 +132,24 @@ class Cluster(QtCore.QObject, Item):
|
||||
* title = 17
|
||||
* artist name = 6
|
||||
* number of tracks = 5
|
||||
* release country = 4
|
||||
* release country = 2
|
||||
* format = 2
|
||||
|
||||
TODO:
|
||||
* prioritize official albums over compilations (optional?)
|
||||
"""
|
||||
total = 0.0
|
||||
|
||||
a = self.metadata['album']
|
||||
b = release.title[0].text
|
||||
total += similarity2(a, b) * self.comparison_weights['title']
|
||||
parts = []
|
||||
w = self.comparison_weights
|
||||
|
||||
a = self.metadata['artist']
|
||||
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)
|
||||
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
|
||||
total += score * self.comparison_weights['totaltracks']
|
||||
t, p = self.metadata.compare_to_release(release, w, self.config)
|
||||
total += t
|
||||
parts.extend(p)
|
||||
|
||||
preferred_country = self.config.setting["preferred_release_country"]
|
||||
|
||||
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())
|
||||
return reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
|
||||
|
||||
def _lookup_finished(self, document, http, error):
|
||||
self._signal_lookup_finished()
|
||||
|
||||
@@ -43,8 +43,7 @@ from picard.util import (
|
||||
format_time,
|
||||
LockableObject,
|
||||
pathcmp,
|
||||
mimetype,
|
||||
load_release_type_scores,
|
||||
mimetype
|
||||
)
|
||||
|
||||
|
||||
@@ -87,6 +86,10 @@ class File(LockableObject, Item):
|
||||
self.parent = None
|
||||
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):
|
||||
return '<File #%d %r>' % (self.id, self.base_filename)
|
||||
|
||||
@@ -440,89 +443,45 @@ class File(LockableObject, Item):
|
||||
* length = 10
|
||||
* number of tracks = 4
|
||||
* album type = 20
|
||||
* release country = 4
|
||||
* release country = 2
|
||||
* format = 2
|
||||
|
||||
"""
|
||||
total = 0.0
|
||||
parts = []
|
||||
scores = []
|
||||
w = self.comparison_weights
|
||||
|
||||
if 'title' in self.metadata:
|
||||
a = self.metadata['title']
|
||||
b = track.title[0].text
|
||||
parts.append((similarity2(a, b), 13))
|
||||
total += 13
|
||||
parts.append((similarity2(a, b), w["title"]))
|
||||
total += w["title"]
|
||||
|
||||
if 'artist' in self.metadata:
|
||||
a = self.metadata['artist']
|
||||
b = artist_credit_from_node(track.artist_credit[0], self.config)[0]
|
||||
parts.append((similarity2(a, b), 4))
|
||||
total += 4
|
||||
parts.append((similarity2(a, b), w["artist"]))
|
||||
total += w["artist"]
|
||||
|
||||
a = self.metadata.length
|
||||
if a > 0 and 'duration' in track.children:
|
||||
b = int(track.duration[0].text)
|
||||
if a > 0 and 'length' in track.children:
|
||||
b = int(track.length[0].text)
|
||||
score = 1.0 - min(abs(a - b), 30000) / 30000.0
|
||||
parts.append((score, 10))
|
||||
total += 10
|
||||
|
||||
album = totaltracks = None
|
||||
if 'album' in self.metadata:
|
||||
album = self.metadata['album']
|
||||
if 'totaltracks' in self.metadata:
|
||||
totaltracks = int(self.metadata['totaltracks'])
|
||||
parts.append((score, w["length"]))
|
||||
total += w["length"]
|
||||
|
||||
releases = []
|
||||
if "release_list" in track.children and "release" in track.release_list[0].children:
|
||||
releases = track.release_list[0].release
|
||||
|
||||
if not releases:
|
||||
return (reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0), None)
|
||||
|
||||
preferred_country = self.config.setting["preferred_release_country"]
|
||||
return (total, None)
|
||||
|
||||
scores = []
|
||||
for release in releases:
|
||||
total_ = total
|
||||
parts_ = list(parts)
|
||||
|
||||
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
|
||||
|
||||
t, p = self.metadata.compare_to_release(release, w, self.config)
|
||||
total_ = total + t
|
||||
parts_ = list(parts) + p
|
||||
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])
|
||||
|
||||
@@ -21,7 +21,7 @@ import re
|
||||
import unicodedata
|
||||
from picard.plugin import ExtensionPoint
|
||||
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):
|
||||
@@ -78,6 +78,71 @@ class Metadata(object):
|
||||
#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)
|
||||
|
||||
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):
|
||||
self._items = {}
|
||||
for key, values in other.rawitems():
|
||||
|
||||
138
picard/plugin.py
138
picard/plugin.py
@@ -20,23 +20,42 @@
|
||||
from PyQt4 import QtCore
|
||||
import imp
|
||||
import os.path
|
||||
import shutil
|
||||
import picard.plugins
|
||||
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__
|
||||
if name.startswith("picard.plugins"):
|
||||
return name[15:]
|
||||
|
||||
def _plugin_name_from_path(path):
|
||||
path = os.path.normpath(path)
|
||||
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:
|
||||
if file in _package_entries:
|
||||
return None
|
||||
name, ext = os.path.splitext(file)
|
||||
if ext in _suffixes:
|
||||
return name
|
||||
return None
|
||||
|
||||
|
||||
def _unregister_module_extensions(module):
|
||||
for ep in _extension_points:
|
||||
ep.unregister_module(module)
|
||||
|
||||
|
||||
class ExtensionPoint(QtCore.QObject):
|
||||
|
||||
def __init__(self):
|
||||
QtCore.QObject.__init__(self)
|
||||
self.__items = []
|
||||
_extension_points.append(self)
|
||||
|
||||
def register(self, module, item):
|
||||
if module.startswith("picard.plugins"):
|
||||
@@ -45,6 +64,9 @@ class ExtensionPoint(QtCore.QObject):
|
||||
module = None
|
||||
self.__items.append((module, item))
|
||||
|
||||
def unregister_module(self, name):
|
||||
self.__items = filter(lambda i: i[0] != name, self.__items)
|
||||
|
||||
def __iter__(self):
|
||||
enabled_plugins = self.config.setting["enabled_plugins"].split()
|
||||
for module, item in self.__items:
|
||||
@@ -56,15 +78,23 @@ class PluginWrapper(object):
|
||||
|
||||
def __init__(self, module, plugindir):
|
||||
self.module = module
|
||||
self.compatible = False
|
||||
self.dir = plugindir
|
||||
|
||||
def __get_name(self):
|
||||
try:
|
||||
return self.module.PLUGIN_NAME
|
||||
except AttributeError:
|
||||
return self.module.__name__
|
||||
return self.module_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):
|
||||
try:
|
||||
return self.module.PLUGIN_AUTHOR
|
||||
@@ -104,57 +134,71 @@ class PluginManager(QtCore.QObject):
|
||||
QtCore.QObject.__init__(self)
|
||||
self.plugins = []
|
||||
|
||||
def load(self, plugindir):
|
||||
def load_plugindir(self, plugindir):
|
||||
if not os.path.isdir(plugindir):
|
||||
self.log.debug("Plugin directory %r doesn't exist", plugindir)
|
||||
return
|
||||
|
||||
names = set()
|
||||
suffixes = [s[0] for s in imp.get_suffixes()]
|
||||
package_entries = ["__init__.py", "__init__.pyc", "__init__.pyo"]
|
||||
for name in os.listdir(plugindir):
|
||||
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:
|
||||
for path in [os.path.join(plugindir, file) for file in os.listdir(plugindir)]:
|
||||
name = _plugin_name_from_path(path)
|
||||
if name:
|
||||
names.add(name)
|
||||
|
||||
for name in names:
|
||||
self.log.debug("Loading plugin %r", name)
|
||||
info = imp.find_module(name, [plugindir])
|
||||
try:
|
||||
plugin_module = imp.load_module('picard.plugins.' + name, *info)
|
||||
plugin = PluginWrapper(plugin_module, plugindir)
|
||||
for version in list(plugin.api_versions):
|
||||
found = False
|
||||
for api_version in picard.api_versions:
|
||||
if api_version.startswith(version):
|
||||
setattr(picard.plugins, name, plugin_module)
|
||||
self.load_plugin(name, plugindir)
|
||||
|
||||
def load_plugin(self, name, plugindir):
|
||||
self.log.debug("Loading plugin %r", name)
|
||||
info = imp.find_module(name, [plugindir])
|
||||
plugin = None
|
||||
try:
|
||||
index = None
|
||||
for i, p in enumerate(self.plugins):
|
||||
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)
|
||||
found = True
|
||||
break
|
||||
if found:
|
||||
break
|
||||
else:
|
||||
self.log.info("Plugin '%s' from '%s' is not compatible "
|
||||
"with this version of Picard." %
|
||||
(plugin.name, plugin.file))
|
||||
except:
|
||||
self.log.error(traceback.format_exc())
|
||||
if info[0] is not None:
|
||||
info[0].close()
|
||||
continue
|
||||
break
|
||||
else:
|
||||
self.log.info("Plugin '%s' from '%s' is not compatible"
|
||||
" with this version of Picard." % (plugin.name, plugin.file))
|
||||
except:
|
||||
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):
|
||||
return True
|
||||
|
||||
@@ -185,14 +185,14 @@ class Tagger(QtGui.QApplication):
|
||||
|
||||
# Load plugins
|
||||
self.pluginmanager = PluginManager()
|
||||
user_plugin_dir = os.path.join(self.userdir, "plugins")
|
||||
if not os.path.exists(user_plugin_dir):
|
||||
os.makedirs(user_plugin_dir)
|
||||
self.pluginmanager.load(user_plugin_dir)
|
||||
self.user_plugin_dir = os.path.join(self.userdir, "plugins")
|
||||
if not os.path.exists(self.user_plugin_dir):
|
||||
os.makedirs(self.user_plugin_dir)
|
||||
self.pluginmanager.load_plugindir(self.user_plugin_dir)
|
||||
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:
|
||||
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()
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ from picard.ui.options import (
|
||||
ratings,
|
||||
matching,
|
||||
metadata,
|
||||
releases,
|
||||
moving,
|
||||
renaming,
|
||||
plugins,
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
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.ui_options_matching import Ui_MatchingOptionsPage
|
||||
|
||||
@@ -36,7 +35,6 @@ class MatchingOptionsPage(OptionsPage):
|
||||
FloatOption("setting", "file_lookup_threshold", 0.7),
|
||||
FloatOption("setting", "cluster_lookup_threshold", 0.8),
|
||||
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 = {}
|
||||
@@ -45,39 +43,16 @@ class MatchingOptionsPage(OptionsPage):
|
||||
super(MatchingOptionsPage, self).__init__(parent)
|
||||
self.ui = Ui_MatchingOptionsPage()
|
||||
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):
|
||||
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.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):
|
||||
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["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)
|
||||
|
||||
@@ -21,9 +21,6 @@ from PyQt4 import QtCore, QtGui
|
||||
from picard.config import BoolOption, TextOption
|
||||
from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page
|
||||
from picard.ui.ui_options_metadata import Ui_MetadataOptionsPage
|
||||
from picard.const import RELEASE_COUNTRIES
|
||||
import operator
|
||||
import locale
|
||||
|
||||
|
||||
class MetadataOptionsPage(OptionsPage):
|
||||
@@ -41,7 +38,6 @@ class MetadataOptionsPage(OptionsPage):
|
||||
BoolOption("setting", "release_ars", True),
|
||||
BoolOption("setting", "track_ars", False),
|
||||
BoolOption("setting", "folksonomy_tags", False),
|
||||
TextOption("setting", "preferred_release_country", u""),
|
||||
BoolOption("setting", "convert_punctuation", False),
|
||||
BoolOption("setting", "standardize_tracks", 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.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):
|
||||
self.ui.translate_artist_names.setChecked(self.config.setting["translate_artist_names"])
|
||||
self.ui.convert_punctuation.setChecked(self.config.setting["convert_punctuation"])
|
||||
self.ui.release_ars.setChecked(self.config.setting["release_ars"])
|
||||
self.ui.track_ars.setChecked(self.config.setting["track_ars"])
|
||||
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.nat_name.setText(self.config.setting["nat_name"])
|
||||
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["track_ars"] = self.ui.track_ars.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["nat_name"] = self.ui.nat_name.text()
|
||||
self.config.setting["standardize_tracks"] = self.ui.standardize_tracks.isChecked()
|
||||
|
||||
@@ -22,7 +22,7 @@ import os.path
|
||||
import sys
|
||||
from PyQt4 import QtCore, QtGui
|
||||
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.ui_options_plugins import Ui_PluginsOptionsPage
|
||||
|
||||
@@ -47,40 +47,65 @@ class PluginsOptionsPage(OptionsPage):
|
||||
super(PluginsOptionsPage, self).__init__(parent)
|
||||
self.ui = Ui_PluginsOptionsPage()
|
||||
self.ui.setupUi(self)
|
||||
self.items = {}
|
||||
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":
|
||||
self.loader="file:///%s"
|
||||
self.loader="file:///%s"
|
||||
else:
|
||||
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.plugin_download, QtCore.SIGNAL("clicked()"), self.open_plugin_site)
|
||||
self.connect(self.tagger.pluginmanager, QtCore.SIGNAL("plugin_installed"), self.plugin_installed)
|
||||
|
||||
def load(self):
|
||||
plugins = sorted(self.tagger.pluginmanager.plugins, cmp=cmp_plugins)
|
||||
enabled_plugins = self.config.setting["enabled_plugins"].split()
|
||||
self.items = {}
|
||||
firstitem = None
|
||||
for plugin in plugins:
|
||||
item = QtGui.QTreeWidgetItem(self.ui.plugins)
|
||||
item.setText(0, plugin.name)
|
||||
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)
|
||||
enabled = plugin.module_name in enabled_plugins
|
||||
item = self.add_plugin_item(plugin, enabled=enabled)
|
||||
if not firstitem:
|
||||
firstitem = item
|
||||
self.items[item] = plugin
|
||||
self.ui.plugins.header().resizeSections(QtGui.QHeaderView.ResizeToContents)
|
||||
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):
|
||||
enabled_plugins = []
|
||||
for item, plugin in self.items.iteritems():
|
||||
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)
|
||||
|
||||
def change_details(self):
|
||||
@@ -99,11 +124,39 @@ class PluginsOptionsPage(OptionsPage):
|
||||
text.append("<b>" + _("File") + "</b>: " + plugin.file[len(plugin.dir)+1:])
|
||||
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):
|
||||
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):
|
||||
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)
|
||||
|
||||
140
picard/ui/options/releases.py
Normal file
140
picard/ui/options/releases.py
Normal 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)
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/options_matching.ui'
|
||||
#
|
||||
# Created: Thu May 12 23:52:13 2011
|
||||
# by: PyQt4 UI code generator 4.7.2
|
||||
# Created: Tue Jun 21 15:31:51 2011
|
||||
# by: PyQt4 UI code generator 4.8.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -12,21 +12,16 @@ from PyQt4 import QtCore, QtGui
|
||||
class Ui_MatchingOptionsPage(object):
|
||||
def setupUi(self, MatchingOptionsPage):
|
||||
MatchingOptionsPage.setObjectName("MatchingOptionsPage")
|
||||
MatchingOptionsPage.resize(382, 498)
|
||||
MatchingOptionsPage.resize(413, 612)
|
||||
self.vboxlayout = QtGui.QVBoxLayout(MatchingOptionsPage)
|
||||
self.vboxlayout.setSpacing(6)
|
||||
self.vboxlayout.setMargin(9)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.rename_files = QtGui.QGroupBox(MatchingOptionsPage)
|
||||
self.rename_files.setObjectName("rename_files")
|
||||
self.gridlayout = QtGui.QGridLayout(self.rename_files)
|
||||
self.gridlayout.setMargin(9)
|
||||
self.gridlayout.setSpacing(2)
|
||||
self.gridlayout.setObjectName("gridlayout")
|
||||
self.label_6 = QtGui.QLabel(self.rename_files)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth())
|
||||
self.label_6.setSizePolicy(sizePolicy)
|
||||
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.label_4 = QtGui.QLabel(self.rename_files)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
|
||||
self.label_4.setSizePolicy(sizePolicy)
|
||||
self.label_4.setObjectName("label_4")
|
||||
self.gridlayout.addWidget(self.label_4, 0, 0, 1, 1)
|
||||
self.label_5 = QtGui.QLabel(self.rename_files)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth())
|
||||
self.label_5.setSizePolicy(sizePolicy)
|
||||
self.label_5.setObjectName("label_5")
|
||||
self.gridlayout.addWidget(self.label_5, 1, 0, 1, 1)
|
||||
self.vboxlayout.addWidget(self.rename_files)
|
||||
self.groupBox = QtGui.QGroupBox(MatchingOptionsPage)
|
||||
self.groupBox.setObjectName("groupBox")
|
||||
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)
|
||||
spacerItem = QtGui.QSpacerItem(20, 41, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.vboxlayout.addItem(spacerItem)
|
||||
self.label_6.setBuddy(self.file_lookup_threshold)
|
||||
self.label_4.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):
|
||||
self.rename_files.setTitle(_("Thresholds"))
|
||||
self.label_6.setText(_("Minimal similarity for matching files to tracks:"))
|
||||
self.track_matching_threshold.setSuffix(_(" %"))
|
||||
self.cluster_lookup_threshold.setSuffix(_(" %"))
|
||||
self.file_lookup_threshold.setSuffix(_(" %"))
|
||||
self.track_matching_threshold.setSuffix(" %")
|
||||
self.cluster_lookup_threshold.setSuffix(" %")
|
||||
self.file_lookup_threshold.setSuffix(" %")
|
||||
self.label_4.setText(_("Minimal similarity for file 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"))
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# 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
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -14,17 +14,9 @@ class Ui_MetadataOptionsPage(object):
|
||||
MetadataOptionsPage.setObjectName("MetadataOptionsPage")
|
||||
MetadataOptionsPage.resize(423, 553)
|
||||
self.verticalLayout = QtGui.QVBoxLayout(MetadataOptionsPage)
|
||||
self.verticalLayout.setContentsMargins(-1, 0, -1, -1)
|
||||
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)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.rename_files.sizePolicy().hasHeightForWidth())
|
||||
self.rename_files.setSizePolicy(sizePolicy)
|
||||
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.setObjectName("folksonomy_tags")
|
||||
self.verticalLayout_3.addWidget(self.folksonomy_tags)
|
||||
self.label_8 = QtGui.QLabel(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.verticalLayout.addWidget(self.rename_files)
|
||||
self.rename_files_2 = QtGui.QGroupBox(MetadataOptionsPage)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.rename_files_2.sizePolicy().hasHeightForWidth())
|
||||
self.rename_files_2.setSizePolicy(sizePolicy)
|
||||
self.rename_files_2.setMinimumSize(QtCore.QSize(397, 144))
|
||||
self.rename_files_2.setFlat(False)
|
||||
self.rename_files_2.setObjectName("rename_files_2")
|
||||
self.layoutWidget = QtGui.QWidget(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 = QtGui.QGridLayout(self.rename_files_2)
|
||||
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.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
||||
self.label.setSizePolicy(sizePolicy)
|
||||
font = QtGui.QFont()
|
||||
@@ -90,7 +62,7 @@ class Ui_MetadataOptionsPage(object):
|
||||
self.label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label.setObjectName("label")
|
||||
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.setWeight(75)
|
||||
font.setBold(True)
|
||||
@@ -98,63 +70,15 @@ class Ui_MetadataOptionsPage(object):
|
||||
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_2.setObjectName("label_2")
|
||||
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.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_3.setObjectName("label_3")
|
||||
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
|
||||
self.label_4 = QtGui.QLabel(self.layoutWidget)
|
||||
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)
|
||||
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)
|
||||
spacerItem = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem, 1, 1, 1, 1)
|
||||
self.tracks_on_cover = QtGui.QRadioButton(self.rename_files_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHeightForWidth(self.tracks_on_cover.sizePolicy().hasHeightForWidth())
|
||||
self.tracks_on_cover.setSizePolicy(sizePolicy)
|
||||
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.setChecked(True)
|
||||
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.gridLayout.addWidget(self.tracks_on_cover, 1, 2, 1, 1)
|
||||
self.releases_on_cover = QtGui.QRadioButton(self.layoutWidget)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
spacerItem1 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem1, 1, 3, 1, 1)
|
||||
spacerItem2 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
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())
|
||||
self.releases_on_cover.setSizePolicy(sizePolicy)
|
||||
self.releases_on_cover.setMinimumSize(QtCore.QSize(18, 18))
|
||||
self.releases_on_cover.setText("")
|
||||
self.releases_on_cover.setChecked(True)
|
||||
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.gridLayout.addWidget(self.releases_on_cover, 2, 2, 1, 1)
|
||||
self.artists_on_cover = QtGui.QRadioButton(self.layoutWidget)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
spacerItem5 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem5, 2, 3, 1, 1)
|
||||
spacerItem6 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
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())
|
||||
self.artists_on_cover.setSizePolicy(sizePolicy)
|
||||
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.setChecked(True)
|
||||
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.gridLayout.addWidget(self.artists_on_cover, 3, 2, 1, 1)
|
||||
spacerItem = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem, 1, 1, 1, 1)
|
||||
spacerItem1 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem1, 2, 1, 1, 1)
|
||||
spacerItem2 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem2, 3, 1, 1, 1)
|
||||
spacerItem3 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem3, 1, 4, 1, 1)
|
||||
spacerItem4 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem4, 2, 4, 1, 1)
|
||||
spacerItem5 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem5, 3, 4, 1, 1)
|
||||
spacerItem6 = QtGui.QSpacerItem(40, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem6, 1, 3, 1, 1)
|
||||
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)
|
||||
spacerItem9 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem9, 3, 3, 1, 1)
|
||||
spacerItem10 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout.addItem(spacerItem10, 3, 4, 1, 1)
|
||||
self.standardize_artists = QtGui.QRadioButton(self.rename_files_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||
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.addButton(self.standardize_artists)
|
||||
self.gridLayout.addWidget(self.standardize_artists, 3, 5, 1, 1)
|
||||
spacerItem11 = QtGui.QSpacerItem(33, 18, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
|
||||
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)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.rename_files_3.sizePolicy().hasHeightForWidth())
|
||||
self.rename_files_3.setSizePolicy(sizePolicy)
|
||||
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.setObjectName("va_name")
|
||||
self.gridlayout.addWidget(self.va_name, 1, 0, 1, 1)
|
||||
self.verticalLayout_2.addWidget(self.rename_files_3)
|
||||
self.verticalLayout.addLayout(self.verticalLayout_2)
|
||||
spacerItem12 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding)
|
||||
self.verticalLayout.addItem(spacerItem12)
|
||||
self.verticalLayout.addWidget(self.rename_files_3)
|
||||
spacerItem13 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding)
|
||||
self.verticalLayout.addItem(spacerItem13)
|
||||
self.label_6.setBuddy(self.va_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.track_ars.setText(_("Use track relationships"))
|
||||
self.folksonomy_tags.setText(_("Use folksonomy tags as genre"))
|
||||
self.label_8.setText(_("Preferred release country:"))
|
||||
self.rename_files_2.setTitle(_("Standardization"))
|
||||
self.label.setText(_("As on cover"))
|
||||
self.label_2.setText(_("Standardized"))
|
||||
|
||||
@@ -1,126 +1,117 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui\options_plugins.ui'
|
||||
#
|
||||
# Created: Thu Oct 22 00:04:48 2009
|
||||
# by: PyQt4 UI code generator 4.6
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
class Ui_PluginsOptionsPage(object):
|
||||
def setupUi(self, PluginsOptionsPage):
|
||||
PluginsOptionsPage.setObjectName("PluginsOptionsPage")
|
||||
PluginsOptionsPage.resize(406, 297)
|
||||
self.vboxlayout = QtGui.QVBoxLayout(PluginsOptionsPage)
|
||||
self.vboxlayout.setSpacing(6)
|
||||
self.vboxlayout.setMargin(9)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.splitter = QtGui.QSplitter(PluginsOptionsPage)
|
||||
self.splitter.setOrientation(QtCore.Qt.Vertical)
|
||||
self.splitter.setHandleWidth(2)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.groupBox_2 = QtGui.QGroupBox(self.splitter)
|
||||
self.groupBox_2.setObjectName("groupBox_2")
|
||||
self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox_2)
|
||||
self.vboxlayout1.setSpacing(2)
|
||||
self.vboxlayout1.setMargin(9)
|
||||
self.vboxlayout1.setObjectName("vboxlayout1")
|
||||
self.plugins = QtGui.QTreeWidget(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.plugins.sizePolicy().hasHeightForWidth())
|
||||
self.plugins.setSizePolicy(sizePolicy)
|
||||
self.plugins.setRootIsDecorated(False)
|
||||
self.plugins.setObjectName("plugins")
|
||||
self.vboxlayout1.addWidget(self.plugins)
|
||||
self.horizontalLayout = QtGui.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.folder_open = QtGui.QPushButton(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.folder_open.sizePolicy().hasHeightForWidth())
|
||||
self.folder_open.setSizePolicy(sizePolicy)
|
||||
self.folder_open.setObjectName("folder_open")
|
||||
self.horizontalLayout.addWidget(self.folder_open)
|
||||
self.plugin_download = QtGui.QPushButton(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.plugin_download.sizePolicy().hasHeightForWidth())
|
||||
self.plugin_download.setSizePolicy(sizePolicy)
|
||||
self.plugin_download.setObjectName("plugin_download")
|
||||
self.horizontalLayout.addWidget(self.plugin_download)
|
||||
self.vboxlayout1.addLayout(self.horizontalLayout)
|
||||
self.groupBox = QtGui.QGroupBox(self.splitter)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox.setSizePolicy(sizePolicy)
|
||||
self.groupBox.setObjectName("groupBox")
|
||||
self.vboxlayout2 = QtGui.QVBoxLayout(self.groupBox)
|
||||
self.vboxlayout2.setSpacing(0)
|
||||
self.vboxlayout2.setMargin(9)
|
||||
self.vboxlayout2.setObjectName("vboxlayout2")
|
||||
self.scrollArea = QtGui.QScrollArea(self.groupBox)
|
||||
self.scrollArea.setEnabled(True)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
|
||||
self.scrollArea.setSizePolicy(sizePolicy)
|
||||
self.scrollArea.setFrameShape(QtGui.QFrame.HLine)
|
||||
self.scrollArea.setFrameShadow(QtGui.QFrame.Plain)
|
||||
self.scrollArea.setLineWidth(0)
|
||||
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.scrollArea.setObjectName("scrollArea")
|
||||
self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
|
||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 368, 69))
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())
|
||||
self.scrollAreaWidgetContents.setSizePolicy(sizePolicy)
|
||||
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
||||
self.verticalLayout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
|
||||
self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
|
||||
self.verticalLayout.setContentsMargins(0, 0, 6, 0)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.details = QtGui.QLabel(self.scrollAreaWidgetContents)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.details.sizePolicy().hasHeightForWidth())
|
||||
self.details.setSizePolicy(sizePolicy)
|
||||
self.details.setMinimumSize(QtCore.QSize(0, 0))
|
||||
self.details.setFrameShape(QtGui.QFrame.Box)
|
||||
self.details.setLineWidth(0)
|
||||
self.details.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
|
||||
self.details.setWordWrap(True)
|
||||
self.details.setIndent(0)
|
||||
self.details.setOpenExternalLinks(True)
|
||||
self.details.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.details.setObjectName("details")
|
||||
self.verticalLayout.addWidget(self.details)
|
||||
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
|
||||
self.vboxlayout2.addWidget(self.scrollArea)
|
||||
self.vboxlayout.addWidget(self.splitter)
|
||||
|
||||
self.retranslateUi(PluginsOptionsPage)
|
||||
QtCore.QMetaObject.connectSlotsByName(PluginsOptionsPage)
|
||||
|
||||
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"))
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/options_plugins.ui'
|
||||
#
|
||||
# Created: Mon Jun 20 19:52:58 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_PluginsOptionsPage(object):
|
||||
def setupUi(self, PluginsOptionsPage):
|
||||
PluginsOptionsPage.setObjectName("PluginsOptionsPage")
|
||||
PluginsOptionsPage.resize(513, 312)
|
||||
self.vboxlayout = QtGui.QVBoxLayout(PluginsOptionsPage)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.splitter = QtGui.QSplitter(PluginsOptionsPage)
|
||||
self.splitter.setOrientation(QtCore.Qt.Vertical)
|
||||
self.splitter.setHandleWidth(2)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.groupBox_2 = QtGui.QGroupBox(self.splitter)
|
||||
self.groupBox_2.setObjectName("groupBox_2")
|
||||
self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox_2)
|
||||
self.vboxlayout1.setSpacing(2)
|
||||
self.vboxlayout1.setObjectName("vboxlayout1")
|
||||
self.plugins = QtGui.QTreeWidget(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHeightForWidth(self.plugins.sizePolicy().hasHeightForWidth())
|
||||
self.plugins.setSizePolicy(sizePolicy)
|
||||
self.plugins.setAcceptDrops(True)
|
||||
self.plugins.setDragDropMode(QtGui.QAbstractItemView.DropOnly)
|
||||
self.plugins.setRootIsDecorated(False)
|
||||
self.plugins.setObjectName("plugins")
|
||||
self.vboxlayout1.addWidget(self.plugins)
|
||||
self.horizontalLayout = QtGui.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.install_plugin = QtGui.QPushButton(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHeightForWidth(self.install_plugin.sizePolicy().hasHeightForWidth())
|
||||
self.install_plugin.setSizePolicy(sizePolicy)
|
||||
self.install_plugin.setObjectName("install_plugin")
|
||||
self.horizontalLayout.addWidget(self.install_plugin)
|
||||
self.folder_open = QtGui.QPushButton(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHeightForWidth(self.folder_open.sizePolicy().hasHeightForWidth())
|
||||
self.folder_open.setSizePolicy(sizePolicy)
|
||||
self.folder_open.setObjectName("folder_open")
|
||||
self.horizontalLayout.addWidget(self.folder_open)
|
||||
self.plugin_download = QtGui.QPushButton(self.groupBox_2)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
sizePolicy.setHeightForWidth(self.plugin_download.sizePolicy().hasHeightForWidth())
|
||||
self.plugin_download.setSizePolicy(sizePolicy)
|
||||
self.plugin_download.setObjectName("plugin_download")
|
||||
self.horizontalLayout.addWidget(self.plugin_download)
|
||||
self.vboxlayout1.addLayout(self.horizontalLayout)
|
||||
self.groupBox = QtGui.QGroupBox(self.splitter)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox.setSizePolicy(sizePolicy)
|
||||
self.groupBox.setObjectName("groupBox")
|
||||
self.vboxlayout2 = QtGui.QVBoxLayout(self.groupBox)
|
||||
self.vboxlayout2.setSpacing(0)
|
||||
self.vboxlayout2.setObjectName("vboxlayout2")
|
||||
self.scrollArea = QtGui.QScrollArea(self.groupBox)
|
||||
self.scrollArea.setEnabled(True)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
|
||||
self.scrollArea.setSizePolicy(sizePolicy)
|
||||
self.scrollArea.setFrameShape(QtGui.QFrame.HLine)
|
||||
self.scrollArea.setFrameShadow(QtGui.QFrame.Plain)
|
||||
self.scrollArea.setLineWidth(0)
|
||||
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.scrollArea.setObjectName("scrollArea")
|
||||
self.scrollAreaWidgetContents = QtGui.QWidget()
|
||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 459, 76))
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())
|
||||
self.scrollAreaWidgetContents.setSizePolicy(sizePolicy)
|
||||
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
||||
self.verticalLayout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
|
||||
self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
|
||||
self.verticalLayout.setContentsMargins(0, 0, 6, 0)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.details = QtGui.QLabel(self.scrollAreaWidgetContents)
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
sizePolicy.setHeightForWidth(self.details.sizePolicy().hasHeightForWidth())
|
||||
self.details.setSizePolicy(sizePolicy)
|
||||
self.details.setFrameShape(QtGui.QFrame.Box)
|
||||
self.details.setLineWidth(0)
|
||||
self.details.setText("")
|
||||
self.details.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
|
||||
self.details.setWordWrap(True)
|
||||
self.details.setIndent(0)
|
||||
self.details.setOpenExternalLinks(True)
|
||||
self.details.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.details.setObjectName("details")
|
||||
self.verticalLayout.addWidget(self.details)
|
||||
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
|
||||
self.vboxlayout2.addWidget(self.scrollArea)
|
||||
self.vboxlayout.addWidget(self.splitter)
|
||||
|
||||
self.retranslateUi(PluginsOptionsPage)
|
||||
QtCore.QMetaObject.connectSlotsByName(PluginsOptionsPage)
|
||||
|
||||
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.install_plugin.setText(_(u"Install plugin…"))
|
||||
self.folder_open.setText(_("Open plugin folder"))
|
||||
self.plugin_download.setText(_("Download plugins"))
|
||||
self.groupBox.setTitle(_("Details"))
|
||||
|
||||
|
||||
220
picard/ui/ui_options_releases.py
Normal file
220
picard/ui/ui_options_releases.py
Normal 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("<")
|
||||
|
||||
@@ -6,26 +6,17 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>382</width>
|
||||
<height>498</height>
|
||||
<width>413</width>
|
||||
<height>612</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="rename_files">
|
||||
<property name="title">
|
||||
<string>Thresholds</string>
|
||||
</property>
|
||||
<layout class="QGridLayout">
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
@@ -110,265 +101,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</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>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,17 +6,11 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>406</width>
|
||||
<height>297</height>
|
||||
<width>513</width>
|
||||
<height>312</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
@@ -33,9 +27,6 @@
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="plugins">
|
||||
<property name="sizePolicy">
|
||||
@@ -44,6 +35,12 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="acceptDrops">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DropOnly</enum>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
@@ -66,6 +63,19 @@
|
||||
</item>
|
||||
<item>
|
||||
<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>
|
||||
<widget class="QPushButton" name="folder_open">
|
||||
<property name="sizePolicy">
|
||||
@@ -110,9 +120,6 @@
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="enabled">
|
||||
@@ -147,8 +154,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>368</width>
|
||||
<height>69</height>
|
||||
<width>459</width>
|
||||
<height>76</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
|
||||
430
ui/options_releases.ui
Normal file
430
ui/options_releases.ui
Normal 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>></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="remove_countries">
|
||||
<property name="text">
|
||||
<string><</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>></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="remove_formats">
|
||||
<property name="text">
|
||||
<string><</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>
|
||||
Reference in New Issue
Block a user