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 - - -