_layerRefresh refactor + code clean

This commit is contained in:
Patrick Haßel 2025-09-27 13:51:32 +02:00
parent 126f0f8b50
commit d72fbe169d
2 changed files with 82 additions and 64 deletions

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>290</width> <width>290</width>
<height>532</height> <height>676</height>
</rect> </rect>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
@ -61,7 +61,7 @@
<item> <item>
<widget class="QCheckBox" name="cbWaterlevelsAgency"> <widget class="QCheckBox" name="cbWaterlevelsAgency">
<property name="text"> <property name="text">
<string>Organisation</string> <string>Betreiber</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -107,6 +107,29 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<widget class="QGroupBox" name="gbBasemap">
<property name="title">
<string>Basiskarte:</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="cbBasemapLines">
<property name="text">
<string>Flüsse</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbBasemapAreas">
<property name="text">
<string>Flächen</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QGroupBox" name="gbStations"> <widget class="QGroupBox" name="gbStations">
<property name="title"> <property name="title">
@ -145,7 +168,7 @@
<item> <item>
<widget class="QCheckBox" name="cbStationsAgency"> <widget class="QCheckBox" name="cbStationsAgency">
<property name="text"> <property name="text">
<string>Organisation</string> <string>Betreiber</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -175,26 +198,36 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="5" column="0">
<widget class="QGroupBox" name="gbBasemap"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>Basiskarte:</string> <string>Pegelverlauf:</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QVBoxLayout" name="verticalLayout_8">
<item> <item>
<widget class="QCheckBox" name="cbBasemapLines"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Flüsse</string> <string>Station:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="cbBasemapAreas"> <widget class="QComboBox" name="comboBox"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Flächen</string> <string>Tage</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QSpinBox" name="spinBox"/>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -73,6 +73,7 @@ class PoRunner(object):
if self.lines is not None: if self.lines is not None:
self._layerSetVisible(self.lines, checked) self._layerSetVisible(self.lines, checked)
self._layerRefresh(self.lines)
def cbBasemapAreasToggled(self): def cbBasemapAreasToggled(self):
checked = self.ui.cbBasemapAreas.isChecked() checked = self.ui.cbBasemapAreas.isChecked()
@ -83,6 +84,7 @@ class PoRunner(object):
if self.areas is not None: if self.areas is not None:
self._layerSetVisible(self.areas, checked) self._layerSetVisible(self.areas, checked)
self._layerRefresh(self.areas)
def disconnectBasemapLines(self): def disconnectBasemapLines(self):
print("disconnectBasemapLines") print("disconnectBasemapLines")
@ -96,16 +98,12 @@ class PoRunner(object):
# stations ---------------------------------------------------------------- # stations ----------------------------------------------------------------
def loadStations(self):
print("loadStations")
reader = PoQgsStations()
features = reader.getStationsFeatures()
self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen")
self._stationsUpdateLabeling()
self._layerShow(self.stations, "styles/label_stations.qml", self.disconnectStations)
# noinspection DuplicatedCode # noinspection DuplicatedCode
def _stationsUpdateLabeling(self): def _stationsUpdateLabeling(self):
print("_stationsUpdateLabeling")
if self.stations is None:
return
fields = [] fields = []
if self.ui.cbStationsName.isChecked(): if self.ui.cbStationsName.isChecked():
fields.append("shortname") fields.append("shortname")
@ -117,6 +115,7 @@ class PoRunner(object):
fields.append("km") fields.append("km")
if self.ui.cbStationsWater.isChecked(): if self.ui.cbStationsWater.isChecked():
fields.append("water") fields.append("water")
self._layerUpdateLabeling(self.stations, fields) self._layerUpdateLabeling(self.stations, fields)
# stations signals -------------------------------------------------------- # stations signals --------------------------------------------------------
@ -136,12 +135,14 @@ class PoRunner(object):
print("cbStationsVisibleToggled: %s" % (visible,)) print("cbStationsVisibleToggled: %s" % (visible,))
if self.stations is None and visible: if self.stations is None and visible:
self.loadStations() reader = PoQgsStations()
features = reader.getStationsFeatures()
self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen")
self._layerAdd(self.stations, "styles/label_stations.qml", self.disconnectStations)
if self.stations is not None: if self.stations is not None:
self.stations.setLabelsEnabled(visible)
self._layerSetVisible(self.stations, visible) self._layerSetVisible(self.stations, visible)
self._layerRefresh(self.stations) self._stationsUpdateLabeling()
def cbStationsNameToggled(self): def cbStationsNameToggled(self):
checked = self.ui.cbStationsName.isChecked() checked = self.ui.cbStationsName.isChecked()
@ -170,16 +171,11 @@ class PoRunner(object):
# waterlevels ------------------------------------------------------------- # waterlevels -------------------------------------------------------------
def loadWaterlevels(self):
print("loadWaterlevels")
reader = PoQgsCurrentW()
features = reader.getCurrentWFeatures()
self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen")
self._waterlevelsUpdateLabeling()
self._layerShow(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels)
# noinspection DuplicatedCode # noinspection DuplicatedCode
def _waterlevelsUpdateLabeling(self): def _waterlevelsUpdateLabeling(self):
if self.waterlevels is None:
return
fields = [] fields = []
if self.ui.cbWaterlevelsName.isChecked(): if self.ui.cbWaterlevelsName.isChecked():
fields.append("shortname") fields.append("shortname")
@ -199,12 +195,6 @@ class PoRunner(object):
# waterlevels signals ----------------------------------------------------- # waterlevels signals -----------------------------------------------------
def _layerSetVisible(self, basemap: QgsVectorLayer, visible):
print("_layerSetVisible: %s => %s" % (basemap.name, visible))
layer_tree = QgsProject.instance().layerTreeRoot().findLayer(basemap.id())
layer_tree.setItemVisibilityChecked(visible)
self._layerRefresh(basemap)
def connect_waterlevels_signals(self): def connect_waterlevels_signals(self):
print("connect_waterlevels_signals") print("connect_waterlevels_signals")
# noinspection DuplicatedCode # noinspection DuplicatedCode
@ -221,13 +211,15 @@ class PoRunner(object):
visible = self.ui.cbWaterlevelsVisible.isChecked() visible = self.ui.cbWaterlevelsVisible.isChecked()
print("cbWaterlevelsVisibleToggled: %s" % (visible,)) print("cbWaterlevelsVisibleToggled: %s" % (visible,))
if self.waterlevels is None: if self.waterlevels is None and visible:
self.loadWaterlevels() reader = PoQgsCurrentW()
features = reader.getCurrentWFeatures()
self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen")
self._layerAdd(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels)
if self.waterlevels is not None: if self.waterlevels is not None:
self.waterlevels.setLabelsEnabled(visible)
self._layerSetVisible(self.waterlevels, visible) self._layerSetVisible(self.waterlevels, visible)
self._layerRefresh(self.waterlevels) self._waterlevelsUpdateLabeling()
def cbWaterlevelsNameToggled(self): def cbWaterlevelsNameToggled(self):
checked = self.ui.cbWaterlevelsName.isChecked() checked = self.ui.cbWaterlevelsName.isChecked()
@ -264,18 +256,6 @@ class PoRunner(object):
print("cbWaterlevelsAbsoluteToggled: %s" % (checked,)) print("cbWaterlevelsAbsoluteToggled: %s" % (checked,))
self._waterlevelsUpdateLabeling() self._waterlevelsUpdateLabeling()
# def rbValueChanged(self, button):
# print("rbValueChanged")
# if self.layer_waterlevels is None:
# self.loadWaterlevels()
#
# if button.objectName() == "rbShowTrend":
# self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_trend.qml"))
# elif button.objectName() == "rbShowAbsValues":
# self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_absvalue.qml"))
#
# self.cbWaterlevelsVisibleToggled()
def disconnectWaterlevels(self): def disconnectWaterlevels(self):
print("disconnectWaterlevels") print("disconnectWaterlevels")
self.waterlevels = None self.waterlevels = None
@ -283,6 +263,11 @@ class PoRunner(object):
# layers ------------------------------------------------------------------ # layers ------------------------------------------------------------------
def _layerSetVisible(self, basemap: QgsVectorLayer, visible):
print("_layerSetVisible: %s => %s" % (basemap.name, visible))
layer_tree = QgsProject.instance().layerTreeRoot().findLayer(basemap.id())
layer_tree.setItemVisibilityChecked(visible)
def _layerFromReader(self, fields, crs, features, title) -> None | QgsVectorLayer: def _layerFromReader(self, fields, crs, features, title) -> None | QgsVectorLayer:
print("_layerFromReader") print("_layerFromReader")
if features is None: if features is None:
@ -298,6 +283,9 @@ class PoRunner(object):
layer.updateFields() layer.updateFields()
provider.addFeatures(features) provider.addFeatures(features)
for error in provider.errors():
print("Fehler beim Hinzufügen von Features: " + error)
layer.updateExtents() layer.updateExtents()
layer.commitChanges() layer.commitChanges()
@ -307,7 +295,7 @@ class PoRunner(object):
return None return None
def _layerShow(self, layer: QgsVectorLayer, styles_path: str, disconnect: Callable[[], None]): def _layerAdd(self, layer: QgsVectorLayer, styles_path: str, disconnect: Callable[[], None]):
print("_layerShow") print("_layerShow")
if layer is None: if layer is None:
print("_layerShow: Übergebener Layer ist None") print("_layerShow: Übergebener Layer ist None")
@ -326,9 +314,6 @@ class PoRunner(object):
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup() layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer))
self._layerSetVisible(layer, True)
self._layerRefresh(layer)
def _layerUpdateLabeling(self, layer, fields): def _layerUpdateLabeling(self, layer, fields):
labeling = QgsVectorLayerSimpleLabeling(QgsPalLayerSettings()) labeling = QgsVectorLayerSimpleLabeling(QgsPalLayerSettings())