diff --git a/src/conf.py b/src/conf.py index ff322f1..723c2ea 100644 --- a/src/conf.py +++ b/src/conf.py @@ -141,6 +141,11 @@ class AppSettings(BaseSettings): postgresql_dbs: list[PostgreSqlDb] = [] theme: str | None = None + # UI-Zustand + window_geometry: tuple[int, int, int, int] | None = None # (x, y, width, height) + splitter_sizes: list[int] | None = None # Splitter-Positionen + tree_column_widths: list[int] | None = None # TreeWidget-Spaltenbreiten + model_config = SettingsConfigDict(json_file=config_path) @classmethod diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index f44a33c..7e4d4ad 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -263,6 +263,28 @@ class MainWindow(QMainWindow): # Drag&Drop für TreeWidget aktivieren self._setup_drag_drop() + # Gespeicherte UI-Zustände wiederherstellen + self._restore_ui_state() + + def _restore_ui_state(self): + """Stellt die gespeicherten UI-Zustände wieder her (Fenstergeometrie, Splitter, TreeWidget-Spalten).""" + global app_settings + + # Fenstergeometrie wiederherstellen + if app_settings.window_geometry: + x, y, width, height = app_settings.window_geometry + self.setGeometry(x, y, width, height) + + # Splitter-Positionen wiederherstellen + if app_settings.splitter_sizes: + self.ui.splitter.setSizes(app_settings.splitter_sizes) + + # TreeWidget-Spaltenbreiten wiederherstellen + if app_settings.tree_column_widths: + for col_idx, width in enumerate(app_settings.tree_column_widths): + if col_idx < self.ui.treeWidget.columnCount(): + self.ui.treeWidget.setColumnWidth(col_idx, width) + def _setup_theme_menu(self): """Initialisiert das Theme-Menü mit verfügbaren Themes.""" # Hole alle verfügbaren Themes @@ -3556,6 +3578,9 @@ class MainWindow(QMainWindow): def closeEvent(self, event): """Wird beim Schließen der Anwendung aufgerufen.""" + # UI-Zustände speichern + self._save_ui_state() + # Stoppe Hash-Berechnungs-Thread falls noch aktiv if ( hasattr(self, "hash_calculator_thread") @@ -3576,3 +3601,21 @@ class MainWindow(QMainWindow): # PDF-Dokumente schließen ist bei QtPdf automatisch durch Garbage Collection super().closeEvent(event) + + def _save_ui_state(self): + """Speichert die aktuellen UI-Zustände (Fenstergeometrie, Splitter, TreeWidget-Spalten).""" + global app_settings + + # Fenstergeometrie speichern + geometry = self.geometry() + app_settings.window_geometry = (geometry.x(), geometry.y(), geometry.width(), geometry.height()) + + # Splitter-Positionen speichern + app_settings.splitter_sizes = self.ui.splitter.sizes() + + # TreeWidget-Spaltenbreiten speichern + column_count = self.ui.treeWidget.columnCount() + app_settings.tree_column_widths = [self.ui.treeWidget.columnWidth(i) for i in range(column_count)] + + # Konfiguration speichern + app_settings.save()