mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
Straightened out actions pictures and keybindings, added a Recent Folders menu and a link to Recent Results menu in a dialog button.
This commit is contained in:
parent
d51f5184d7
commit
92970489c5
@ -57,6 +57,8 @@ class DupeGuru(DupeGuruBase, QObject):
|
||||
self.prefs = self._create_preferences()
|
||||
self.prefs.load()
|
||||
self._update_options()
|
||||
self.recentResults = Recent(self, 'recentResults')
|
||||
self.recentResults.mustOpenItem.connect(self.load_from)
|
||||
self.resultWindow = self._create_result_window()
|
||||
self._progress = Progress(self.resultWindow)
|
||||
self.directories_dialog = DirectoriesDialog(self.resultWindow, self)
|
||||
@ -65,8 +67,6 @@ class DupeGuru(DupeGuruBase, QObject):
|
||||
self.preferences_dialog = self._create_preferences_dialog(self.resultWindow)
|
||||
self.about_box = AboutBox(self.resultWindow, self)
|
||||
|
||||
self.recentResults = Recent(self, self.directories_dialog.menuLoadRecent, 'recentResults')
|
||||
self.recentResults.mustOpenItem.connect(self.load_from)
|
||||
|
||||
self.reg = Registration(self)
|
||||
self.set_registration(self.prefs.registration_code, self.prefs.registration_email)
|
||||
@ -87,7 +87,7 @@ class DupeGuru(DupeGuruBase, QObject):
|
||||
# (name, shortcut, icon, desc, func)
|
||||
ACTIONS = [
|
||||
('actionQuit', 'Ctrl+Q', '', "Quit", self.quitTriggered),
|
||||
('actionPreferences', 'Ctrl+5', 'preferences', "Preferences", self.preferencesTriggered),
|
||||
('actionPreferences', 'Ctrl+P', '', "Preferences", self.preferencesTriggered),
|
||||
('actionShowHelp', 'F1', '', "dupeGuru Help", self.showHelpTriggered),
|
||||
('actionAbout', '', '', "About dupeGuru", self.showAboutBoxTriggered),
|
||||
('actionRegister', '', '', "Register dupeGuru", self.registerTriggered),
|
||||
|
@ -1,16 +1,10 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file alias="details">../../images/details32.png</file>
|
||||
<file alias="logo_pe">../../images/dgpe_logo_32.png</file>
|
||||
<file alias="logo_pe_big">../../images/dgpe_logo_128.png</file>
|
||||
<file alias="logo_me">../../images/dgme_logo_32.png</file>
|
||||
<file alias="logo_me_big">../../images/dgme_logo_128.png</file>
|
||||
<file alias="logo_se">../../images/dgse_logo_32.png</file>
|
||||
<file alias="logo_se_big">../../images/dgse_logo_128.png</file>
|
||||
<file alias="folder">../../images/folderwin32.png</file>
|
||||
<file alias="preferences">../../images/preferences32.png</file>
|
||||
<file alias="actions">../../images/actions32.png</file>
|
||||
<file alias="delta">../../images/delta32.png</file>
|
||||
<file alias="power_marker">../../images/power_marker32.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -11,6 +11,7 @@ from PyQt4.QtGui import (QWidget, QFileDialog, QHeaderView, QVBoxLayout, QHBoxLa
|
||||
QAbstractItemView, QSpacerItem, QSizePolicy, QPushButton, QApplication, QMessageBox, QMainWindow,
|
||||
QMenuBar, QMenu)
|
||||
|
||||
from qtlib.recent import Recent
|
||||
from core.app import NoScannableFileError
|
||||
|
||||
from . import platform
|
||||
@ -22,22 +23,35 @@ class DirectoriesDialog(QMainWindow):
|
||||
QMainWindow.__init__(self, None)
|
||||
self.app = app
|
||||
self.lastAddedFolder = platform.INITIAL_FOLDER_IN_DIALOGS
|
||||
self.recentFolders = Recent(self.app, 'recentFolders')
|
||||
self.directoriesModel = DirectoriesModel(self.app)
|
||||
self.directoriesDelegate = DirectoriesDelegate()
|
||||
self._setupUi()
|
||||
self.app.recentResults.addMenu(self.menuLoadRecent)
|
||||
self.app.recentResults.addMenu(self.menuRecentResults)
|
||||
self.recentFolders.addMenu(self.menuRecentFolders)
|
||||
self._updateAddButton()
|
||||
self._updateRemoveButton()
|
||||
|
||||
self.scanButton.clicked.connect(self.scanButtonClicked)
|
||||
self.addButton.clicked.connect(self.addButtonClicked)
|
||||
self.removeButton.clicked.connect(self.removeButtonClicked)
|
||||
self.treeView.selectionModel().selectionChanged.connect(self.selectionChanged)
|
||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||
self._updateLoadResultsButton()
|
||||
self._setupBindings()
|
||||
|
||||
def _setupBindings(self):
|
||||
self.scanButton.clicked.connect(self.scanButtonClicked)
|
||||
self.loadResultsButton.clicked.connect(self.actionLoadResults.trigger)
|
||||
self.addFolderButton.clicked.connect(self.actionAddFolder.trigger)
|
||||
self.removeFolderButton.clicked.connect(self.removeFolderButtonClicked)
|
||||
self.treeView.selectionModel().selectionChanged.connect(self.selectionChanged)
|
||||
self.app.recentResults.itemsChanged.connect(self._updateLoadResultsButton)
|
||||
self.recentFolders.itemsChanged.connect(self._updateAddButton)
|
||||
self.recentFolders.mustOpenItem.connect(self.app.add_directory)
|
||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||
|
||||
def _setupActions(self):
|
||||
# (name, shortcut, icon, desc, func)
|
||||
ACTIONS = [
|
||||
('actionLoadResults', 'Ctrl+L', '', "Load Results...", self.loadResultsTriggered),
|
||||
('actionShowResultsWindow', '', '', "Results Window", self.app.showResultsWindow),
|
||||
('actionAddFolder', '', '', "Add Folder...", self.addFolderTriggered),
|
||||
]
|
||||
createActions(ACTIONS, self)
|
||||
|
||||
@ -69,6 +83,16 @@ class DirectoriesDialog(QMainWindow):
|
||||
self.menubar.addAction(self.menuFile.menuAction())
|
||||
self.menubar.addAction(self.menuView.menuAction())
|
||||
self.menubar.addAction(self.menuHelp.menuAction())
|
||||
|
||||
# Recent folders menu
|
||||
self.menuRecentFolders = QMenu()
|
||||
self.menuRecentFolders.addAction(self.actionAddFolder)
|
||||
self.menuRecentFolders.addSeparator()
|
||||
|
||||
# Recent results menu
|
||||
self.menuRecentResults = QMenu()
|
||||
self.menuRecentResults.addAction(self.actionLoadResults)
|
||||
self.menuRecentResults.addSeparator()
|
||||
|
||||
def _setupUi(self):
|
||||
self.setWindowTitle(self.app.NAME)
|
||||
@ -92,30 +116,18 @@ class DirectoriesDialog(QMainWindow):
|
||||
header.resizeSection(1, 100)
|
||||
self.verticalLayout.addWidget(self.treeView)
|
||||
self.horizontalLayout = QHBoxLayout()
|
||||
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.removeButton = QPushButton(self.centralwidget)
|
||||
self.removeButton.setText("Remove")
|
||||
self.removeButton.setShortcut("Del")
|
||||
self.removeButton.setMinimumSize(QSize(91, 0))
|
||||
self.removeButton.setMaximumSize(QSize(16777215, 32))
|
||||
self.horizontalLayout.addWidget(self.removeButton)
|
||||
self.addButton = QPushButton(self.centralwidget)
|
||||
self.addButton.setText("Add")
|
||||
self.addButton.setMinimumSize(QSize(91, 0))
|
||||
self.addButton.setMaximumSize(QSize(16777215, 32))
|
||||
self.horizontalLayout.addWidget(self.addButton)
|
||||
spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
|
||||
self.removeFolderButton = QPushButton("Remove", self.centralwidget)
|
||||
self.removeFolderButton.setShortcut("Del")
|
||||
self.horizontalLayout.addWidget(self.removeFolderButton)
|
||||
self.addFolderButton = QPushButton("Add", self.centralwidget)
|
||||
self.horizontalLayout.addWidget(self.addFolderButton)
|
||||
spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem1)
|
||||
self.loadResultsButton = QPushButton(self.centralwidget)
|
||||
self.loadResultsButton.setText("Load Results")
|
||||
self.horizontalLayout.addWidget(self.loadResultsButton)
|
||||
self.scanButton = QPushButton(self.centralwidget)
|
||||
self.scanButton.setText("Scan")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.scanButton.sizePolicy().hasHeightForWidth())
|
||||
self.scanButton.setSizePolicy(sizePolicy)
|
||||
self.scanButton.setMinimumSize(QSize(91, 0))
|
||||
self.scanButton.setMaximumSize(QSize(16777215, 32))
|
||||
self.scanButton.setDefault(True)
|
||||
self.horizontalLayout.addWidget(self.scanButton)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
@ -123,20 +135,32 @@ class DirectoriesDialog(QMainWindow):
|
||||
|
||||
self._setupActions()
|
||||
self._setupMenu()
|
||||
|
||||
|
||||
if self.app.prefs.directoriesWindowRect is not None:
|
||||
self.setGeometry(self.app.prefs.directoriesWindowRect)
|
||||
|
||||
def _updateAddButton(self):
|
||||
if self.recentFolders.isEmpty():
|
||||
self.addFolderButton.setMenu(None)
|
||||
else:
|
||||
self.addFolderButton.setMenu(self.menuRecentFolders)
|
||||
|
||||
def _updateRemoveButton(self):
|
||||
indexes = self.treeView.selectedIndexes()
|
||||
if not indexes:
|
||||
self.removeButton.setEnabled(False)
|
||||
self.removeFolderButton.setEnabled(False)
|
||||
return
|
||||
self.removeButton.setEnabled(True)
|
||||
self.removeFolderButton.setEnabled(True)
|
||||
index = indexes[0]
|
||||
node = index.internalPointer()
|
||||
# label = 'Remove' if node.parent is None else 'Exclude'
|
||||
|
||||
def _updateLoadResultsButton(self):
|
||||
if self.app.recentResults.isEmpty():
|
||||
self.loadResultsButton.setMenu(None)
|
||||
else:
|
||||
self.loadResultsButton.setMenu(self.menuRecentResults)
|
||||
|
||||
#--- QWidget overrides
|
||||
def closeEvent(self, event):
|
||||
event.accept()
|
||||
@ -149,7 +173,7 @@ class DirectoriesDialog(QMainWindow):
|
||||
QApplication.quit()
|
||||
|
||||
#--- Events
|
||||
def addButtonClicked(self):
|
||||
def addFolderTriggered(self):
|
||||
title = "Select a directory to add to the scanning list"
|
||||
flags = QFileDialog.ShowDirsOnly
|
||||
dirpath = str(QFileDialog.getExistingDirectory(self, title, self.lastAddedFolder, flags))
|
||||
@ -157,6 +181,7 @@ class DirectoriesDialog(QMainWindow):
|
||||
return
|
||||
self.lastAddedFolder = dirpath
|
||||
self.app.add_directory(dirpath)
|
||||
self.recentFolders.insertItem(dirpath)
|
||||
|
||||
def appWillSavePrefs(self):
|
||||
self.app.prefs.directoriesWindowRect = self.geometry()
|
||||
@ -169,7 +194,7 @@ class DirectoriesDialog(QMainWindow):
|
||||
self.app.load_from(destination)
|
||||
self.app.recentResults.insertItem(destination)
|
||||
|
||||
def removeButtonClicked(self):
|
||||
def removeFolderButtonClicked(self):
|
||||
indexes = self.treeView.selectedIndexes()
|
||||
if not indexes:
|
||||
return
|
||||
|
@ -41,6 +41,7 @@ class Preferences(PreferencesBase):
|
||||
self.detailsWindowRect = self.get_rect('DetailsWindowRect', self.detailsWindowRect)
|
||||
self.directoriesWindowRect = self.get_rect('DirectoriesWindowRect', self.directoriesWindowRect)
|
||||
self.recentResults = get('RecentResults', self.recentResults)
|
||||
self.recentFolders = get('RecentFolders', self.recentFolders)
|
||||
|
||||
self.registration_code = get('RegistrationCode', self.registration_code)
|
||||
self.registration_email = get('RegistrationEmail', self.registration_email)
|
||||
@ -64,6 +65,7 @@ class Preferences(PreferencesBase):
|
||||
self.detailsWindowRect = None
|
||||
self.directoriesWindowRect = None
|
||||
self.recentResults = []
|
||||
self.recentFolders = []
|
||||
|
||||
self.registration_code = ''
|
||||
self.registration_email = ''
|
||||
@ -94,6 +96,7 @@ class Preferences(PreferencesBase):
|
||||
self.set_rect('DetailsWindowRect', self.detailsWindowRect)
|
||||
self.set_rect('DirectoriesWindowRect', self.directoriesWindowRect)
|
||||
set_('RecentResults', self.recentResults)
|
||||
set_('RecentFolders', self.recentFolders)
|
||||
|
||||
set_('RegistrationCode', self.registration_code)
|
||||
set_('RegistrationEmail', self.registration_email)
|
||||
|
@ -38,10 +38,10 @@ class ResultWindow(QMainWindow):
|
||||
def _setupActions(self):
|
||||
# (name, shortcut, icon, desc, func)
|
||||
ACTIONS = [
|
||||
('actionDetails', 'Ctrl+3', 'details', "Details", self.detailsTriggered),
|
||||
('actionActions', '', 'actions', "Actions", self.actionsTriggered),
|
||||
('actionDelta', 'Ctrl+2', 'delta', "Delta Values", self.deltaTriggered),
|
||||
('actionPowerMarker', 'Ctrl+1', 'power_marker', "Power Marker", self.powerMarkerTriggered),
|
||||
('actionDetails', 'Ctrl+I', '', "Details", self.detailsTriggered),
|
||||
('actionActions', '', '', "Actions", self.actionsTriggered),
|
||||
('actionDelta', 'Ctrl+2', '', "Delta Values", self.deltaTriggered),
|
||||
('actionPowerMarker', 'Ctrl+1', '', "Power Marker", self.powerMarkerTriggered),
|
||||
('actionDeleteMarked', 'Ctrl+D', '', "Send Marked to Recycle Bin", self.deleteTriggered),
|
||||
('actionHardlinkMarked', 'Ctrl+Shift+D', '', "Delete Marked and Replace with Hardlinks", self.hardlinkTriggered),
|
||||
('actionMoveMarked', 'Ctrl+M', '', "Move Marked to...", self.moveTriggered),
|
||||
@ -62,7 +62,7 @@ class ResultWindow(QMainWindow):
|
||||
('actionCancelFilter', 'Ctrl+Shift+F', '', "Cancel Filter", self.cancelFilterTriggered),
|
||||
('actionExport', '', '', "Export To HTML", self.exportTriggered),
|
||||
('actionSaveResults', 'Ctrl+S', '', "Save Results...", self.saveResultsTriggered),
|
||||
('actionInvokeCustomCommand', 'Ctrl+I', '', "Invoke Custom Command", self.app.invokeCustomCommand),
|
||||
('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', "Invoke Custom Command", self.app.invokeCustomCommand),
|
||||
]
|
||||
createActions(ACTIONS, self)
|
||||
self.actionDelta.setCheckable(True)
|
||||
|
@ -7,6 +7,8 @@
|
||||
# which should be included with this package. The terms are also available at
|
||||
# http://www.hardcoded.net/licenses/hs_license
|
||||
|
||||
from qtlib.recent import Recent
|
||||
|
||||
from .se.app import DupeGuru
|
||||
|
||||
class TestApp(DupeGuru):
|
||||
@ -17,4 +19,6 @@ class TestApp(DupeGuru):
|
||||
def _setup(self):
|
||||
self.prefs = self._create_preferences()
|
||||
self.prefs.load()
|
||||
self.recentResults = Recent(self, 'recentResults')
|
||||
self._setupActions()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user