mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
[#138] Added a crude-but-functional reprioritization dialog in Qt.
This commit is contained in:
parent
2dc588e0fd
commit
b65c9b8c9a
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
||||
|
54
qt/base/prioritize_dialog.py
Normal file
54
qt/base/prioritize_dialog.py
Normal 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)
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user