[#138] Added a crude-but-functional reprioritization dialog in Qt.

This commit is contained in:
Virgil Dupras 2011-09-09 12:01:15 -04:00
parent 2dc588e0fd
commit b65c9b8c9a
5 changed files with 74 additions and 7 deletions

View File

@ -6,14 +6,14 @@
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
from hscommon.gui.selectable_list import SelectableList
from hscommon.gui.selectable_list import GUISelectableList
from ..prioritize import all_categories
class CriterionCategoryList(SelectableList):
class CriterionCategoryList(GUISelectableList):
def __init__(self, dialog):
self.dialog = dialog
SelectableList.__init__(self, [c.NAME for c in dialog.categories])
GUISelectableList.__init__(self, [c.NAME for c in dialog.categories])
def _update_selection(self):
self.dialog.select_category(self.dialog.categories[self.selected_index])
@ -25,9 +25,9 @@ class PrioritizeDialog:
self.categories = [cat(app.results) for cat in all_categories()]
self.category_list = CriterionCategoryList(self)
self.criteria = []
self.criteria_list = SelectableList()
self.criteria_list = GUISelectableList()
self.prioritizations = []
self.prioritization_list = SelectableList()
self.prioritization_list = GUISelectableList()
#--- Private
def _sort_key(self, dupe):

View File

@ -46,7 +46,7 @@ class Criterion:
@property
def display(self):
return "{} ({})".format(self.category.NAME, self.value)
return "{} ({})".format(self.category.NAME, self.display_value)
class KindCategory(CriterionCategory):

View File

@ -76,9 +76,13 @@ def test_prilist_display(app):
app.select_pri_criterion("Folder")
app.pdialog.criteria_list.select([1]) # folder2
app.pdialog.add_selected()
app.select_pri_criterion("Size")
app.pdialog.criteria_list.select([1]) # Lowest
app.pdialog.add_selected()
expected = [
"Kind (ext2)",
"Folder (folder2)",
"Size (Lowest)",
]
eq_(app.pdialog.prioritization_list[:], expected)

View File

@ -0,0 +1,54 @@
# Created By: Virgil Dupras
# Created On: 2011-09-06
# Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
#
# This software is licensed under the "BSD" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
from PyQt4.QtCore import Qt
from PyQt4.QtGui import (QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QListView,
QDialogButtonBox)
from hscommon.trans import tr
from qtlib.selectable_list import ComboboxModel, ListviewModel
from core.gui.prioritize_dialog import PrioritizeDialog as PrioritizeDialogModel
class PrioritizeDialog(QDialog):
def __init__(self, parent, app):
flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint
QDialog.__init__(self, parent, flags)
self.app = app
self._setupUi()
self.model = PrioritizeDialogModel(view=self, app=app)
self.categoryList = ComboboxModel(model=self.model.category_list, view=self.categoryCombobox)
self.criteriaList = ListviewModel(model=self.model.criteria_list, view=self.criteriaListView)
self.prioritizationList = ListviewModel(model=self.model.prioritization_list, view=self.prioritizationListView)
self.addCriteriaButton.clicked.connect(self.model.add_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)
#widgets
self.categoryCombobox = QComboBox()
self.criteriaListView = QListView()
self.addCriteriaButton = QPushButton("-->")
self.prioritizationListView = QListView()
self.buttonBox = QDialogButtonBox()
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
# layout
self.mainLayout = QVBoxLayout(self)
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.widgetsLayout.addWidget(self.prioritizationListView)
self.mainLayout.addLayout(self.widgetsLayout)
self.mainLayout.addWidget(self.buttonBox)

View File

@ -11,7 +11,7 @@ import sys
from PyQt4.QtCore import Qt, SIGNAL, QUrl, QRect
from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QHeaderView, QMessageBox, QInputDialog,
QLineEdit, QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView,
QStatusBar)
QStatusBar, QDialog)
from hscommon.trans import tr, trmsg
from hscommon.util import nonone
@ -20,6 +20,7 @@ from qtlib.util import moveToScreenCenter
from .results_model import ResultsModel, ResultsView
from .stats_label import StatsLabel
from .util import createActions
from .prioritize_dialog import PrioritizeDialog
class ResultWindow(QMainWindow):
def __init__(self, app):
@ -49,6 +50,7 @@ class ResultWindow(QMainWindow):
('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered),
('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered),
('actionRemoveMarked', 'Ctrl+R', '', tr("Remove Marked from Results"), self.removeMarkedTriggered),
('actionReprioritize', '', '', tr("Re-Prioritize..."), self.reprioritizeTriggered),
('actionRemoveSelected', 'Ctrl+Del', '', tr("Remove Selected from Results"), self.removeSelectedTriggered),
('actionIgnoreSelected', 'Ctrl+Shift+Del', '', tr("Add Selected to Ignore List"), self.addToIgnoreListTriggered),
('actionMakeSelectedReference', 'Ctrl+Space', '', tr("Make Selected Reference"), self.makeReferenceTriggered),
@ -95,6 +97,7 @@ class ResultWindow(QMainWindow):
self.menuActions.addAction(self.actionMoveMarked)
self.menuActions.addAction(self.actionCopyMarked)
self.menuActions.addAction(self.actionRemoveMarked)
self.menuActions.addAction(self.actionReprioritize)
self.menuActions.addSeparator()
self.menuActions.addAction(self.actionRemoveSelected)
self.menuActions.addAction(self.actionIgnoreSelected)
@ -327,6 +330,12 @@ class ResultWindow(QMainWindow):
def renameTriggered(self):
self.resultsView.edit(self.resultsView.selectionModel().currentIndex())
def reprioritizeTriggered(self):
dlg = PrioritizeDialog(self, self.app)
result = dlg.exec()
if result == QDialog.Accepted:
dlg.model.perform_reprioritization()
def revealTriggered(self):
self.app.reveal_selected()