""" sn_basis/functions/dialog_wrapper.py – Benutzer-Dialoge 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. """ from typing import Any # 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. 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: """ 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. :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" """ try: # Definiert die beiden Buttons, die angezeigt werden sollen. buttons = QMessageBox.Yes | QMessageBox.No # Öffnet den Dialog (oder im Mock-Modus: simuliert ihn). result = QMessageBox.question( parent, title, message, buttons, YES if default else NO, # Vorauswahl abhängig vom Default ) # Gibt True zurück, wenn der Benutzer "Ja" gewählt hat. return result == YES except Exception: # Falls Qt nicht verfügbar ist (Mock/CI), wird der Default-Wert genutzt. return default