Ansicht-Combobox bleibt bei Projektwechsel konsistent
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user