From cf606a494ce4a1786d48c5e98927cf352f54f712 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 12 Sep 2011 11:05:53 -0400 Subject: [PATCH] [#138] Added a prompt label and a remove button to the reprioritization dialog (Qt). --- core/gui/prioritize_dialog.py | 14 +++++++++++++- core/tests/prioritize_test.py | 11 +++++++++++ qt/base/prioritize_dialog.py | 20 +++++++++++++++++--- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/core/gui/prioritize_dialog.py b/core/gui/prioritize_dialog.py index 24ad4367..d6ef88bd 100644 --- a/core/gui/prioritize_dialog.py +++ b/core/gui/prioritize_dialog.py @@ -23,6 +23,9 @@ class PrioritizationList(GUISelectableList): self.dialog = dialog GUISelectableList.__init__(self) + def _refresh_contents(self): + self[:] = [crit.display for crit in self.dialog.prioritizations] + def move_indexes(self, indexes, dest_index): indexes.sort() prilist = self.dialog.prioritizations @@ -30,7 +33,13 @@ class PrioritizationList(GUISelectableList): for i in reversed(indexes): del prilist[i] prilist[dest_index:dest_index] = selected - self[:] = [crit.display for crit in prilist] + self._refresh_contents() + + def remove_selected(self): + prilist = self.dialog.prioritizations + for i in sorted(self.selected_indexes, reverse=True): + del prilist[i] + self._refresh_contents() class PrioritizeDialog: def __init__(self, view, app): @@ -57,5 +66,8 @@ class PrioritizeDialog: self.prioritizations.append(crit) self.prioritization_list[:] = [crit.display for crit in self.prioritizations] + def remove_selected(self): + self.prioritization_list.remove_selected() + def perform_reprioritization(self): self.app.reprioritize_groups(self._sort_key) diff --git a/core/tests/prioritize_test.py b/core/tests/prioritize_test.py index e4275a20..b421c36e 100644 --- a/core/tests/prioritize_test.py +++ b/core/tests/prioritize_test.py @@ -111,6 +111,17 @@ def test_reorder_prioritizations(app): ] eq_(app.pdialog.prioritization_list[:], expected) +@with_app(app_normal_results) +def test_remove_crit_from_list(app): + app.add_pri_criterion("Kind", 0) + app.add_pri_criterion("Kind", 1) + app.pdialog.prioritization_list.select(0) + app.pdialog.remove_selected() + expected = [ + "Kind (ext2)", + ] + eq_(app.pdialog.prioritization_list[:], expected) + #--- def app_one_name_ends_with_number(): dupes = [ diff --git a/qt/base/prioritize_dialog.py b/qt/base/prioritize_dialog.py index fd6bac85..5118fbe1 100644 --- a/qt/base/prioritize_dialog.py +++ b/qt/base/prioritize_dialog.py @@ -8,10 +8,11 @@ from PyQt4.QtCore import Qt, QMimeData, QByteArray from PyQt4.QtGui import (QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QListView, - QDialogButtonBox, QAbstractItemView) + QDialogButtonBox, QAbstractItemView, QLabel) from hscommon.trans import tr from qtlib.selectable_list import ComboboxModel, ListviewModel +from qtlib.util import verticalSpacer from core.gui.prioritize_dialog import PrioritizeDialog as PrioritizeDialogModel MIME_INDEXES = 'application/dupeguru.rowindexes' @@ -60,16 +61,23 @@ class PrioritizeDialog(QDialog): self.prioritizationList = PrioritizationList(model=self.model.prioritization_list, view=self.prioritizationListView) self.addCriteriaButton.clicked.connect(self.model.add_selected) + self.removeCriteriaButton.clicked.connect(self.model.remove_selected) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) def _setupUi(self): self.setWindowTitle(tr("Re-prioritize duplicates")) - self.resize(413, 323) + self.resize(700, 400) #widgets + msg = tr("Add criteria to the right box and click OK to send the dupes that correspond the " + "best to these criteria to their respective group's " + "reference position. Read the help file for more information.") + self.promptLabel = QLabel(msg) + self.promptLabel.setWordWrap(True) self.categoryCombobox = QComboBox() self.criteriaListView = QListView() + self.removeCriteriaButton = QPushButton("<--") self.addCriteriaButton = QPushButton("-->") self.prioritizationListView = QListView() self.prioritizationListView.setAcceptDrops(True) @@ -81,12 +89,18 @@ class PrioritizeDialog(QDialog): # layout self.mainLayout = QVBoxLayout(self) + self.mainLayout.addWidget(self.promptLabel) self.widgetsLayout = QHBoxLayout() self.leftWidgetsLayout = QVBoxLayout() self.leftWidgetsLayout.addWidget(self.categoryCombobox) self.leftWidgetsLayout.addWidget(self.criteriaListView) self.widgetsLayout.addLayout(self.leftWidgetsLayout) - self.widgetsLayout.addWidget(self.addCriteriaButton) + self.addRemoveButtonsLayout = QVBoxLayout() + self.addRemoveButtonsLayout.addItem(verticalSpacer()) + self.addRemoveButtonsLayout.addWidget(self.removeCriteriaButton) + self.addRemoveButtonsLayout.addWidget(self.addCriteriaButton) + self.addRemoveButtonsLayout.addItem(verticalSpacer()) + self.widgetsLayout.addLayout(self.addRemoveButtonsLayout) self.widgetsLayout.addWidget(self.prioritizationListView) self.mainLayout.addLayout(self.widgetsLayout) self.mainLayout.addWidget(self.buttonBox)