Files
Plugin_SN_Plan41/ui/tab_a_logic.py

133 lines
3.6 KiB
Python
Raw Normal View History

2026-01-08 17:13:43 +01:00
"""
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"