Basemap-Legende: Auswertung und Legendenelement im Drucklayout (#88)
Beim Erstellen einer §38-/§41-Vorlage wertet BasemapLegende die Kacheln des sichtbaren basemap.de-Layers im Verfahrensgebiet (wahlweise Druckbereich) kachelweise über selectByGeometry aus, prüft die Renderer-Styles mit derselben Zoomlogik wie QGIS und bildet daraus Legendeneinträge. Ein Mehrfachauswahl-Dialog (neu: ask_mehrfachauswahl) lässt Kategorien abwählen; die Auswahl wird im Projekt gemerkt. Die gewählten Einträge stehen mit der Signatur des Projektlayers (zoomabhängige Werte festgeschrieben) in einem eigenen Legendenelement über der Quellenangabe. Ein eigenes Element ist nötig, weil die nach Karteninhalt filternde Hauptlegende die Hilfslayer ausblenden würde. Wrapper um die nötigen QGIS-/Qt-Symbole mit Mock ergänzt (eigener Block in qgiscore_wrapper; QgsRectangle hatte bisher keinen Mock). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,7 @@ QTableWidget: Type[Any] = object
|
||||
QTableWidgetItem: Type[Any] = object
|
||||
QTableWidgetSelectionRange: Type[Any] = object
|
||||
QIcon: Type[Any] = object
|
||||
QSize: Type[Any] = object
|
||||
|
||||
|
||||
def exec_dialog(dialog: Any) -> Any:
|
||||
@@ -125,6 +126,7 @@ try:
|
||||
Qt as _Qt,
|
||||
QVariant as _QVariant,
|
||||
QSettings as _QSettings,
|
||||
QSize as _QSize,
|
||||
)
|
||||
from qgis.PyQt.QtNetwork import (
|
||||
QNetworkRequest as _QNetworkRequest,
|
||||
@@ -175,6 +177,7 @@ try:
|
||||
QTableWidgetItem = _QTableWidgetItem
|
||||
QTableWidgetSelectionRange = _QTableWidgetSelectionRange
|
||||
QIcon = _QIcon
|
||||
QSize = _QSize
|
||||
# ✅ QT6 ENUMS
|
||||
YES = QMessageBox.StandardButton.Yes
|
||||
NO = QMessageBox.StandardButton.No
|
||||
@@ -200,6 +203,11 @@ try:
|
||||
SelectRows = QAbstractItemView.SelectionBehavior.SelectRows
|
||||
NoEditTriggers = QAbstractItemView.EditTrigger.NoEditTriggers
|
||||
AscendingOrder = Qt.SortOrder.AscendingOrder
|
||||
ItemIsUserCheckable = Qt.ItemFlag.ItemIsUserCheckable
|
||||
ItemIsEnabled = Qt.ItemFlag.ItemIsEnabled
|
||||
CheckStateChecked = Qt.CheckState.Checked
|
||||
CheckStateUnchecked = Qt.CheckState.Unchecked
|
||||
UserRole = Qt.ItemDataRole.UserRole
|
||||
|
||||
def exec_dialog(dialog: Any) -> Any:
|
||||
return dialog.exec()
|
||||
@@ -249,6 +257,7 @@ except (ImportError, AttributeError):
|
||||
Qt as _Qt,
|
||||
QVariant as _QVariant,
|
||||
QSettings as _QSettings,
|
||||
QSize as _QSize,
|
||||
)
|
||||
from PyQt5.QtNetwork import (
|
||||
QNetworkRequest as _QNetworkRequest,
|
||||
@@ -297,6 +306,7 @@ except (ImportError, AttributeError):
|
||||
QTableWidgetItem = _QTableWidgetItem
|
||||
QTableWidgetSelectionRange = _QTableWidgetSelectionRange
|
||||
QIcon = _QIcon
|
||||
QSize = _QSize
|
||||
|
||||
# ✅ PYQT5 ENUMS
|
||||
YES = QMessageBox.Yes
|
||||
@@ -324,6 +334,11 @@ except (ImportError, AttributeError):
|
||||
SelectRows = QAbstractItemView.SelectRows
|
||||
NoEditTriggers = QAbstractItemView.NoEditTriggers
|
||||
AscendingOrder = Qt.AscendingOrder
|
||||
ItemIsUserCheckable = Qt.ItemIsUserCheckable
|
||||
ItemIsEnabled = Qt.ItemIsEnabled
|
||||
CheckStateChecked = Qt.Checked
|
||||
CheckStateUnchecked = Qt.Unchecked
|
||||
UserRole = Qt.UserRole
|
||||
|
||||
def exec_dialog(dialog: Any) -> Any:
|
||||
return dialog.exec_()
|
||||
@@ -687,6 +702,19 @@ except (ImportError, AttributeError):
|
||||
SelectRows = 1
|
||||
NoEditTriggers = 0
|
||||
AscendingOrder = 0
|
||||
ItemIsUserCheckable = 16
|
||||
ItemIsEnabled = 32
|
||||
CheckStateChecked = 2
|
||||
CheckStateUnchecked = 0
|
||||
UserRole = 256
|
||||
|
||||
class _MockQSize:
|
||||
def __init__(self, width: int = 0, height: int = 0):
|
||||
self._width, self._height = width, height
|
||||
def width(self) -> int: return self._width
|
||||
def height(self) -> int: return self._height
|
||||
|
||||
QSize = _MockQSize
|
||||
|
||||
class _MockQDialog(_MockWidget):
|
||||
DialogCode = type("DialogCode", (), {"Accepted": DialogAccepted, "Rejected": 0})
|
||||
|
||||
Reference in New Issue
Block a user