From 6a4c7b4609fb1a48485e1982438e3ee6912077de Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 20 Mar 2026 11:31:44 +0100 Subject: [PATCH] Ansicht-Combobox bleibt bei Projektwechsel konsistent --- ui/tab_b_ui.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/ui/tab_b_ui.py b/ui/tab_b_ui.py index b3e7e9e..da457ef 100644 --- a/ui/tab_b_ui.py +++ b/ui/tab_b_ui.py @@ -66,11 +66,13 @@ class TabB(QWidget): self._massstab_combo: Optional[QComboBox] = None self._ansicht_combo: Optional[QComboBox] = None self._theme_signal_connected = False + self._connected_theme_collection: object = None # Referenz für sauberes Trennen self._build_ui() self._restore_state() self._connect_theme_collection_signals() + self._connect_project_signals() def set_services(self, pruefmanager: Pruefmanager, data_grabber: DataGrabber) -> None: """Injiziert Services vom übergeordneten DockWidget.""" @@ -179,6 +181,44 @@ class TabB(QWidget): if self.logic: self.logic.set_view_for_auswahl(value) + def _connect_project_signals(self) -> None: + """Verbindet QgsProject-Signale für Projektwechsel/-neuladen.""" + project = QgsProject.instance() + for signal_name in ("readProject", "newProjectCreated", "cleared"): + signal = getattr(project, signal_name, None) + if signal is None: + continue + try: + signal.connect(self._on_project_changed) + except Exception: + pass + + def _on_project_changed(self, *args) -> None: + """Reagiert auf Projektwechsel: Signale neu binden, Combobox und State auffrischen.""" + _ = args + # Alte Theme-Collection-Signals zuerst trennen + self._disconnect_theme_collection_signals() + # Neu verbinden für das jetzt geladene Projekt + self._theme_signal_connected = False + self._connect_theme_collection_signals() + # Ansicht-Liste + gespeicherten State wiederherstellen + self._restore_state() + + def _disconnect_theme_collection_signals(self) -> None: + """Trennt Signale der alten Theme-Collection sauber.""" + collection = self._connected_theme_collection + if collection is None: + return + for signal_name in ("mapThemesChanged", "changed", "themeChanged"): + signal = getattr(collection, signal_name, None) + if signal is None: + continue + try: + signal.disconnect(self._refresh_ansicht_combo_live) + except Exception: + pass + self._connected_theme_collection = None + def _connect_theme_collection_signals(self) -> None: """Verbindet Signale der Theme-Collection für Live-Aktualisierung der Ansichtsliste.""" if self._theme_signal_connected: @@ -203,6 +243,8 @@ class TabB(QWidget): except Exception: pass + if connected_any: + self._connected_theme_collection = theme_collection self._theme_signal_connected = connected_any def _refresh_ansicht_combo_live(self, *args) -> None: