mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
Improved Qt UI by adding a couple of widgets at the top of the results window.
Theres; now an Actions button, delta/dupes only checkboxes and a search field. Apply/Cancel filter menu items are gone.
This commit is contained in:
parent
70f88ba39c
commit
dd70bd6d41
@ -11,5 +11,6 @@
|
|||||||
<file alias="logo_se_big">../../images/dgse_logo_128.png</file>
|
<file alias="logo_se_big">../../images/dgse_logo_128.png</file>
|
||||||
<file alias="plus">../../images/plus_8.png</file>
|
<file alias="plus">../../images/plus_8.png</file>
|
||||||
<file alias="minus">../../images/minus_8.png</file>
|
<file alias="minus">../../images/minus_8.png</file>
|
||||||
|
<file alias="search_clear_13">../../qtlib/images/search_clear_13.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
@ -9,12 +9,13 @@
|
|||||||
from PyQt4.QtCore import Qt, QUrl, QRect
|
from PyQt4.QtCore import Qt, QUrl, QRect
|
||||||
from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QMessageBox, QInputDialog, QLineEdit,
|
from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QMessageBox, QInputDialog, QLineEdit,
|
||||||
QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView, QStatusBar,
|
QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView, QStatusBar,
|
||||||
QDialog, QAction)
|
QDialog, QAction, QPushButton, QCheckBox)
|
||||||
|
|
||||||
from hscommon.plat import ISOSX, ISLINUX
|
from hscommon.plat import ISOSX, ISLINUX
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from hscommon.util import nonone
|
from hscommon.util import nonone
|
||||||
from qtlib.util import moveToScreenCenter
|
from qtlib.util import moveToScreenCenter, horizontalWrap
|
||||||
|
from qtlib.search_edit import SearchEdit
|
||||||
|
|
||||||
from .results_model import ResultsView
|
from .results_model import ResultsView
|
||||||
from .stats_label import StatsLabel
|
from .stats_label import StatsLabel
|
||||||
@ -27,7 +28,6 @@ class ResultWindow(QMainWindow):
|
|||||||
def __init__(self, app):
|
def __init__(self, app):
|
||||||
QMainWindow.__init__(self, None)
|
QMainWindow.__init__(self, None)
|
||||||
self.app = app
|
self.app = app
|
||||||
self._last_filter = None
|
|
||||||
self._setupUi()
|
self._setupUi()
|
||||||
self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView)
|
self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView)
|
||||||
self.stats = StatsLabel(app.model.stats_label, self.statusLabel)
|
self.stats = StatsLabel(app.model.stats_label, self.statusLabel)
|
||||||
@ -36,6 +36,10 @@ class ResultWindow(QMainWindow):
|
|||||||
self.menuColumns.triggered[QAction].connect(self.columnToggled)
|
self.menuColumns.triggered[QAction].connect(self.columnToggled)
|
||||||
self.resultsView.doubleClicked.connect(self.resultsDoubleClicked)
|
self.resultsView.doubleClicked.connect(self.resultsDoubleClicked)
|
||||||
self.resultsView.spacePressed.connect(self.resultsSpacePressed)
|
self.resultsView.spacePressed.connect(self.resultsSpacePressed)
|
||||||
|
self.detailsButton.clicked.connect(self.actionDetails.triggered)
|
||||||
|
self.dupesOnlyCheckBox.stateChanged.connect(self.powerMarkerTriggered)
|
||||||
|
self.deltaValuesCheckBox.stateChanged.connect(self.deltaTriggered)
|
||||||
|
self.searchEdit.searchChanged.connect(self.searchChanged)
|
||||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||||
|
|
||||||
def _setupActions(self):
|
def _setupActions(self):
|
||||||
@ -62,8 +66,6 @@ class ResultWindow(QMainWindow):
|
|||||||
('actionInvertMarking', 'Ctrl+Alt+A', '', tr("Invert Marking"), self.markInvertTriggered),
|
('actionInvertMarking', 'Ctrl+Alt+A', '', tr("Invert Marking"), self.markInvertTriggered),
|
||||||
('actionMarkSelected', '', '', tr("Mark Selected"), self.markSelectedTriggered),
|
('actionMarkSelected', '', '', tr("Mark Selected"), self.markSelectedTriggered),
|
||||||
('actionClearIgnoreList', '', '', tr("Clear Ignore List"), self.clearIgnoreListTriggered),
|
('actionClearIgnoreList', '', '', tr("Clear Ignore List"), self.clearIgnoreListTriggered),
|
||||||
('actionApplyFilter', 'Ctrl+F', '', tr("Apply Filter"), self.applyFilterTriggered),
|
|
||||||
('actionCancelFilter', 'Ctrl+Shift+F', '', tr("Cancel Filter"), self.cancelFilterTriggered),
|
|
||||||
('actionExport', '', '', tr("Export To HTML"), self.exportTriggered),
|
('actionExport', '', '', tr("Export To HTML"), self.exportTriggered),
|
||||||
('actionSaveResults', 'Ctrl+S', '', tr("Save Results..."), self.saveResultsTriggered),
|
('actionSaveResults', 'Ctrl+S', '', tr("Save Results..."), self.saveResultsTriggered),
|
||||||
('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', tr("Invoke Custom Command"), self.app.invokeCustomCommand),
|
('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', tr("Invoke Custom Command"), self.app.invokeCustomCommand),
|
||||||
@ -107,9 +109,6 @@ class ResultWindow(QMainWindow):
|
|||||||
self.menuActions.addAction(self.actionRevealSelected)
|
self.menuActions.addAction(self.actionRevealSelected)
|
||||||
self.menuActions.addAction(self.actionInvokeCustomCommand)
|
self.menuActions.addAction(self.actionInvokeCustomCommand)
|
||||||
self.menuActions.addAction(self.actionRenameSelected)
|
self.menuActions.addAction(self.actionRenameSelected)
|
||||||
self.menuActions.addSeparator()
|
|
||||||
self.menuActions.addAction(self.actionApplyFilter)
|
|
||||||
self.menuActions.addAction(self.actionCancelFilter)
|
|
||||||
self.menuMark.addAction(self.actionMarkAll)
|
self.menuMark.addAction(self.actionMarkAll)
|
||||||
self.menuMark.addAction(self.actionMarkNone)
|
self.menuMark.addAction(self.actionMarkNone)
|
||||||
self.menuMark.addAction(self.actionInvertMarking)
|
self.menuMark.addAction(self.actionInvertMarking)
|
||||||
@ -167,13 +166,25 @@ class ResultWindow(QMainWindow):
|
|||||||
actionMenu.addAction(self.actionInvokeCustomCommand)
|
actionMenu.addAction(self.actionInvokeCustomCommand)
|
||||||
actionMenu.addAction(self.actionRenameSelected)
|
actionMenu.addAction(self.actionRenameSelected)
|
||||||
self.actionActions.setMenu(actionMenu)
|
self.actionActions.setMenu(actionMenu)
|
||||||
|
self.actionsButton.setMenu(self.actionActions.menu())
|
||||||
|
|
||||||
def _setupUi(self):
|
def _setupUi(self):
|
||||||
self.setWindowTitle(tr("{} Results").format(self.app.NAME))
|
self.setWindowTitle(tr("{} Results").format(self.app.NAME))
|
||||||
self.resize(630, 514)
|
self.resize(630, 514)
|
||||||
self.centralwidget = QWidget(self)
|
self.centralwidget = QWidget(self)
|
||||||
self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
|
self.verticalLayout = QVBoxLayout(self.centralwidget)
|
||||||
self.verticalLayout_2.setMargin(0)
|
self.verticalLayout.setMargin(0)
|
||||||
|
self.verticalLayout.setSpacing(0)
|
||||||
|
self.actionsButton = QPushButton(tr("Actions"))
|
||||||
|
self.detailsButton = QPushButton(tr("Details"))
|
||||||
|
self.dupesOnlyCheckBox = QCheckBox(tr("Dupes Only"))
|
||||||
|
self.deltaValuesCheckBox = QCheckBox(tr("Delta Values"))
|
||||||
|
self.searchEdit = SearchEdit()
|
||||||
|
self.searchEdit.setMaximumWidth(300)
|
||||||
|
self.horizontalLayout = horizontalWrap([self.actionsButton, self.detailsButton,
|
||||||
|
self.dupesOnlyCheckBox, self.deltaValuesCheckBox, None, self.searchEdit, 8])
|
||||||
|
self.horizontalLayout.setSpacing(8)
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
self.resultsView = ResultsView(self.centralwidget)
|
self.resultsView = ResultsView(self.centralwidget)
|
||||||
self.resultsView.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
self.resultsView.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||||
self.resultsView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
self.resultsView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
@ -184,7 +195,7 @@ class ResultWindow(QMainWindow):
|
|||||||
h.setMovable(True)
|
h.setMovable(True)
|
||||||
h.setStretchLastSection(False)
|
h.setStretchLastSection(False)
|
||||||
h.setDefaultAlignment(Qt.AlignLeft)
|
h.setDefaultAlignment(Qt.AlignLeft)
|
||||||
self.verticalLayout_2.addWidget(self.resultsView)
|
self.verticalLayout.addWidget(self.resultsView)
|
||||||
self.setCentralWidget(self.centralwidget)
|
self.setCentralWidget(self.centralwidget)
|
||||||
self._setupActions()
|
self._setupActions()
|
||||||
self._setupMenu()
|
self._setupMenu()
|
||||||
@ -216,20 +227,6 @@ class ResultWindow(QMainWindow):
|
|||||||
def addToIgnoreListTriggered(self):
|
def addToIgnoreListTriggered(self):
|
||||||
self.app.model.add_selected_to_ignore_list()
|
self.app.model.add_selected_to_ignore_list()
|
||||||
|
|
||||||
def applyFilterTriggered(self):
|
|
||||||
title = tr("Apply Filter")
|
|
||||||
msg = tr("Type the filter you want to apply on your results. See help for details.")
|
|
||||||
text = nonone(self._last_filter, '[*]')
|
|
||||||
answer, ok = QInputDialog.getText(self, title, msg, QLineEdit.Normal, text)
|
|
||||||
if not ok:
|
|
||||||
return
|
|
||||||
answer = str(answer)
|
|
||||||
self.app.model.apply_filter(answer)
|
|
||||||
self._last_filter = answer
|
|
||||||
|
|
||||||
def cancelFilterTriggered(self):
|
|
||||||
self.app.model.apply_filter('')
|
|
||||||
|
|
||||||
def clearIgnoreListTriggered(self):
|
def clearIgnoreListTriggered(self):
|
||||||
title = tr("Clear Ignore List")
|
title = tr("Clear Ignore List")
|
||||||
count = len(self.app.model.scanner.ignore_list)
|
count = len(self.app.model.scanner.ignore_list)
|
||||||
@ -253,8 +250,11 @@ class ResultWindow(QMainWindow):
|
|||||||
if self.app.confirm(title, msg):
|
if self.app.confirm(title, msg):
|
||||||
self.app.model.delete_marked()
|
self.app.model.delete_marked()
|
||||||
|
|
||||||
def deltaTriggered(self):
|
def deltaTriggered(self, state=None):
|
||||||
self.resultsModel.delta_values = self.actionDelta.isChecked()
|
# The sender can be either the action or the checkbox, but both have a isChecked() method.
|
||||||
|
self.resultsModel.delta_values = self.sender().isChecked()
|
||||||
|
self.actionDelta.setChecked(self.resultsModel.delta_values)
|
||||||
|
self.deltaValuesCheckBox.setChecked(self.resultsModel.delta_values)
|
||||||
|
|
||||||
def detailsTriggered(self):
|
def detailsTriggered(self):
|
||||||
self.app.show_details()
|
self.app.show_details()
|
||||||
@ -294,8 +294,11 @@ class ResultWindow(QMainWindow):
|
|||||||
def openTriggered(self):
|
def openTriggered(self):
|
||||||
self.app.model.open_selected()
|
self.app.model.open_selected()
|
||||||
|
|
||||||
def powerMarkerTriggered(self):
|
def powerMarkerTriggered(self, state=None):
|
||||||
self.resultsModel.power_marker = self.actionPowerMarker.isChecked()
|
# see deltaTriggered
|
||||||
|
self.resultsModel.power_marker = self.sender().isChecked()
|
||||||
|
self.actionPowerMarker.setChecked(self.resultsModel.power_marker)
|
||||||
|
self.dupesOnlyCheckBox.setChecked(self.resultsModel.power_marker)
|
||||||
|
|
||||||
def preferencesTriggered(self):
|
def preferencesTriggered(self):
|
||||||
self.app.show_preferences()
|
self.app.show_preferences()
|
||||||
@ -358,3 +361,6 @@ class ResultWindow(QMainWindow):
|
|||||||
def resultsSpacePressed(self):
|
def resultsSpacePressed(self):
|
||||||
self.app.model.toggle_selected_mark_state()
|
self.app.model.toggle_selected_mark_state()
|
||||||
|
|
||||||
|
def searchChanged(self):
|
||||||
|
self.app.model.apply_filter(self.searchEdit.text())
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user