forked from AG_QGIS/Plugin_SN_Plan41
auf Wrapper umgestellt, tests ergänzt
This commit is contained in:
132
ui/tab_a_logic.py
Normal file
132
ui/tab_a_logic.py
Normal file
@@ -0,0 +1,132 @@
|
||||
"""
|
||||
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"
|
||||
Reference in New Issue
Block a user