forked from AG_QGIS/Plugin_SN_Basis
63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
"""
|
||
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
|