2026-01-09 15:19:25 +01:00
|
|
|
|
# Wrapper‑Architektur – Übersicht
|
|
|
|
|
|
Die Wrapper‑Architektur von sn_basis bildet das Fundament für eine robuste, testbare und zukunftssichere QGIS‑Plugin‑Entwicklung.
|
|
|
|
|
|
Sie kapselt sämtliche QGIS‑ und Qt‑Abhängigkeiten hinter klar definierten Schnittstellen und ermöglicht dadurch:
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2026-01-09 15:19:25 +01:00
|
|
|
|
- Mock‑fähige Unit‑Tests ohne QGIS
|
|
|
|
|
|
- PyQt5/6‑Kompatibilität ohne Code‑Änderungen
|
|
|
|
|
|
- saubere Trennung von UI, Logik und Infrastruktur
|
|
|
|
|
|
- stabile APIs, die unabhängig von QGIS‑Versionen bleiben
|
|
|
|
|
|
- klare Erweiterbarkeit für zukünftige Module und Plugins
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2026-01-09 15:19:25 +01:00
|
|
|
|
Die Wrapper‑Schicht ist das zentrale Bindeglied zwischen der Plugin‑Logik und der QGIS‑/Qt‑Umgebung.
|
|
|
|
|
|
|
|
|
|
|
|
## Ziele der Wrapper‑Architektur
|
|
|
|
|
|
1. Entkopplung von QGIS und Qt
|
|
|
|
|
|
Alle direkten Importe wie from qgis.core import ... oder from qgis.PyQt.QtWidgets import ... verschwinden aus der Plugin‑Logik.
|
|
|
|
|
|
Stattdessen werden sie über Wrapper‑Module abstrahiert.
|
|
|
|
|
|
|
|
|
|
|
|
2. Testbarkeit ohne QGIS
|
|
|
|
|
|
Im Mock‑Modus liefern die Wrapper:
|
|
|
|
|
|
|
|
|
|
|
|
- Dummy‑Objekte
|
|
|
|
|
|
- simulierte Rückgabewerte
|
|
|
|
|
|
- speicherbare Zustände (z. B. Variablen, Layer, Nachrichten)
|
|
|
|
|
|
|
|
|
|
|
|
Damit laufen Tests in jeder CI‑Umgebung.
|
|
|
|
|
|
|
|
|
|
|
|
3. Einheitliche API für alle Plugins
|
|
|
|
|
|
Plugins greifen nicht mehr direkt auf QGIS zu, sondern nutzen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- sn_basis.functions.qgiscore_wrapper
|
|
|
|
|
|
- sn_basis.functions.qgisui_wrapper
|
|
|
|
|
|
- sn_basis.functions.qt_wrapper
|
|
|
|
|
|
- sn_basis.functions.variable_wrapper
|
|
|
|
|
|
- sn_basis.functions.message_wrapper
|
|
|
|
|
|
- sn_basis.functions.dialog_wrapper
|
|
|
|
|
|
Aufgrund des Umfangs ist der Wrapper für die Layerbehandlung aufgeteilt:
|
|
|
|
|
|
- ly_existence_wrapper
|
|
|
|
|
|
- ly_geometry_wrapper
|
|
|
|
|
|
- ly_Metadata_wrapper
|
|
|
|
|
|
- ly_style_wrapper
|
|
|
|
|
|
- ly_visibility_wrapper
|
|
|
|
|
|
|
|
|
|
|
|
4. Zukunftssicherheit
|
|
|
|
|
|
Ändert sich die QGIS‑ oder Qt‑API, wird nur der Wrapper angepasst, nicht jedes Plugin.
|
|
|
|
|
|
|
|
|
|
|
|
## Architekturüberblick
|
|
|
|
|
|
Die Wrapper‑Schicht besteht aus mehreren Modulen, die jeweils einen klar abgegrenzten Verantwortungsbereich haben.
|
|
|
|
|
|
|
|
|
|
|
|
### 1. qt_wrapper – Qt‑Abstraktion
|
|
|
|
|
|
Kapselt alle Qt‑Widgets, Dialoge und Konstanten:
|
|
|
|
|
|
|
|
|
|
|
|
- QWidget, QDialog, QMessageBox, QToolBar, QMenu, …
|
|
|
|
|
|
- Layouts, Buttons, Labels, LineEdits
|
|
|
|
|
|
- Qt‑Konstanten wie YES, NO, Dock‑Areas
|
|
|
|
|
|
|
|
|
|
|
|
Mock‑Modus:
|
|
|
|
|
|
Stellt Dummy‑Widgets bereit, die keine UI öffnen.
|
|
|
|
|
|
|
|
|
|
|
|
### 2. qgiscore_wrapper – QGIS‑Core‑Abstraktion
|
|
|
|
|
|
Abstraktion für:
|
|
|
|
|
|
|
|
|
|
|
|
- QgsProject
|
|
|
|
|
|
- Layer‑Zugriff
|
|
|
|
|
|
- Projekt‑Metadaten
|
|
|
|
|
|
- Pfade, CRS, Feature‑Zugriff
|
|
|
|
|
|
|
|
|
|
|
|
Mock‑Modus:
|
|
|
|
|
|
Simuliert ein Projekt und Layer‑Container.
|
|
|
|
|
|
|
|
|
|
|
|
### 3. qgisui_wrapper – QGIS‑UI‑Abstraktion
|
|
|
|
|
|
Kapselt UI‑bezogene QGIS‑Funktionen:
|
|
|
|
|
|
|
|
|
|
|
|
- Zugriff auf iface
|
|
|
|
|
|
- Dock‑Management
|
|
|
|
|
|
- Menü‑ und Toolbar‑Integration
|
|
|
|
|
|
- Hauptfenster‑Zugriff
|
|
|
|
|
|
|
|
|
|
|
|
Mock‑Modus:
|
|
|
|
|
|
Stellt ein Dummy‑Interface bereit.
|
|
|
|
|
|
|
|
|
|
|
|
### 4. variable_wrapper – QGIS‑Variablen
|
|
|
|
|
|
Abstraktion für:
|
|
|
|
|
|
|
|
|
|
|
|
- Projektvariablen (projectScope)
|
|
|
|
|
|
- globale Variablen (globalScope)
|
|
|
|
|
|
- Mock‑Speicher für Tests
|
|
|
|
|
|
|
|
|
|
|
|
Vorteile:
|
|
|
|
|
|
|
|
|
|
|
|
- keine QGIS‑Abhängigkeit in der Logik
|
|
|
|
|
|
- testbare Variablenverwaltung
|
|
|
|
|
|
- einheitliches API
|
|
|
|
|
|
|
|
|
|
|
|
### 5. message_wrapper – Meldungen & Logging
|
|
|
|
|
|
Einheitliche Schnittstelle für:
|
|
|
|
|
|
|
|
|
|
|
|
- Fehlermeldungen
|
|
|
|
|
|
- Warnungen
|
|
|
|
|
|
- Info‑Meldungen
|
|
|
|
|
|
- Logging
|
|
|
|
|
|
|
|
|
|
|
|
Mock‑Modus:
|
|
|
|
|
|
Speichert Nachrichten statt sie an QGIS zu senden.
|
|
|
|
|
|
|
|
|
|
|
|
### 6. dialog_wrapper – Benutzer‑Dialoge
|
|
|
|
|
|
Abstraktion für:
|
|
|
|
|
|
|
|
|
|
|
|
- Ja/Nein‑Dialoge
|
|
|
|
|
|
- spätere Erweiterungen (Eingabedialoge, Dateidialoge, etc.)
|
|
|
|
|
|
|
|
|
|
|
|
Mock‑Modus:
|
|
|
|
|
|
Gibt Default‑Werte zurück, öffnet keine UI.
|
|
|
|
|
|
|
|
|
|
|
|
### 7. DockManager & Navigation
|
|
|
|
|
|
Diese Module nutzen die Wrapper‑Schicht, um:
|
|
|
|
|
|
|
|
|
|
|
|
- DockWidgets sicher zu verwalten
|
|
|
|
|
|
- Toolbars und Menüs zu erzeugen
|
|
|
|
|
|
- Reload‑sichere UI‑Strukturen aufzubauen
|
|
|
|
|
|
|
|
|
|
|
|
Sie sind keine Wrapper, sondern Wrapper‑Konsumenten. Alle Fach-Plugins nutzen den Dockmanager des Basisplugins.
|
|
|
|
|
|
|
|
|
|
|
|
## Designprinzipien
|
|
|
|
|
|
1. Single Source of Truth
|
|
|
|
|
|
Jede QGIS‑ oder Qt‑Funktionalität wird nur an einer Stelle implementiert.
|
|
|
|
|
|
|
|
|
|
|
|
2. Austauschbarkeit
|
|
|
|
|
|
Mock‑Modus und Echtmodus sind vollständig austauschbar.
|
|
|
|
|
|
|
|
|
|
|
|
3. Testbarkeit
|
|
|
|
|
|
Jede Funktion kann ohne QGIS getestet werden.
|
|
|
|
|
|
|
|
|
|
|
|
4. Saubere Trennung
|
|
|
|
|
|
- UI → qt_wrapper
|
|
|
|
|
|
- QGIS‑Core → qgiscore_wrapper
|
|
|
|
|
|
- QGIS‑UI → qgisui_wrapper
|
|
|
|
|
|
- Logik → settings_logic, layer_logic, prüfmanager, …
|
|
|
|
|
|
|
|
|
|
|
|
5. Erweiterbarkeit
|
|
|
|
|
|
Neue Wrapper können jederzeit ergänzt werden, ohne bestehende Plugins zu brechen.
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|