2025-12-19 14:29:52 +01:00
|
|
|
|
"""
|
|
|
|
|
|
sn_basis/functions/dialog_wrapper.py – Benutzer-Dialoge
|
2026-01-09 15:19:25 +01:00
|
|
|
|
|
|
|
|
|
|
Dieser Wrapper kapselt alle Benutzer-Dialoge (z. B. Ja/Nein-Abfragen)
|
|
|
|
|
|
und sorgt dafür, dass sie sowohl in QGIS als auch im Mock-/Testmodus
|
|
|
|
|
|
einheitlich funktionieren.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
|
2026-01-09 15:19:25 +01:00
|
|
|
|
# Import der abstrahierten Qt-Klassen aus dem qt_wrapper.
|
|
|
|
|
|
# QMessageBox, YES und NO sind bereits kompatibel zu Qt5/Qt6
|
|
|
|
|
|
# und im Mock-Modus durch Dummy-Objekte ersetzt.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
from sn_basis.functions.qt_wrapper import (
|
|
|
|
|
|
QMessageBox,
|
|
|
|
|
|
YES,
|
|
|
|
|
|
NO,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
|
# Öffentliche API
|
|
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
def ask_yes_no(
|
|
|
|
|
|
title: str,
|
|
|
|
|
|
message: str,
|
|
|
|
|
|
default: bool = False,
|
|
|
|
|
|
parent: Any = None,
|
|
|
|
|
|
) -> bool:
|
|
|
|
|
|
"""
|
2026-01-09 15:19:25 +01:00
|
|
|
|
Stellt dem Benutzer eine Ja/Nein-Frage.
|
|
|
|
|
|
|
|
|
|
|
|
- In einer echten QGIS-Umgebung wird ein QMessageBox-Dialog angezeigt.
|
|
|
|
|
|
- Im Mock-/Testmodus wird kein Dialog geöffnet, sondern der Default-Wert
|
|
|
|
|
|
zurückgegeben, damit Tests ohne UI laufen können.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
|
2026-01-09 15:19:25 +01:00
|
|
|
|
:param title: Titel des Dialogs
|
|
|
|
|
|
:param message: Nachrichtentext
|
|
|
|
|
|
:param default: Rückgabewert im Fehler- oder Mock-Fall
|
|
|
|
|
|
:param parent: Optionales Parent-Widget
|
|
|
|
|
|
:return: True bei "Ja", False bei "Nein"
|
2025-12-19 14:29:52 +01:00
|
|
|
|
"""
|
|
|
|
|
|
try:
|
2026-01-09 15:19:25 +01:00
|
|
|
|
# Definiert die beiden Buttons, die angezeigt werden sollen.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
buttons = QMessageBox.Yes | QMessageBox.No
|
2026-01-09 15:19:25 +01:00
|
|
|
|
|
|
|
|
|
|
# Öffnet den Dialog (oder im Mock-Modus: simuliert ihn).
|
2025-12-19 14:29:52 +01:00
|
|
|
|
result = QMessageBox.question(
|
|
|
|
|
|
parent,
|
|
|
|
|
|
title,
|
|
|
|
|
|
message,
|
|
|
|
|
|
buttons,
|
2026-01-09 15:19:25 +01:00
|
|
|
|
YES if default else NO, # Vorauswahl abhängig vom Default
|
2025-12-19 14:29:52 +01:00
|
|
|
|
)
|
2026-01-09 15:19:25 +01:00
|
|
|
|
|
|
|
|
|
|
# Gibt True zurück, wenn der Benutzer "Ja" gewählt hat.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
return result == YES
|
2026-01-09 15:19:25 +01:00
|
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
|
except Exception:
|
2026-01-09 15:19:25 +01:00
|
|
|
|
# Falls Qt nicht verfügbar ist (Mock/CI), wird der Default-Wert genutzt.
|
2025-12-19 14:29:52 +01:00
|
|
|
|
return default
|