mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-22 14:41:39 +00:00
[#102 state:fixed] Remember the size/position of all window between launches.
This commit is contained in:
@@ -12,7 +12,7 @@ import logging
|
||||
import os
|
||||
import os.path as op
|
||||
|
||||
from PyQt4.QtCore import QTimer, QObject, QCoreApplication, QUrl, SIGNAL
|
||||
from PyQt4.QtCore import QTimer, QObject, QCoreApplication, QUrl, SIGNAL, pyqtSignal
|
||||
from PyQt4.QtGui import QDesktopServices, QFileDialog, QDialog, QMessageBox
|
||||
|
||||
from hscommon import job
|
||||
@@ -86,7 +86,10 @@ class DupeGuru(DupeGuruBase, QObject):
|
||||
self._nagTimer = QTimer()
|
||||
self.connect(self._nagTimer, SIGNAL('timeout()'), self.mustShowNag)
|
||||
self._nagTimer.start(0)
|
||||
self.main_window.show()
|
||||
if self.prefs.mainWindowIsMaximized:
|
||||
self.main_window.showMaximized()
|
||||
else:
|
||||
self.main_window.show()
|
||||
self.load()
|
||||
|
||||
self.connect(QCoreApplication.instance(), SIGNAL('aboutToQuit()'), self.application_will_terminate)
|
||||
@@ -205,8 +208,13 @@ class DupeGuru(DupeGuruBase, QObject):
|
||||
self.prefs.save()
|
||||
self._update_options()
|
||||
|
||||
#--- Signals
|
||||
willSavePrefs = pyqtSignal()
|
||||
|
||||
#--- Events
|
||||
def application_will_terminate(self):
|
||||
self.willSavePrefs.emit()
|
||||
self.prefs.save()
|
||||
self.save()
|
||||
self.save_ignore_list()
|
||||
|
||||
|
||||
@@ -20,15 +20,23 @@ class DetailsDialog(QDialog):
|
||||
self.app = app
|
||||
self.model = DetailsPanel(self, app)
|
||||
self._setupUi()
|
||||
if self.app.prefs.detailsWindowRect is not None:
|
||||
self.setGeometry(self.app.prefs.detailsWindowRect)
|
||||
self.tableModel = DetailsModel(self.model)
|
||||
# tableView is defined in subclasses
|
||||
self.tableView.setModel(self.tableModel)
|
||||
self.model.connect()
|
||||
|
||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||
|
||||
def _setupUi(self): # Virtual
|
||||
pass
|
||||
|
||||
# model --> view
|
||||
#--- Events
|
||||
def appWillSavePrefs(self):
|
||||
self.app.prefs.detailsWindowRect = self.geometry()
|
||||
|
||||
#--- model --> view
|
||||
def refresh(self):
|
||||
self.tableModel.reset()
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ class DirectoriesDialog(QDialog, Ui_DirectoriesDialog):
|
||||
self.connect(self.addButton, SIGNAL('clicked()'), self.addButtonClicked)
|
||||
self.connect(self.removeButton, SIGNAL('clicked()'), self.removeButtonClicked)
|
||||
self.connect(self.treeView.selectionModel(), SIGNAL('selectionChanged(QItemSelection,QItemSelection)'), self.selectionChanged)
|
||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||
|
||||
def _setupUi(self):
|
||||
self.setupUi(self)
|
||||
@@ -40,6 +41,9 @@ class DirectoriesDialog(QDialog, Ui_DirectoriesDialog):
|
||||
header.setResizeMode(0, QHeaderView.Stretch)
|
||||
header.setResizeMode(1, QHeaderView.Fixed)
|
||||
header.resizeSection(1, 100)
|
||||
|
||||
if self.app.prefs.directoriesWindowRect is not None:
|
||||
self.setGeometry(self.app.prefs.directoriesWindowRect)
|
||||
|
||||
def _updateRemoveButton(self):
|
||||
indexes = self.treeView.selectedIndexes()
|
||||
@@ -51,6 +55,7 @@ class DirectoriesDialog(QDialog, Ui_DirectoriesDialog):
|
||||
node = index.internalPointer()
|
||||
# label = 'Remove' if node.parent is None else 'Exclude'
|
||||
|
||||
#--- Events
|
||||
def addButtonClicked(self):
|
||||
title = "Select a directory to add to the scanning list"
|
||||
flags = QFileDialog.ShowDirsOnly
|
||||
@@ -60,6 +65,9 @@ class DirectoriesDialog(QDialog, Ui_DirectoriesDialog):
|
||||
self.lastAddedFolder = dirpath
|
||||
self.app.add_directory(dirpath)
|
||||
|
||||
def appWillSavePrefs(self):
|
||||
self.app.prefs.directoriesWindowRect = self.geometry()
|
||||
|
||||
def doneButtonClicked(self):
|
||||
self.hide()
|
||||
|
||||
|
||||
@@ -34,9 +34,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
self.connect(self.actionQuit, SIGNAL('triggered()'), QCoreApplication.instance().quit)
|
||||
self.connect(self.menuColumns, SIGNAL('triggered(QAction*)'), self.columnToggled)
|
||||
self.connect(QCoreApplication.instance(), SIGNAL('aboutToQuit()'), self.application_will_terminate)
|
||||
self.connect(self.resultsView, SIGNAL('doubleClicked()'), self.resultsDoubleClicked)
|
||||
self.connect(self.resultsView, SIGNAL('spacePressed()'), self.resultsSpacePressed)
|
||||
self.app.willSavePrefs.connect(self.appWillSavePrefs)
|
||||
|
||||
# Actions (the vast majority of them are connected in the UI file, but I'm trying to
|
||||
# phase away from those, and these connections are harder to maintain than through simple
|
||||
@@ -96,6 +96,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.statusLabel = QLabel(self)
|
||||
self.statusbar.addPermanentWidget(self.statusLabel, 1)
|
||||
|
||||
if self.app.prefs.mainWindowRect is not None and not self.app.prefs.mainWindowIsMaximized:
|
||||
self.setGeometry(self.app.prefs.mainWindowRect)
|
||||
|
||||
# Linux setup
|
||||
if sys.platform == 'linux2':
|
||||
self.actionCheckForUpdate.setVisible(False) # This only works on Windows
|
||||
@@ -116,18 +119,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
h.setSectionHidden(index, not visible)
|
||||
h.setResizeMode(0, QHeaderView.Stretch)
|
||||
|
||||
def _save_columns(self):
|
||||
h = self.resultsView.header()
|
||||
widths = []
|
||||
visible = []
|
||||
for i in range(len(self.app.data.COLUMNS)):
|
||||
widths.append(h.sectionSize(i))
|
||||
visible.append(not h.isSectionHidden(i))
|
||||
prefs = self.app.prefs
|
||||
prefs.columns_width = widths
|
||||
prefs.columns_visible = visible
|
||||
prefs.save()
|
||||
|
||||
def _update_column_actions_status(self):
|
||||
h = self.resultsView.header()
|
||||
for action in self._column_actions:
|
||||
@@ -288,8 +279,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.app.show_help()
|
||||
|
||||
#--- Events
|
||||
def application_will_terminate(self):
|
||||
self._save_columns()
|
||||
def appWillSavePrefs(self):
|
||||
prefs = self.app.prefs
|
||||
h = self.resultsView.header()
|
||||
widths = []
|
||||
visible = []
|
||||
for i in range(len(self.app.data.COLUMNS)):
|
||||
widths.append(h.sectionSize(i))
|
||||
visible.append(not h.isSectionHidden(i))
|
||||
prefs.columns_width = widths
|
||||
prefs.columns_visible = visible
|
||||
prefs.mainWindowIsMaximized = self.isMaximized()
|
||||
prefs.mainWindowRect = self.geometry()
|
||||
|
||||
def columnToggled(self, action):
|
||||
colid = action.column_index
|
||||
|
||||
@@ -16,11 +16,12 @@ class Preferences(PreferencesBase):
|
||||
PreferencesBase.__init__(self)
|
||||
self.reset_columns()
|
||||
|
||||
def _load_specific(self, settings, get):
|
||||
def _load_specific(self, settings):
|
||||
# load prefs specific to the dg edition
|
||||
pass
|
||||
|
||||
def _load_values(self, settings, get):
|
||||
def _load_values(self, settings):
|
||||
get = self.get_value
|
||||
self.filter_hardness = get('FilterHardness', self.filter_hardness)
|
||||
self.mix_file_kind = get('MixFileKind', self.mix_file_kind)
|
||||
self.use_regexp = get('UseRegexp', self.use_regexp)
|
||||
@@ -33,9 +34,15 @@ class Preferences(PreferencesBase):
|
||||
if width > 0:
|
||||
self.columns_width[index] = width
|
||||
self.columns_visible = get('ColumnsVisible', self.columns_visible)
|
||||
|
||||
self.mainWindowIsMaximized = get('MainWindowIsMaximized', self.mainWindowIsMaximized)
|
||||
self.mainWindowRect = self.get_rect('MainWindowRect', self.mainWindowRect)
|
||||
self.detailsWindowRect = self.get_rect('DetailsWindowRect', self.detailsWindowRect)
|
||||
self.directoriesWindowRect = self.get_rect('DirectoriesWindowRect', self.directoriesWindowRect)
|
||||
|
||||
self.registration_code = get('RegistrationCode', self.registration_code)
|
||||
self.registration_email = get('RegistrationEmail', self.registration_email)
|
||||
self._load_specific(settings, get)
|
||||
self._load_specific(settings)
|
||||
|
||||
def _reset_specific(self):
|
||||
# reset prefs specific to the dg edition
|
||||
@@ -48,6 +55,12 @@ class Preferences(PreferencesBase):
|
||||
self.remove_empty_folders = False
|
||||
self.destination_type = 1
|
||||
self.custom_command = ''
|
||||
|
||||
self.mainWindowIsMaximized = False
|
||||
self.mainWindowRect = None
|
||||
self.detailsWindowRect = None
|
||||
self.directoriesWindowRect = None
|
||||
|
||||
self.registration_code = ''
|
||||
self.registration_email = ''
|
||||
self._reset_specific()
|
||||
@@ -56,11 +69,12 @@ class Preferences(PreferencesBase):
|
||||
self.columns_width = [width for width, _ in self.COLUMNS_DEFAULT_ATTRS]
|
||||
self.columns_visible = [visible for _, visible in self.COLUMNS_DEFAULT_ATTRS]
|
||||
|
||||
def _save_specific(self, settings, set_):
|
||||
def _save_specific(self, settings):
|
||||
# save prefs specific to the dg edition
|
||||
pass
|
||||
|
||||
def _save_values(self, settings, set_):
|
||||
def _save_values(self, settings):
|
||||
set_ = self.set_value
|
||||
set_('FilterHardness', self.filter_hardness)
|
||||
set_('MixFileKind', self.mix_file_kind)
|
||||
set_('UseRegexp', self.use_regexp)
|
||||
@@ -69,7 +83,13 @@ class Preferences(PreferencesBase):
|
||||
set_('CustomCommand', self.custom_command)
|
||||
set_('ColumnsWidth', self.columns_width)
|
||||
set_('ColumnsVisible', self.columns_visible)
|
||||
|
||||
set_('MainWindowIsMaximized', self.mainWindowIsMaximized)
|
||||
self.set_rect('MainWindowRect', self.mainWindowRect)
|
||||
self.set_rect('DetailsWindowRect', self.detailsWindowRect)
|
||||
self.set_rect('DirectoriesWindowRect', self.directoriesWindowRect)
|
||||
|
||||
set_('RegistrationCode', self.registration_code)
|
||||
set_('RegistrationEmail', self.registration_email)
|
||||
self._save_specific(settings, set_)
|
||||
self._save_specific(settings)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user