[#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 # which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license # 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 from ..prioritize import all_categories
class CriterionCategoryList(SelectableList): class CriterionCategoryList(GUISelectableList):
def __init__(self, dialog): def __init__(self, dialog):
self.dialog = 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): def _update_selection(self):
self.dialog.select_category(self.dialog.categories[self.selected_index]) 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.categories = [cat(app.results) for cat in all_categories()]
self.category_list = CriterionCategoryList(self) self.category_list = CriterionCategoryList(self)
self.criteria = [] self.criteria = []
self.criteria_list = SelectableList() self.criteria_list = GUISelectableList()
self.prioritizations = [] self.prioritizations = []
self.prioritization_list = SelectableList() self.prioritization_list = GUISelectableList()
#--- Private #--- Private
def _sort_key(self, dupe): def _sort_key(self, dupe):

View File

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

View File

@ -76,9 +76,13 @@ def test_prilist_display(app):
app.select_pri_criterion("Folder") app.select_pri_criterion("Folder")
app.pdialog.criteria_list.select([1]) # folder2 app.pdialog.criteria_list.select([1]) # folder2
app.pdialog.add_selected() app.pdialog.add_selected()
app.select_pri_criterion("Size")
app.pdialog.criteria_list.select([1]) # Lowest
app.pdialog.add_selected()
expected = [ expected = [
"Kind (ext2)", "Kind (ext2)",
"Folder (folder2)", "Folder (folder2)",
"Size (Lowest)",
] ]
eq_(app.pdialog.prioritization_list[:], expected) 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.QtCore import Qt, SIGNAL, QUrl, QRect
from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QHeaderView, QMessageBox, QInputDialog, from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QHeaderView, QMessageBox, QInputDialog,
QLineEdit, QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView, QLineEdit, QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView,
QStatusBar) QStatusBar, QDialog)
from hscommon.trans import tr, trmsg from hscommon.trans import tr, trmsg
from hscommon.util import nonone from hscommon.util import nonone
@ -20,6 +20,7 @@ from qtlib.util import moveToScreenCenter
from .results_model import ResultsModel, ResultsView from .results_model import ResultsModel, ResultsView
from .stats_label import StatsLabel from .stats_label import StatsLabel
from .util import createActions from .util import createActions
from .prioritize_dialog import PrioritizeDialog
class ResultWindow(QMainWindow): class ResultWindow(QMainWindow):
def __init__(self, app): def __init__(self, app):
@ -49,6 +50,7 @@ class ResultWindow(QMainWindow):
('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered), ('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered),
('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered), ('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered),
('actionRemoveMarked', 'Ctrl+R', '', tr("Remove Marked from Results"), self.removeMarkedTriggered), ('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), ('actionRemoveSelected', 'Ctrl+Del', '', tr("Remove Selected from Results"), self.removeSelectedTriggered),
('actionIgnoreSelected', 'Ctrl+Shift+Del', '', tr("Add Selected to Ignore List"), self.addToIgnoreListTriggered), ('actionIgnoreSelected', 'Ctrl+Shift+Del', '', tr("Add Selected to Ignore List"), self.addToIgnoreListTriggered),
('actionMakeSelectedReference', 'Ctrl+Space', '', tr("Make Selected Reference"), self.makeReferenceTriggered), ('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.actionMoveMarked)
self.menuActions.addAction(self.actionCopyMarked) self.menuActions.addAction(self.actionCopyMarked)
self.menuActions.addAction(self.actionRemoveMarked) self.menuActions.addAction(self.actionRemoveMarked)
self.menuActions.addAction(self.actionReprioritize)
self.menuActions.addSeparator() self.menuActions.addSeparator()
self.menuActions.addAction(self.actionRemoveSelected) self.menuActions.addAction(self.actionRemoveSelected)
self.menuActions.addAction(self.actionIgnoreSelected) self.menuActions.addAction(self.actionIgnoreSelected)
@ -327,6 +330,12 @@ class ResultWindow(QMainWindow):
def renameTriggered(self): def renameTriggered(self):
self.resultsView.edit(self.resultsView.selectionModel().currentIndex()) 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): def revealTriggered(self):
self.app.reveal_selected() self.app.reveal_selected()