unnötige assets gelöscht
This commit is contained in:
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 115 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 160 KiB |
@@ -1,188 +0,0 @@
|
|||||||
# 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:
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
Code
|
|
||||||
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
|
|
||||||
🎯 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.
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
|
||||||
## Vorteile für Entwickler
|
|
||||||
Keine QGIS‑Abhängigkeiten in der Logik
|
|
||||||
|
|
||||||
IDE‑freundlich (Pylance, Autocomplete, Typing)
|
|
||||||
|
|
||||||
CI‑fähig (Tests ohne QGIS)
|
|
||||||
|
|
||||||
saubere Architektur
|
|
||||||
|
|
||||||
leichte Wartbarkeit
|
|
||||||
|
|
||||||
klare Dokumentation
|
|
||||||
|
|
||||||
## Fazit
|
|
||||||
Die Wrapper‑Architektur ist das Herzstück von sn_basis.
|
|
||||||
Sie ermöglicht eine moderne, modulare und testbare QGIS‑Plugin‑Entwicklung, die unabhängig von QGIS‑Versionen, Qt‑Versionen und Entwicklungsumgebungen funktioniert.
|
|
||||||
|
|
||||||
Sie bildet die Grundlage für:
|
|
||||||
|
|
||||||
stabile APIs
|
|
||||||
|
|
||||||
saubere UI‑Abstraktion
|
|
||||||
|
|
||||||
automatisierte Tests
|
|
||||||
|
|
||||||
nachhaltige Weiterentwicklung
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
# 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:
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 15 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 138 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 100 KiB |
@@ -1,38 +0,0 @@
|
|||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
subgraph Plugin
|
|
||||||
P[sn_plan41 Fachplugin]
|
|
||||||
A[Adapter Plan41LinklistAdapter]
|
|
||||||
PM[Pruefmanager]
|
|
||||||
LP[Layerpruefer]
|
|
||||||
KP[Linkpruefer]
|
|
||||||
SP[Stilpruefer]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Core
|
|
||||||
DG[DataGrabber]
|
|
||||||
NL[normalized entries]
|
|
||||||
LL[Layer Loader Provider Dispatch]
|
|
||||||
SM[Spatial Matcher]
|
|
||||||
ST[Storage GPKG / PostGIS]
|
|
||||||
PR[Project QGIS - addMapLayer]
|
|
||||||
LOG[Log / Ergebnisstruktur]
|
|
||||||
end
|
|
||||||
|
|
||||||
P -->|gibt Adapter, Prüfer, Pruefmanager| DG
|
|
||||||
A -->|load liefert Rohdaten| DG
|
|
||||||
DG -->|adapter.normalize| NL
|
|
||||||
NL --> DG
|
|
||||||
DG -->|für jeden Eintrag: _check_link -> KP.check| KP
|
|
||||||
DG -->|für jeden Eintrag: _check_style -> SP.check| SP
|
|
||||||
DG -->|prüfe vorhandene Layer| LP
|
|
||||||
DG -->|lade Layer via provider| LL
|
|
||||||
LL -->|Features| SM
|
|
||||||
SM -->|Abgleich| DG
|
|
||||||
DG -->|speichern| ST
|
|
||||||
ST --> PR
|
|
||||||
DG --> PR
|
|
||||||
DG -->|Ergebnis/Fehler| LOG
|
|
||||||
LOG --> PM
|
|
||||||
DG --> PM
|
|
||||||
```
|
|
||||||
Binary file not shown.
@@ -1,9 +0,0 @@
|
|||||||
```mermaid
|
|
||||||
graph TD
|
|
||||||
M1["<div style='text-align:center'><b>sn_basis</b><br/><br/></b></div><div style='text-align:left'>➡ Initialisierung der GUI<br/> ➡ Exception Handling<br/> ➡ Bereitstellung der Stile"]
|
|
||||||
M2["<div style='text-align:center'><b>sn_verfahrensgebiet</b><br/><br/><div style='text-align:left'>➡ Abruf und Aufbereitung der Gebietsgrenze"<br/>➡ Erstellung neuer Gebietsgrenzen <br/>➡ Grenzpunktextraktion<br/>➡ Grenzpunktprüfung]
|
|
||||||
M3["<div style='text-align:center'><b>sn_Plan41</b><br/><br/><div style='text-align:left'>➡ Fachdatenabruf<br/>➡Versionierung der Fachdaten<br/>➡ Planung der TG-Maßnahmen <br/>➡Kartenerzeugung (NGG und P41)<br/>➡ Erzeugung der Begleitdokumente (Anlagenverzeichnis, MVZ, Maßnahmeblätter)"]
|
|
||||||
|
|
||||||
M1 --> M2
|
|
||||||
M1 --> M3
|
|
||||||
```
|
|
||||||
Reference in New Issue
Block a user