1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2024-11-14 11:39:03 +00:00

Initial work on #653

- Update both qt/directories_dialog.py and qt/result_window.py to have
the same resizing on out of bounds.
- Update moveToScreenCenter to do most of the checks needed
- Add additional preference to help track maximized position of
results window
This commit is contained in:
Andrew Senetar 2020-05-13 23:07:14 -05:00
parent debf309a9a
commit fa87f76298
Signed by: arsenetar
GPG Key ID: C63300DCE48AB2F1
4 changed files with 39 additions and 23 deletions

View File

@ -206,8 +206,6 @@ class DirectoriesDialog(QMainWindow):
if self.app.prefs.directoriesWindowRect is not None: if self.app.prefs.directoriesWindowRect is not None:
self.setGeometry(self.app.prefs.directoriesWindowRect) self.setGeometry(self.app.prefs.directoriesWindowRect)
else:
moveToScreenCenter(self)
def _setupColumns(self): def _setupColumns(self):
header = self.treeView.header() header = self.treeView.header()
@ -326,3 +324,9 @@ class DirectoriesDialog(QMainWindow):
def selectionChanged(self, selected, deselected): def selectionChanged(self, selected, deselected):
self._updateRemoveButton() self._updateRemoveButton()
def showEvent(self, event):
if self.isMaximized() is False:
# have to do this here as the frameGeometry is not correct until shown
moveToScreenCenter(self)
super().showEvent(event)

View File

@ -30,7 +30,7 @@ class Preferences(PreferencesBase):
self.language = trans.installed_lang self.language = trans.installed_lang
self.tableFontSize = get("TableFontSize", self.tableFontSize) self.tableFontSize = get("TableFontSize", self.tableFontSize)
self.reference_bold_font = get('ReferenceBoldFont', self.reference_bold_font) self.reference_bold_font = get("ReferenceBoldFont", self.reference_bold_font)
self.resultWindowIsMaximized = get( self.resultWindowIsMaximized = get(
"ResultWindowIsMaximized", self.resultWindowIsMaximized "ResultWindowIsMaximized", self.resultWindowIsMaximized
) )
@ -68,6 +68,7 @@ class Preferences(PreferencesBase):
self.tableFontSize = QApplication.font().pointSize() self.tableFontSize = QApplication.font().pointSize()
self.reference_bold_font = True self.reference_bold_font = True
self.resultWindowIsMaximized = False self.resultWindowIsMaximized = False
self.resultWindowMaximizeLocation = None
self.resultWindowRect = None self.resultWindowRect = None
self.directoriesWindowRect = None self.directoriesWindowRect = None
self.recentResults = [] self.recentResults = []
@ -99,7 +100,7 @@ class Preferences(PreferencesBase):
set_("Language", self.language) set_("Language", self.language)
set_("TableFontSize", self.tableFontSize) set_("TableFontSize", self.tableFontSize)
set_('ReferenceBoldFont', self.reference_bold_font) set_("ReferenceBoldFont", self.reference_bold_font)
set_("ResultWindowIsMaximized", self.resultWindowIsMaximized) set_("ResultWindowIsMaximized", self.resultWindowIsMaximized)
self.set_rect("ResultWindowRect", self.resultWindowRect) self.set_rect("ResultWindowRect", self.resultWindowRect)
self.set_rect("DirectoriesWindowRect", self.directoriesWindowRect) self.set_rect("DirectoriesWindowRect", self.directoriesWindowRect)

View File

@ -20,7 +20,6 @@ from PyQt5.QtWidgets import (
QDialog, QDialog,
QPushButton, QPushButton,
QCheckBox, QCheckBox,
QDesktopWidget,
) )
from hscommon.trans import trget from hscommon.trans import trget
@ -344,21 +343,12 @@ class ResultWindow(QMainWindow):
self.statusLabel = QLabel(self) self.statusLabel = QLabel(self)
self.statusbar.addPermanentWidget(self.statusLabel, 1) self.statusbar.addPermanentWidget(self.statusLabel, 1)
if self.app.prefs.resultWindowRect is not None:
self.setGeometry(self.app.prefs.resultWindowRect)
if self.app.prefs.resultWindowIsMaximized: if self.app.prefs.resultWindowIsMaximized:
if self.app.prefs.resultWindowMaximizeLocation is not None:
self.move(self.app.prefs.resultWindowMaximizeLocation)
self.setWindowState(self.windowState() | Qt.WindowMaximized) self.setWindowState(self.windowState() | Qt.WindowMaximized)
else:
if self.app.prefs.resultWindowRect is not None:
self.setGeometry(self.app.prefs.resultWindowRect)
# if not on any screen move to center of default screen
# moves to center of closest screen if partially off screen
frame = self.frameGeometry()
if QDesktopWidget().screenNumber(self) == -1:
moveToScreenCenter(self)
elif QDesktopWidget().availableGeometry(self).contains(frame) is False:
frame.moveCenter(QDesktopWidget().availableGeometry(self).center())
self.move(frame.topLeft())
else:
moveToScreenCenter(self)
# --- Private # --- Private
def _update_column_actions_status(self): def _update_column_actions_status(self):
@ -452,7 +442,10 @@ class ResultWindow(QMainWindow):
def appWillSavePrefs(self): def appWillSavePrefs(self):
prefs = self.app.prefs prefs = self.app.prefs
prefs.resultWindowIsMaximized = self.isMaximized() prefs.resultWindowIsMaximized = self.isMaximized()
prefs.resultWindowRect = self.geometry() if self.isMaximized():
prefs.resultWindowMaximizeLocation = self.geometry().topLeft()
else:
prefs.resultWindowRect = self.geometry()
def columnToggled(self, action): def columnToggled(self, action):
index = action.item_index index = action.item_index
@ -478,3 +471,9 @@ class ResultWindow(QMainWindow):
def closeEvent(self, event): def closeEvent(self, event):
# this saves the location of the results window when it is closed # this saves the location of the results window when it is closed
self.appWillSavePrefs() self.appWillSavePrefs()
def showEvent(self, event):
if self.isMaximized() is False:
# have to do this here as the frameGeometry is not correct until shown
moveToScreenCenter(self)
super().showEvent(event)

View File

@ -15,9 +15,8 @@ import logging
from hscommon.util import first from hscommon.util import first
from PyQt5.QtCore import QStandardPaths from PyQt5.QtCore import QStandardPaths
from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtGui import QPixmap, QIcon, QGuiApplication
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QDesktopWidget,
QSpacerItem, QSpacerItem,
QSizePolicy, QSizePolicy,
QAction, QAction,
@ -27,8 +26,21 @@ from PyQt5.QtWidgets import (
def moveToScreenCenter(widget): def moveToScreenCenter(widget):
frame = widget.frameGeometry() frame = widget.frameGeometry()
frame.moveCenter(QDesktopWidget().availableGeometry().center()) if QGuiApplication.screenAt(frame.center()) is None:
widget.move(frame.topLeft()) # if center not on any screen use default screen
screen = QGuiApplication.screens[0].availableGeometry()
else:
screen = QGuiApplication.screenAt(frame.center()).availableGeometry()
# moves to center of screen if partially off screen
if screen.contains(frame) is False:
# make sure the frame is not larger than screen
# resize does not seem to take frame size into account (move does)
widget.resize(
frame.size().boundedTo(screen.size() - (frame.size() - widget.size()))
)
frame = widget.frameGeometry()
frame.moveCenter(screen.center())
widget.move(frame.topLeft())
def verticalSpacer(size=None): def verticalSpacer(size=None):