QGIS-Layer-List-Sichtbarkeit-Signal verbunden
This commit is contained in:
parent
acd0c8d888
commit
0f8730db7f
@ -2,5 +2,3 @@
|
|||||||
Beim Hinzufügen von Features fehlte das layer.updateFields()
|
Beim Hinzufügen von Features fehlte das layer.updateFields()
|
||||||
Beim Hinzufügen von Features fehlte wurde versucht eine viel zu große Pegelonline 'number' in einen Int zu stecken. War schwierig zu entdecken => provider.errors()
|
Beim Hinzufügen von Features fehlte wurde versucht eine viel zu große Pegelonline 'number' in einen Int zu stecken. War schwierig zu entdecken => provider.errors()
|
||||||
DockWidget wurde in der Höhe ziemlich voll → Weiteres Widget nur für Grafen
|
DockWidget wurde in der Höhe ziemlich voll → Weiteres Widget nur für Grafen
|
||||||
|
|
||||||
(De-)Selekt aus Layer-Liste mitbekommen
|
|
||||||
77
po_runner.py
77
po_runner.py
@ -2,7 +2,7 @@ import os.path
|
|||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
from PyQt5.QtWidgets import QAction
|
from PyQt5.QtWidgets import QAction, QCheckBox
|
||||||
from qgis._core import QgsVectorLayer, QgsProject, QgsLayerTreeLayer, QgsPalLayerSettings, QgsVectorLayerSimpleLabeling, QgsStyle, QgsSymbol, QgsRendererCategory, QgsCategorizedSymbolRenderer
|
from qgis._core import QgsVectorLayer, QgsProject, QgsLayerTreeLayer, QgsPalLayerSettings, QgsVectorLayerSimpleLabeling, QgsStyle, QgsSymbol, QgsRendererCategory, QgsCategorizedSymbolRenderer
|
||||||
|
|
||||||
from .map_tips import WATERLEVELS_MAP_TIPS, STATIONS_MAP_TIPS, BASEMAP_MAP_TIPS
|
from .map_tips import WATERLEVELS_MAP_TIPS, STATIONS_MAP_TIPS, BASEMAP_MAP_TIPS
|
||||||
@ -77,9 +77,11 @@ class PoRunner(object):
|
|||||||
:param disconnect: Methode die Aufgerufen wird, wenn der Layer gelöscht wird
|
:param disconnect: Methode die Aufgerufen wird, wenn der Layer gelöscht wird
|
||||||
:type disconnect: Callable[[], None]
|
:type disconnect: Callable[[], None]
|
||||||
:param map_tips: HTML Code für die QGIS-Map-Tips
|
:param map_tips: HTML Code für die QGIS-Map-Tips
|
||||||
|
:param checkbox: Sichtbarkeit-Checkbox um sie via Signal upzudaten
|
||||||
|
:type checkbox: QCheckBox
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _basemap_create(self, path, name, disconnect: Callable[[], None], map_tips) -> None | QgsVectorLayer:
|
def _basemap_create(self, path, name, disconnect: Callable[[], None], map_tips, checkbox) -> None | QgsVectorLayer:
|
||||||
print("_basemap_create: %s" % (name,))
|
print("_basemap_create: %s" % (name,))
|
||||||
path = os.path.join(self.local_dir, "basemap", path)
|
path = os.path.join(self.local_dir, "basemap", path)
|
||||||
basemap = QgsVectorLayer(path, name, "ogr")
|
basemap = QgsVectorLayer(path, name, "ogr")
|
||||||
@ -102,6 +104,9 @@ class PoRunner(object):
|
|||||||
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
|
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
|
||||||
layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) # am unteren Ende anhängen → liegt somit unter stations/waterlevels
|
layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) # am unteren Ende anhängen → liegt somit unter stations/waterlevels
|
||||||
|
|
||||||
|
# Signal zur Erkennung von Sichtbarkeitsänderungen verbinden
|
||||||
|
self._connect_layer_list_visibility_signal(basemap, checkbox)
|
||||||
|
|
||||||
return basemap
|
return basemap
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -122,8 +127,14 @@ class PoRunner(object):
|
|||||||
print("_cbBasemapLines_toggled: %s" % (checked,))
|
print("_cbBasemapLines_toggled: %s" % (checked,))
|
||||||
|
|
||||||
if self.lines is None and checked:
|
if self.lines is None and checked:
|
||||||
# Flüsse sind noch nicht als Layer angelegt → Anlegen
|
# Flüsse sind noch nicht als Layer geladen → Laden
|
||||||
self.lines = self._basemap_create("waters.gpkg|layername=water_l", "Flüsse", self._basemap_disconnect_lines, BASEMAP_MAP_TIPS)
|
self.lines = self._basemap_create(
|
||||||
|
"waters.gpkg|layername=water_l",
|
||||||
|
"Flüsse",
|
||||||
|
self._basemap_disconnect_lines,
|
||||||
|
BASEMAP_MAP_TIPS,
|
||||||
|
self.ui.cbBasemapLines,
|
||||||
|
)
|
||||||
|
|
||||||
if self.lines is not None:
|
if self.lines is not None:
|
||||||
# Flüsse sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
# Flüsse sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
||||||
@ -139,8 +150,14 @@ class PoRunner(object):
|
|||||||
print("_cbBasemapAreas_toggled: %s" % (checked,))
|
print("_cbBasemapAreas_toggled: %s" % (checked,))
|
||||||
|
|
||||||
if self.areas is None and checked:
|
if self.areas is None and checked:
|
||||||
# Flächen sind noch nicht als Layer angelegt → Anlegen
|
# Flächen sind noch nicht als Layer geladen → Laden
|
||||||
self.areas = self._basemap_create("waters.gpkg|layername=water_f", "Flächen", self._basemap_disconnect_areas, BASEMAP_MAP_TIPS)
|
self.areas = self._basemap_create(
|
||||||
|
"waters.gpkg|layername=water_f",
|
||||||
|
"Flächen",
|
||||||
|
self._basemap_disconnect_areas,
|
||||||
|
BASEMAP_MAP_TIPS,
|
||||||
|
self.ui.cbBasemapAreas,
|
||||||
|
)
|
||||||
|
|
||||||
if self.areas is not None:
|
if self.areas is not None:
|
||||||
# Flächen sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
# Flächen sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
||||||
@ -232,11 +249,11 @@ class PoRunner(object):
|
|||||||
print("_cbStationsVisible_toggled: %s" % (visible,))
|
print("_cbStationsVisible_toggled: %s" % (visible,))
|
||||||
|
|
||||||
if self.stations is None and visible:
|
if self.stations is None and visible:
|
||||||
# Stationen sind noch nicht als Layer angelegt → Anlegen
|
# Stationen sind noch nicht als Layer geladen → Laden
|
||||||
reader = PoStationReaderQgs()
|
reader = PoStationReaderQgs()
|
||||||
features = reader.get_features()
|
features = reader.get_features()
|
||||||
self.stations = self._layer_create_from_features(reader.fields, reader.crs, features, "Stationen", STATIONS_MAP_TIPS)
|
self.stations = self._layer_create_from_features(reader.fields, reader.crs, features, "Stationen", STATIONS_MAP_TIPS)
|
||||||
self._layer_add_to_instance(self.stations, self._stations_disconnect)
|
self._layer_add_to_instance(self.stations, self._stations_disconnect, self.ui.cbStationsVisible)
|
||||||
|
|
||||||
if self.stations is not None:
|
if self.stations is not None:
|
||||||
# Stationen sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
# Stationen sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
||||||
@ -402,11 +419,11 @@ class PoRunner(object):
|
|||||||
print("_cbWaterlevelsVisible_toggled: %s" % (visible,))
|
print("_cbWaterlevelsVisible_toggled: %s" % (visible,))
|
||||||
|
|
||||||
if self.waterlevels is None and visible:
|
if self.waterlevels is None and visible:
|
||||||
# Pegelstände sind noch nicht als Layer angelegt → Anlegen
|
# Pegelstände sind noch nicht als Layer geladen → Laden
|
||||||
reader = PoWaterlevelReaderQgs()
|
reader = PoWaterlevelReaderQgs()
|
||||||
features = reader.get_features()
|
features = reader.get_features()
|
||||||
self.waterlevels = self._layer_create_from_features(reader.fields, reader.crs, features, "Pegelstände", WATERLEVELS_MAP_TIPS)
|
self.waterlevels = self._layer_create_from_features(reader.fields, reader.crs, features, "Pegelstände", WATERLEVELS_MAP_TIPS)
|
||||||
self._layer_add_to_instance(self.waterlevels, self.waterlevels_disconnect)
|
self._layer_add_to_instance(self.waterlevels, self.waterlevels_disconnect, self.ui.cbWaterlevelsVisible)
|
||||||
|
|
||||||
if self.waterlevels is not None:
|
if self.waterlevels is not None:
|
||||||
# Pegelstände sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
# Pegelstände sind (bereits) angelegt → setze Sichtbarkeit wie gefordert
|
||||||
@ -603,9 +620,11 @@ class PoRunner(object):
|
|||||||
:type layer: QgsVectorLayer
|
:type layer: QgsVectorLayer
|
||||||
:param disconnect: Methode die Aufgerufen wird, wenn der Layer gelöscht wird
|
:param disconnect: Methode die Aufgerufen wird, wenn der Layer gelöscht wird
|
||||||
:type disconnect: Callable[[], None]
|
:type disconnect: Callable[[], None]
|
||||||
|
:param checkbox: Sichtbarkeit-Checkbox um sie via Signal upzudaten
|
||||||
|
:type checkbox: QCheckBox
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _layer_add_to_instance(self, layer: QgsVectorLayer, disconnect: Callable[[], None]):
|
def _layer_add_to_instance(self, layer: QgsVectorLayer, disconnect: Callable[[], None], checkbox: QCheckBox):
|
||||||
print("_layer_add_to_instance")
|
print("_layer_add_to_instance")
|
||||||
if layer is None:
|
if layer is None:
|
||||||
# Kein Layer mitgegeben → Abbruch
|
# Kein Layer mitgegeben → Abbruch
|
||||||
@ -623,6 +642,42 @@ class PoRunner(object):
|
|||||||
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
|
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
|
||||||
layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) # am oberen Ende anhängen → liegt somit über basemap
|
layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) # am oberen Ende anhängen → liegt somit über basemap
|
||||||
|
|
||||||
|
# Signal zur Erkennung von Sichtbarkeitsänderungen verbinden
|
||||||
|
self._connect_layer_list_visibility_signal(layer, checkbox)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Verbinde das Layer-Sichtbarkeit-Signal der QGIS-Layer-Liste mit unserer Layer-Referenz und unserer Checkbox
|
||||||
|
:param layer: Zu behandelnder Layer
|
||||||
|
:type layer: QgsVectorLayer
|
||||||
|
:param checkbox: Sichtbarkeit-Checkbox um sie via Signal upzudaten
|
||||||
|
:type checkbox: QCheckBox
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _connect_layer_list_visibility_signal(self, layer, checkbox):
|
||||||
|
root = QgsProject.instance().layerTreeRoot()
|
||||||
|
node = root.findLayer(layer.id())
|
||||||
|
if node:
|
||||||
|
# Node existiert → Signal verbinden
|
||||||
|
node.visibilityChanged.connect(lambda: self._layer_set_visible_includingCheckbox(layer, node.isVisible(), checkbox))
|
||||||
|
print("_layer_add_to_instance: Layer-Sichtbarkeits-Signal verbunden!")
|
||||||
|
else:
|
||||||
|
# Node nicht gefunden → ignorieren (Programmierfehler)
|
||||||
|
print("_layer_add_to_instance: Fehler: Node im Tree nicht gefunden!")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Setzt die Sichtbarkeit des gegebenen Layers (inklusive gegebener Checkbox)
|
||||||
|
:param layer: Zu behandelnder Layer
|
||||||
|
:type layer: QgsVectorLayer
|
||||||
|
:param visible: Sichtbarkeit
|
||||||
|
:type visible: bool
|
||||||
|
:param checkbox: Sichtbarkeit-Checkbox um sie via Signal upzudaten
|
||||||
|
:type checkbox: QCheckBox
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _layer_set_visible_includingCheckbox(self, layer, visible: bool, checkbox: QCheckBox):
|
||||||
|
checkbox.setChecked(visible)
|
||||||
|
self._layer_set_visible(layer, visible)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Aktualisiert die Labels eines Layers
|
Aktualisiert die Labels eines Layers
|
||||||
:param layer: Zu behandelnder Layer
|
:param layer: Zu behandelnder Layer
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user