""" sn_plan41/ui/tab_a_logic.py – Fachlogik für Tab A (Daten) """ from typing import Optional from sn_basis.functions.variable_wrapper import (#type: ignore get_variable, set_variable, ) from sn_basis.functions.sys_wrapper import (#type:ignore file_exists, write_text, ) from sn_basis.functions.ly_existence_wrapper import layer_exists#type:ignore from sn_basis.functions.ly_metadata_wrapper import get_layer_type#type:ignore class TabALogic: """ Kapselt die komplette Logik von Tab A: - Verfahrens-Datenbank - optionale Linkliste - Verfahrensgebiet-Layer """ # ------------------------------- # Verfahrens-Datenbank # ------------------------------- def load_verfahrens_db(self) -> Optional[str]: """ Lädt die gespeicherte Verfahrens-Datenbank. """ path = get_variable("verfahrens_db", scope="project") if path and file_exists(path): return path return None def set_verfahrens_db(self, path: Optional[str]) -> None: """ Speichert oder löscht die Verfahrens-Datenbank. """ if path: set_variable("verfahrens_db", path, scope="project") else: set_variable("verfahrens_db", "", scope="project") def create_new_verfahrens_db(self, path: str) -> bool: """ Legt eine neue leere GPKG-Datei an. """ if not path: return False try: write_text(path, "") except Exception: return False self.set_verfahrens_db(path) return True # ------------------------------- # Lokale Linkliste # ------------------------------- def load_linkliste(self) -> Optional[str]: """ Lädt die gespeicherte lokale Linkliste. """ path = get_variable("linkliste", scope="project") if path and file_exists(path): return path return None def set_linkliste(self, path: Optional[str]) -> None: """ Speichert oder löscht die lokale Linkliste. """ if path: set_variable("linkliste", path, scope="project") else: set_variable("linkliste", "", scope="project") # ------------------------------- # Verfahrensgebiet-Layer # ------------------------------- def save_verfahrensgebiet_layer(self, layer) -> None: """ Speichert die ID des Verfahrensgebiet-Layers. Ungültige Layer werden ignoriert. """ if layer is None: set_variable("verfahrensgebiet_layer", "", scope="project") return if not hasattr(layer, "id") or not callable(layer.id): set_variable("verfahrensgebiet_layer", "", scope="project") return try: layer_id = layer.id() except Exception: set_variable("verfahrensgebiet_layer", "", scope="project") return if not layer_id: set_variable("verfahrensgebiet_layer", "", scope="project") return set_variable("verfahrensgebiet_layer", layer_id, scope="project") def load_verfahrensgebiet_layer_id(self) -> Optional[str]: """ Lädt die gespeicherte Layer-ID. """ value = get_variable("verfahrensgebiet_layer", scope="project") return value or None def is_valid_verfahrensgebiet_layer(self, layer) -> bool: """ Prüft, ob ein Layer als Verfahrensgebiet geeignet ist. """ if not layer_exists(layer): return False layer_type = get_layer_type(layer) return layer_type == "vector"