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:
Virgil Dupras 2011-01-17 17:15:16 +01:00
parent d51f5184d7
commit 92970489c5
6 changed files with 72 additions and 46 deletions

View File

@ -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),

View File

@ -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>

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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()