Basemap hinzufügen und Thema wechseln im Basemap-Bereich (#100)

Neuer Abschnitt „Basemap-Layer“ im Basemap-Bereich des Druck-Tabs: Knopf
„Basemap hinzufügen“ und Auswahl „Thema“ (Farbe, Grau). Vorhandene Layer
werden an der Kachel-URL erkannt; Rückfrage Zusätzlich laden / Ersetzen /
Abbrechen. Vor dem Themenwechsel wird über einen Prüfwert der Darstellung
erkannt, ob sie ungespeichert verändert wurde.

Neues Modul modules/basemap_themen.py, neue Wrapper-Funktionen
ask_auswahl und get_active_layer, Stilvorlagen vermerken ihr Thema.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-05 21:27:35 +02:00
co-authored by Claude Opus 5.5
parent d01b9998fb
commit 24ad564a08
7 changed files with 839 additions and 15 deletions
+49
View File
@@ -133,6 +133,55 @@ def ask_overwrite_append_cancel_custom(
return "cancel"
def ask_auswahl(
title: str,
message: str,
optionen: list[tuple[str, str]],
default: str,
abbrechen: Optional[str] = None,
parent: Any = None,
) -> str:
"""Stellt eine Frage mit frei benannten Knöpfen und gibt den Schlüssel der Wahl zurück.
Parameters
----------
optionen :
``(schluessel, beschriftung)`` in Anzeigereihenfolge.
default :
Vorbelegter Knopf; im Mock-Modus die Antwort.
abbrechen :
Schlüssel, der beim Schließen des Fensters (Esc, X) und bei einem Fehler gilt;
ohne Angabe ``default``.
"""
rueckfall = abbrechen if abbrechen is not None else default
if QT_VERSION == 0: # Mock-Modus
return default
try:
from sn_basis.functions import qt_wrapper
msg = QMessageBox(parent)
msg.setIcon(ICON_QUESTION)
msg.setWindowTitle(title)
msg.setText(message)
knoepfe = {}
for schluessel, beschriftung in optionen:
rolle = qt_wrapper.RejectRole if schluessel == abbrechen else qt_wrapper.ActionRole
knoepfe[schluessel] = msg.addButton(beschriftung, rolle)
if default in knoepfe:
msg.setDefaultButton(knoepfe[default])
if abbrechen in knoepfe:
msg.setEscapeButton(knoepfe[abbrechen])
exec_dialog(msg)
geklickt = msg.clickedButton()
for schluessel, knopf in knoepfe.items():
if geklickt == knopf:
return schluessel
return rueckfall
except Exception as e:
print(f"⚠️ ask_auswahl Fehler: {e}")
return rueckfall
def ask_ergaenzen_entfernen_ersetzen_abbrechen(
parent: Any,
title: str,
+9
View File
@@ -219,6 +219,15 @@ def remove_toolbar(toolbar: Any) -> None:
# Layer zum Projekt hinzufügen
# ---------------------------------------------------------
def get_active_layer() -> Any:
"""Im Layerbaum ausgewählter Layer oder ``None`` (Mock-Modus, kein Layer gewählt)."""
try:
aktiv = getattr(iface, "activeLayer", None)
return aktiv() if callable(aktiv) else None
except Exception:
return None
def add_layer_to_project(layer: Any) -> bool:
"""
Fügt einen Layer dem aktuellen QGIS-Projekt hinzu.