diff --git a/picard/ui/options/releases.py b/picard/ui/options/releases.py
index 0b3726dab..e95808691 100644
--- a/picard/ui/options/releases.py
+++ b/picard/ui/options/releases.py
@@ -24,7 +24,65 @@ from picard import config
from picard.util import load_release_type_scores, save_release_type_scores
from picard.ui.options import OptionsPage, register_options_page
from picard.ui.ui_options_releases import Ui_ReleasesOptionsPage
-from picard.const import RELEASE_COUNTRIES, RELEASE_FORMATS
+from picard.const import (RELEASE_COUNTRIES,
+ RELEASE_FORMATS,
+ RELEASE_PRIMARY_GROUPS,
+ RELEASE_SECONDARY_GROUPS)
+from picard.i18n import ugettext_attr
+
+
+_DEFAULT_SCORE = 0.5
+_release_type_scores = save_release_type_scores(dict([(g, _DEFAULT_SCORE) for g
+ in
+ RELEASE_PRIMARY_GROUPS.keys()
+ +
+ RELEASE_SECONDARY_GROUPS.keys()]))
+
+
+class ReleaseTypeScore:
+
+ def __init__(self, group, layout, label, cell):
+ row, column = cell #it uses 2 cells (r,c and r,c+1)
+ self.group = group
+ self.layout = layout
+ self.label = QtGui.QLabel(self.group)
+ self.label.setText(label)
+ self.layout.addWidget(self.label, row, column, 1, 1)
+ self.slider = QtGui.QSlider(self.group)
+ self.slider.setMaximum(100)
+ self.slider.setOrientation(QtCore.Qt.Horizontal)
+ self.layout.addWidget(self.slider, row, column + 1, 1, 1)
+ self.reset()
+
+ def setValue(self, value):
+ self.slider.setValue(int(value * 100))
+
+ def value(self):
+ return float(self.slider.value()) / 100.0
+
+ def reset(self):
+ self.setValue(_DEFAULT_SCORE)
+
+
+class RowColIter:
+ def __init__(self, max_cells, max_cols=6, step=2):
+ assert(max_cols % step == 0)
+ self.step = step
+ self.cols = max_cols
+ self.rows = int((max_cells - 1) / (self.cols / step)) + 1
+ self.current = (-1, 0)
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ row, col = self.current
+ row += 1
+ if row == self.rows:
+ col += self.step
+ row = 0
+ self.current = (row, col)
+ return self.current
class ReleasesOptionsPage(OptionsPage):
@@ -36,29 +94,43 @@ class ReleasesOptionsPage(OptionsPage):
ACTIVE = True
options = [
- config.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"),
+ config.TextOption("setting", "release_type_scores", _release_type_scores),
config.ListOption("setting", "preferred_release_countries", []),
config.ListOption("setting", "preferred_release_formats", []),
]
- _release_type_sliders = {}
def __init__(self, parent=None):
super(ReleasesOptionsPage, self).__init__(parent)
self.ui = Ui_ReleasesOptionsPage()
self.ui.setupUi(self)
- self.ui.reset_preferred_types_btn.clicked.connect(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._release_type_sliders = {}
+ def add_slider(name, griditer, context):
+ label = ugettext_attr(name, context)
+ self._release_type_sliders[name] = \
+ ReleaseTypeScore(self.ui.type_group,
+ self.ui.gridLayout,
+ label,
+ griditer.next())
+
+ griditer = RowColIter(len(RELEASE_PRIMARY_GROUPS) +
+ len(RELEASE_SECONDARY_GROUPS) + 1) # +1 for Reset button
+ for name in RELEASE_PRIMARY_GROUPS:
+ add_slider(name, griditer, context=u'release_group_primary_type')
+ for name in RELEASE_SECONDARY_GROUPS:
+ add_slider(name, griditer, context=u'release_group_secondary_type')
+
+ self.reset_preferred_types_btn = QtGui.QPushButton(self.ui.type_group)
+ self.reset_preferred_types_btn.setText(_("Reset all"))
+ sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, 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)
+ r, c = griditer.next()
+ self.ui.gridLayout.addWidget(self.reset_preferred_types_btn, r, c, 1, 2)
+ self.reset_preferred_types_btn.clicked.connect(self.reset_preferred_types)
self.ui.add_countries.clicked.connect(self.add_preferred_countries)
self.ui.remove_countries.clicked.connect(self.remove_preferred_countries)
@@ -72,7 +144,8 @@ class ReleasesOptionsPage(OptionsPage):
def load(self):
scores = load_release_type_scores(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))
+ release_type_slider.setValue(scores.get(release_type,
+ _DEFAULT_SCORE))
self._load_list_items("preferred_release_countries", RELEASE_COUNTRIES,
self.ui.country_list, self.ui.preferred_country_list)
@@ -82,7 +155,7 @@ class ReleasesOptionsPage(OptionsPage):
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
+ scores[release_type] = release_type_slider.value()
config.setting["release_type_scores"] = save_release_type_scores(scores)
self._save_list_items("preferred_release_countries", self.ui.preferred_country_list)
@@ -90,7 +163,7 @@ class ReleasesOptionsPage(OptionsPage):
def reset_preferred_types(self):
for release_type_slider in self._release_type_sliders.values():
- release_type_slider.setValue(50)
+ release_type_slider.reset()
def add_preferred_countries(self):
self._move_selected_items(self.ui.country_list, self.ui.preferred_country_list)
@@ -114,7 +187,11 @@ class ReleasesOptionsPage(OptionsPage):
def _load_list_items(self, setting, source, list1, list2):
if setting == "preferred_release_countries":
- source_list = [(c[0], ugettext_countries(c[1])) for c in source.items()]
+ source_list = [(c[0], ugettext_countries(c[1])) for c in
+ source.items()]
+ elif setting == "preferred_release_formats":
+ source_list = [(c[0], ugettext_attr(c[1], u"medium_format")) for c
+ in source.items()]
else:
source_list = [(c[0], _(c[1])) for c in source.items()]
source_list.sort(key=itemgetter(1), cmp=strcoll)
diff --git a/picard/ui/ui_options_releases.py b/picard/ui/ui_options_releases.py
index caa8f85c4..650631cc3 100644
--- a/picard/ui/ui_options_releases.py
+++ b/picard/ui/ui_options_releases.py
@@ -21,113 +21,6 @@ class Ui_ReleasesOptionsPage(object):
self.gridLayout = QtGui.QGridLayout(self.type_group)
self.gridLayout.setVerticalSpacing(6)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.label = QtGui.QLabel(self.type_group)
- self.label.setObjectName(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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(_fromUtf8("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.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(_fromUtf8("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(_fromUtf8("country_group"))
@@ -209,18 +102,6 @@ class Ui_ReleasesOptionsPage(object):
def retranslateUi(self, ReleasesOptionsPage):
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(_("<"))
diff --git a/ui/options_releases.ui b/ui/options_releases.ui
index f4a1de70f..2366b883e 100644
--- a/ui/options_releases.ui
+++ b/ui/options_releases.ui
@@ -20,239 +20,6 @@
6
- -
-
-
- Album
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Single
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- EP
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Compilation
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Soundtrack
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Spokenword
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Interview
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Audiobook
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Live
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Remix
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- Other
-
-
-
- -
-
-
- 100
-
-
- 50
-
-
- Qt::Horizontal
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Reset all
-
-
-