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
|
# 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):
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
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.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()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user