Files
Plugin_SN_Basis/assets/Pluginkonzept.md
daniel 039c614592 Fix: beim Plugin-Reload werden neue Toolbars hinzugefügt aber keine gelöscht
Fix: Settings-Tab ist leer
Dokumentation begonnen
Pluginkonzept.md überarbeitet
2026-01-09 15:19:25 +01:00

4.1 KiB
Raw Permalink Blame History

WrapperArchitektur Übersicht

Die WrapperArchitektur von sn_basis bildet das Fundament für eine robuste, testbare und zukunftssichere QGISPluginEntwicklung. Sie kapselt sämtliche QGIS und QtAbhängigkeiten hinter klar definierten Schnittstellen und ermöglicht dadurch:

  • Mockfähige UnitTests ohne QGIS
  • PyQt5/6Kompatibilität ohne CodeÄnderungen
  • saubere Trennung von UI, Logik und Infrastruktur
  • stabile APIs, die unabhängig von QGISVersionen bleiben
  • klare Erweiterbarkeit für zukünftige Module und Plugins

Die WrapperSchicht ist das zentrale Bindeglied zwischen der PluginLogik und der QGIS/QtUmgebung.

Ziele der WrapperArchitektur

  1. Entkopplung von QGIS und Qt Alle direkten Importe wie from qgis.core import ... oder from qgis.PyQt.QtWidgets import ... verschwinden aus der PluginLogik. Stattdessen werden sie über WrapperModule abstrahiert.

  2. Testbarkeit ohne QGIS Im MockModus liefern die Wrapper:

  • DummyObjekte
  • simulierte Rückgabewerte
  • speicherbare Zustände (z.B. Variablen, Layer, Nachrichten)

Damit laufen Tests in jeder CIUmgebung.

  1. 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
  1. Zukunftssicherheit Ändert sich die QGIS oder QtAPI, wird nur der Wrapper angepasst, nicht jedes Plugin.

Architekturüberblick

Die WrapperSchicht besteht aus mehreren Modulen, die jeweils einen klar abgegrenzten Verantwortungsbereich haben.

1. qt_wrapper QtAbstraktion

Kapselt alle QtWidgets, Dialoge und Konstanten:

  • QWidget, QDialog, QMessageBox, QToolBar, QMenu, …
  • Layouts, Buttons, Labels, LineEdits
  • QtKonstanten wie YES, NO, DockAreas

MockModus:
Stellt DummyWidgets bereit, die keine UI öffnen.

2. qgiscore_wrapper QGISCoreAbstraktion

Abstraktion für:

  • QgsProject
  • LayerZugriff
  • ProjektMetadaten
  • Pfade, CRS, FeatureZugriff

MockModus:
Simuliert ein Projekt und LayerContainer.

3. qgisui_wrapper QGISUIAbstraktion

Kapselt UIbezogene QGISFunktionen:

  • Zugriff auf iface
  • DockManagement
  • Menü und ToolbarIntegration
  • HauptfensterZugriff

MockModus:
Stellt ein DummyInterface bereit.

4. variable_wrapper QGISVariablen

Abstraktion für:

  • Projektvariablen (projectScope)
  • globale Variablen (globalScope)
  • MockSpeicher für Tests

Vorteile:

  • keine QGISAbhängigkeit in der Logik
  • testbare Variablenverwaltung
  • einheitliches API

5. message_wrapper Meldungen & Logging

Einheitliche Schnittstelle für:

  • Fehlermeldungen
  • Warnungen
  • InfoMeldungen
  • Logging

MockModus: Speichert Nachrichten statt sie an QGIS zu senden.

6. dialog_wrapper BenutzerDialoge

Abstraktion für:

  • Ja/NeinDialoge
  • spätere Erweiterungen (Eingabedialoge, Dateidialoge, etc.)

MockModus: Gibt DefaultWerte zurück, öffnet keine UI.

7. DockManager & Navigation

Diese Module nutzen die WrapperSchicht, um:

  • DockWidgets sicher zu verwalten
  • Toolbars und Menüs zu erzeugen
  • Reloadsichere UIStrukturen aufzubauen

Sie sind keine Wrapper, sondern WrapperKonsumenten. Alle Fach-Plugins nutzen den Dockmanager des Basisplugins.

Designprinzipien

  1. Single Source of Truth Jede QGIS oder QtFunktionalität wird nur an einer Stelle implementiert.

  2. Austauschbarkeit MockModus und Echtmodus sind vollständig austauschbar.

  3. Testbarkeit Jede Funktion kann ohne QGIS getestet werden.

  4. Saubere Trennung

  • UI → qt_wrapper
  • QGISCore → qgiscore_wrapper
  • QGISUI → qgisui_wrapper
  • Logik → settings_logic, layer_logic, prüfmanager, …
  1. Erweiterbarkeit Neue Wrapper können jederzeit ergänzt werden, ohne bestehende Plugins zu brechen.