diff --git a/Furious/QtFramework/QtWidgets.py b/Furious/QtFramework/QtWidgets.py index 5191f2a..0b602e4 100644 --- a/Furious/QtFramework/QtWidgets.py +++ b/Furious/QtFramework/QtWidgets.py @@ -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): diff --git a/Furious/Widget/UserServersQTableWidget.py b/Furious/Widget/UserServersQTableWidget.py index 77709fc..0dc218c 100644 --- a/Furious/Widget/UserServersQTableWidget.py +++ b/Furious/Widget/UserServersQTableWidget.py @@ -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)) diff --git a/Furious/Widget/UserSubsQTableWidget.py b/Furious/Widget/UserSubsQTableWidget.py index 472455d..77c3383 100644 --- a/Furious/Widget/UserSubsQTableWidget.py +++ b/Furious/Widget/UserSubsQTableWidget.py @@ -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)) diff --git a/Furious/Window/AppMainWindow.py b/Furious/Window/AppMainWindow.py index 8875e6b..02a95f4 100644 --- a/Furious/Window/AppMainWindow.py +++ b/Furious/Window/AppMainWindow.py @@ -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()) diff --git a/Furious/Window/UserSubsWindow.py b/Furious/Window/UserSubsWindow.py index ab8cfae..754b8a6 100644 --- a/Furious/Window/UserSubsWindow.py +++ b/Furious/Window/UserSubsWindow.py @@ -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()) diff --git a/Furious/Window/XrayAssetViewerWindow.py b/Furious/Window/XrayAssetViewerWindow.py index 2d3a08f..c2c494a 100644 --- a/Furious/Window/XrayAssetViewerWindow.py +++ b/Furious/Window/XrayAssetViewerWindow.py @@ -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()