Move to saveGeometry & saveState implementation

Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Loren Eteval
2025-06-04 15:16:04 +08:00
parent 9e76916c3b
commit 9f72926f45
6 changed files with 108 additions and 43 deletions
+40 -15
View File
@@ -151,33 +151,55 @@ class AppQGroupBox(QTranslatable, QGroupBox):
class AppQHeaderView(SupportExitCleanup, SupportConnectedCallback, QHeaderView):
def sectionSizeSettingsEmpty(self):
return self.sectionSizeSettingsName == ''
return (
self.legacySectionSizeSettingsName == ''
and self.sectionSizeSettingsName == ''
)
def __init__(self, *args, **kwargs):
self.legacySectionSizeSettingsName = kwargs.pop(
'legacySectionSizeSettingsName', ''
)
self.sectionSizeSettingsName = kwargs.pop('sectionSizeSettingsName', '')
super().__init__(*args, **kwargs)
self.columnCount = self.parent().columnCount()
parent = self.parent()
assert isinstance(parent, QTableWidget)
self.columnCount = parent.columnCount()
self.sectionSizeTable = {}
self.setSectionsClickable(True)
self.setStyleSheet(self.getStyleSheet(AppHue.currentColor()))
self.setFont(QFont(APP().customFontName))
self.sectionResized.connect(self.handleSectionResized)
# self.sectionResized.connect(self.handleSectionResized)
def restoreSectionSize(self):
if self.sectionSizeSettingsEmpty():
return
if AppSettings.get(self.sectionSizeSettingsName) is not None:
try:
self.restoreState(AppSettings.get(self.sectionSizeSettingsName))
except Exception:
# Any non-exit exceptions
# Fall back to legacy restore method
pass
else:
return
# Fall back to legacy restore method
try:
# https://bugreports.qt.io/browse/QTBUG-119862
# Affected: PySide6 6.6.1+
self.setDefaultSectionSize(self.defaultSectionSize())
self.sectionSizeTable = UJSONEncoder.decode(
AppSettings.get(self.sectionSizeSettingsName)
AppSettings.get(self.legacySectionSizeSettingsName)
)
# Fill missing value
@@ -216,22 +238,25 @@ class AppQHeaderView(SupportExitCleanup, SupportConnectedCallback, QHeaderView):
def connectedCallback(self):
self.setStyleSheet(self.getStyleSheet(AppHue.connectedColor()))
@QtCore.Slot(int, int, int)
def handleSectionResized(self, index: int, oldSize: int, newSize: int):
if self.sectionSizeSettingsEmpty():
return
# Keys are string when loaded from json
self.sectionSizeTable[str(index)] = newSize
# Legacy method. Not used
# @QtCore.Slot(int, int, int)
# def handleSectionResized(self, index: int, oldSize: int, newSize: int):
# if self.sectionSizeSettingsEmpty():
# return
#
# # Keys are string when loaded from json
# self.sectionSizeTable[str(index)] = newSize
def cleanup(self):
if self.sectionSizeSettingsEmpty():
return
AppSettings.set(
self.sectionSizeSettingsName,
UJSONEncoder.encode(self.sectionSizeTable),
)
# AppSettings.set(
# self.sectionSizeSettingsName,
# UJSONEncoder.encode(self.sectionSizeTable),
# )
AppSettings.set(self.sectionSizeSettingsName, self.saveState())
class AppQLabel(QTranslatable, QLabel):
+4 -1
View File
@@ -51,7 +51,9 @@ __all__ = ['UserServersQTableWidget']
logger = logging.getLogger(__name__)
registerAppSettings('ActivatedItemIndex')
# Migrate legacy settings
registerAppSettings('ServerWidgetSectionSizeTable')
registerAppSettings('UserServersHeaderViewState')
class UpdateSubsInfoMBox(AppQMessageBox):
@@ -822,7 +824,8 @@ class UserServersQTableWidget(QTranslatable, AppQTableWidget):
parent=self,
clickGuardFn=lambda: False,
customSortFn=self.customSortFn,
sectionSizeSettingsName='ServerWidgetSectionSizeTable',
legacySectionSizeSettingsName='ServerWidgetSectionSizeTable',
sectionSizeSettingsName='UserServersHeaderViewState',
)
)
self.setVerticalHeader(UserServersQTableWidgetVerticalHeader(self))
+4 -1
View File
@@ -37,7 +37,9 @@ logger = logging.getLogger(__name__)
__all__ = ['UserSubsQTableWidget']
# Migrate legacy settings
registerAppSettings('SubscriptionWidgetSectionSizeTable')
registerAppSettings('UserSubsHeaderViewState')
class UserSubsQTableWidgetHorizontalHeader(AppQHeaderView):
@@ -157,7 +159,8 @@ class UserSubsQTableWidget(QTranslatable, AppQTableWidget):
self.setHorizontalHeader(
UserSubsQTableWidgetHorizontalHeader(
parent=self,
sectionSizeSettingsName='SubscriptionWidgetSectionSizeTable',
legacySectionSizeSettingsName='SubscriptionWidgetSectionSizeTable',
sectionSizeSettingsName='UserSubsHeaderViewState',
)
)
self.setVerticalHeader(UserSubsQTableWidgetVerticalHeader(self))
+27 -10
View File
@@ -43,7 +43,10 @@ __all__ = ['AppMainWindow']
logger = logging.getLogger(__name__)
# Migrate legacy settings
registerAppSettings('ServerWidgetWindowSize')
registerAppSettings('AppMainWindowGeometry')
registerAppSettings('AppMainWindowState')
class AppNetworkStateManager(NetworkStateManager):
@@ -453,17 +456,31 @@ class AppMainWindow(AppQMainWindow):
logger.error('open about page failed')
def setWidthAndHeight(self):
try:
windowSize = AppSettings.get('ServerWidgetWindowSize').split(',')
if AppSettings.get('AppMainWindowGeometry') is None:
# Migrate legacy settings
try:
windowSize = AppSettings.get('ServerWidgetWindowSize').split(',')
self.setGeometry(100, 100, *list(int(size) for size in windowSize))
except Exception:
# Any non-exit exceptions
self.resize(*list(int(size) for size in windowSize))
except Exception:
# Any non-exit exceptions
self.setGeometry(100, 100, 1800, 960)
self.resize(1800, 960)
else:
try:
self.restoreGeometry(AppSettings.get('AppMainWindowGeometry'))
except Exception:
# Any non-exit exceptions
pass
try:
self.restoreState(AppSettings.get('AppMainWindowState'))
except Exception:
# Any non-exit exceptions
pass
def cleanup(self):
AppSettings.set(
'ServerWidgetWindowSize',
f'{self.geometry().width()},{self.geometry().height()}',
)
AppSettings.set('AppMainWindowGeometry', self.saveGeometry())
AppSettings.set('AppMainWindowState', self.saveState())
+32 -15
View File
@@ -31,7 +31,10 @@ import functools
__all__ = ['UserSubsWindow']
# Migrate legacy settings
registerAppSettings('SubscriptionWidgetWindowSize')
registerAppSettings('UserSubsWindowGeometry')
registerAppSettings('UserSubsWindowState')
class AddSubsDialog(AppQDialog):
@@ -65,7 +68,7 @@ class AddSubsDialog(AppQDialog):
self.setLayout(layout)
def setWidthAndHeight(self):
self.setGeometry(100, 100, 456, 150)
self.resize(456, 150)
def subsRemark(self):
return self.remarkEdit.text()
@@ -108,16 +111,6 @@ class UserSubsWindow(AppQMainWindow):
self.setCentralWidget(self.fakeCentralWidget)
def setWidthAndHeight(self):
try:
windowSize = AppSettings.get('SubscriptionWidgetWindowSize').split(',')
self.setGeometry(100, 100, *list(int(size) for size in windowSize))
except Exception:
# Any non-exit exceptions
self.setGeometry(100, 100, 500 * GOLDEN_RATIO, 500)
def addSubs(self):
def handleResultCode(_addSubsDialog, code):
if code == PySide6LegacyEnumValueWrapper(AppQDialog.DialogCode.Accepted):
@@ -153,8 +146,32 @@ class UserSubsWindow(AppQMainWindow):
else:
super().keyPressEvent(event)
def setWidthAndHeight(self):
if AppSettings.get('UserSubsWindowGeometry') is None:
# Migrate legacy settings
try:
windowSize = AppSettings.get('SubscriptionWidgetWindowSize').split(',')
self.resize(*list(int(size) for size in windowSize))
except Exception:
# Any non-exit exceptions
self.resize(520 * GOLDEN_RATIO, 520)
else:
try:
self.restoreGeometry(AppSettings.get('UserSubsWindowGeometry'))
except Exception:
# Any non-exit exceptions
pass
try:
self.restoreState(AppSettings.get('UserSubsWindowState'))
except Exception:
# Any non-exit exceptions
pass
def cleanup(self):
AppSettings.set(
'SubscriptionWidgetWindowSize',
f'{self.geometry().width()},{self.geometry().height()}',
)
AppSettings.set('UserSubsWindowGeometry', self.saveGeometry())
AppSettings.set('UserSubsWindowState', self.saveState())
+1 -1
View File
@@ -86,7 +86,7 @@ class XrayAssetViewerWindow(AppQMainWindow):
self.menuBar().addMenu(self.fileMenu)
def setWidthAndHeight(self):
self.setGeometry(100, 100, 360, 360 * GOLDEN_RATIO)
self.resize(360, 360 * GOLDEN_RATIO)
def flushItem(self):
self.xrayAssetViewerWidget.flushItem()