From fb740f489542bd97742c8cc9be06550745648f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Sat, 27 Sep 2025 11:36:37 +0200 Subject: [PATCH] refactor ui + code clean --- pegelonline_dockwidget_base.ui | 179 ++++++++++++++++++-------- po_runner.py | 227 ++++++++++++++++++++++----------- 2 files changed, 278 insertions(+), 128 deletions(-) diff --git a/pegelonline_dockwidget_base.ui b/pegelonline_dockwidget_base.ui index c77aefd..0874d79 100644 --- a/pegelonline_dockwidget_base.ui +++ b/pegelonline_dockwidget_base.ui @@ -6,8 +6,8 @@ 0 0 - 395 - 365 + 297 + 556 @@ -21,87 +21,160 @@ - - + + - Wasserstandinformationen anzeigen: + Pegelstände: - - - - Stationen anzeigen - - - - Wasserstände anzeigen + Anzeigen (Download von Pegelonline) - + + + Optionen: + + + + + + Name + + + + + + + Zeitstempel + + + + + + + Aktueller Wert + + + + + + + mittelere niedrigste, höchste Pegel + + + + + + + absolute niedrigste, höchste Pegel + + + + + + + + + + + + + Stationen: + + + + - Basiskarte Flüsse anzeigen + Anzeigen (Download von Pegelonline) - + + + Optionen: + + + + + + + + Name + + + + + + + Nummer + + + + + + + Unternehmen + + + + + + + + + + + km + + + + + + + Wasserstand + + + + + + + + + + + + + + + Basiskarte: + + + + - Basiskarte Flächen anzeigen + Flüsse - + - Beschriftungen + Flächen - - - - Trend - - - rbValue - - - - - - - Absolutwerte (in cm) - - - rbValue - - - - - - - - - PoGraphDisplay - QWidget -
pegelonline.poGraph2
- 1 -
-
- - - diff --git a/po_runner.py b/po_runner.py index 247cc81..c76f459 100644 --- a/po_runner.py +++ b/po_runner.py @@ -17,30 +17,28 @@ class PoRunner(object): self.local_dir = os.path.dirname(os.path.realpath(__file__)) # Layer Variablen - self.layer_stations = None - self.layer_waterlevels = None - self.basemap_lines = None - self.basemap_areas = None + self.stations = None + self.waterlevels = None + self.lines = None + self.areas = None - # connect ui signals - self.ui.cbStationsVisible.toggled.connect(self.cbStationsVisibleToggled) - self.ui.cbWaterlevelsVisible.toggled.connect(self.cbWaterlevelsVisibleToggled) - self.ui.cbBasemapLinesVisible.toggled.connect(self.cbBasemapLinesVisibleToggled) - self.ui.cbBasemapAreasVisible.toggled.connect(self.cbBasemapAreasVisibleToggled) - self.ui.cbWaterlevelsLabelsVisible.toggled.connect(self.cbWaterlevelsLabelsVisibleToggled) - self.ui.rbValue.buttonClicked.connect(self.rbValueChanged) + self.connect_basemap_signals() + self.connect_stations_signals() + self.connect_waterlevels_signals() + + # stations ---------------------------------------------------------------- def loadStations(self): print("loadStations") reader = PoQgsStations() - self.layer_stations = self._layerFromReader(reader.fields, reader.crs, reader.getStationsFeatures(), "Stationen") - self._layerShow(self.layer_stations, "styles/label_stations.qml", self.disconnectStations) + self.stations = self._layerFromReader(reader.fields, reader.crs, reader.getStationsFeatures(), "Stationen") + self._layerShow(self.stations, "styles/label_stations.qml", self.disconnectStations) def loadWaterlevels(self): print("loadWaterlevels") reader = PoQgsCurrentW() - self.layer_waterlevels = self._layerFromReader(reader.fields, reader.crs, reader.getCurrentWFeatures(), "Wasserstandinformationen") - self._layerShow(self.layer_waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels) + self.waterlevels = self._layerFromReader(reader.fields, reader.crs, reader.getCurrentWFeatures(), "Wasserstandinformationen") + self._layerShow(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels) def _layerFromReader(self, fields, crs, features, title) -> None | QgsVectorLayer: print("_layerFromReader") @@ -86,32 +84,60 @@ class PoRunner(object): self._layerSetVisible(layer, True) self._layerRefresh(layer) - def _layerRefresh(self, layer): - print("_layerRefresh") - if self.iface.mapCanvas().isCachingEnabled(): - layer.triggerRepaint() - else: - self.iface.mapCanvas().refresh() + # stations signals -------------------------------------------------------- - def cbBasemapLinesVisibleToggled(self): - checked = self.ui.cbBasemapLinesVisible.isChecked() - print("cbBasemapLinesVisibleToggled: %s" % (checked,)) + def connect_stations_signals(self): + print("connect_stations_signals") + self.ui.cbStationsVisible.toggled.connect(self.cbStationsVisibleToggled) + self.ui.cbStationsName.toggled.connect(self.cbStationsNameToggled) + self.ui.cbStationsNumber.toggled.connect(self.cbStationsNumberToggled) + self.ui.cbStationsAgency.toggled.connect(self.cbStationsAgencyToggled) + self.ui.cbStationsKm.toggled.connect(self.cbStationsKmToggled) + self.ui.cbStationsWater.toggled.connect(self.cbStationsWaterToggled) - if self.basemap_lines is None and checked: - self.basemap_lines = self._basemapCreate("waters.gpkg|layername=water_l", "Flüsse", self.disconnectBasemapLines) + def cbStationsVisibleToggled(self): + visible = self.ui.cbStationsVisible.isChecked() + print("cbStationsVisibleToggled: %s" % (visible,)) - if self.basemap_lines is not None: - self._layerSetVisible(self.basemap_lines, checked) + if self.stations is None and visible: + self.loadStations() - def cbBasemapAreasVisibleToggled(self): - checked = self.ui.cbBasemapAreasVisible.isChecked() - print("cbBasemapAreasVisibleToggled: %s" % (checked,)) + if self.stations is not None: + self.stations.setLabelsEnabled(visible) + self._layerSetVisible(self.stations, visible) + self._layerRefresh(self.stations) - if self.basemap_areas is None and checked: - self.basemap_areas = self._basemapCreate("waters.gpkg|layername=water_f", "Flächen", self.disconnectBasemapAreas) + def cbStationsNameToggled(self): + checked = self.ui.cbStationsName.isChecked() + print("cbStationsNameToggled: %s" % (checked,)) + # TODO - if self.basemap_areas is not None: - self._layerSetVisible(self.basemap_areas, checked) + def cbStationsNumberToggled(self): + checked = self.ui.cbStationsNumber.isChecked() + print("cbStationsNumberToggled: %s" % (checked,)) + # TODO + + def cbStationsAgencyToggled(self): + checked = self.ui.cbStationsAgency.isChecked() + print("cbStationsAgencyToggled: %s" % (checked,)) + # TODO + + def cbStationsKmToggled(self): + checked = self.ui.cbStationsKm.isChecked() + print("cbStationsKmToggled: %s" % (checked,)) + # TODO + + def cbStationsWaterToggled(self): + checked = self.ui.cbStationsWater.isChecked() + print("cbStationsWaterToggled: %s" % (checked,)) + # TODO + + def disconnectStations(self): + print("disconnectStations") + self.stations = None + self.ui.cbStationsVisible.setChecked(False) + + # basemap ----------------------------------------------------------------- def _basemapCreate(self, path, name, disconnect: Callable[[], None]) -> None | QgsVectorLayer: print("_basemapCreate: %s" % (name,)) @@ -134,68 +160,119 @@ class PoRunner(object): return basemap + # basemap signals --------------------------------------------------------- + + def connect_basemap_signals(self): + print("connect_basemap_signals") + self.ui.cbBasemapLines.toggled.connect(self.cbBasemapLinesToggled) + self.ui.cbBasemapAreas.toggled.connect(self.cbBasemapAreasToggled) + + def cbBasemapLinesToggled(self): + checked = self.ui.cbBasemapLines.isChecked() + print("cbBasemapLinesToggled: %s" % (checked,)) + + if self.lines is None and checked: + self.lines = self._basemapCreate("waters.gpkg|layername=water_l", "Flüsse", self.disconnectBasemapLines) + + if self.lines is not None: + self._layerSetVisible(self.lines, checked) + + def cbBasemapAreasToggled(self): + checked = self.ui.cbBasemapAreas.isChecked() + print("cbBasemapAreasToggled: %s" % (checked,)) + + if self.areas is None and checked: + self.areas = self._basemapCreate("waters.gpkg|layername=water_f", "Flächen", self.disconnectBasemapAreas) + + if self.areas is not None: + self._layerSetVisible(self.areas, checked) + + def disconnectBasemapLines(self): + print("disconnectBasemapLines") + self.lines = None + self.ui.cbBasemapLines.setChecked(False) + + def disconnectBasemapAreas(self): + print("disconnectBasemapAreas") + self.areas = None + self.ui.cbBasemapAreas.setChecked(False) + + # layers ------------------------------------------------------------------ + + def _layerRefresh(self, layer): + print("_layerRefresh") + if self.iface.mapCanvas().isCachingEnabled(): + layer.triggerRepaint() + else: + self.iface.mapCanvas().refresh() + 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 cbStationsVisibleToggled(self): - visible = self.ui.cbStationsVisible.isChecked() - print("cbStationsVisibleToggled: %s" % (visible,)) + # waterlevels signals ----------------------------------------------------- - if self.layer_stations is None and visible: - self.loadStations() - - if self.layer_stations is not None: - self.layer_stations.setLabelsEnabled(visible) - self._layerSetVisible(self.layer_stations, visible) - self._layerRefresh(self.layer_stations) + def connect_waterlevels_signals(self): + print("connect_waterlevels_signals") + self.ui.cbWaterlevelsVisible.toggled.connect(self.cbWaterlevelsVisibleToggled) + self.ui.cbWaterlevelsName.toggled.connect(self.cbWaterlevelsNameToggled) + self.ui.cbWaterlevelsTimestamp.toggled.connect(self.cbWaterlevelsTimestampToggled) + self.ui.cbWaterlevelsValue.toggled.connect(self.cbWaterlevelsValueToggled) + self.ui.cbWaterlevelsMean.toggled.connect(self.cbWaterlevelsMeanToggled) + self.ui.cbWaterlevelsAbsolute.toggled.connect(self.cbWaterlevelsAbsoluteToggled) def cbWaterlevelsVisibleToggled(self): visible = self.ui.cbWaterlevelsVisible.isChecked() print("cbWaterlevelsVisibleToggled: %s" % (visible,)) - if self.layer_waterlevels is None: + if self.waterlevels is None: self.loadWaterlevels() - if self.layer_waterlevels is not None: - self.layer_waterlevels.setLabelsEnabled(visible) - self._layerSetVisible(self.layer_waterlevels, visible) - self._layerRefresh(self.layer_waterlevels) + if self.waterlevels is not None: + self.waterlevels.setLabelsEnabled(visible) + self._layerSetVisible(self.waterlevels, visible) + self._layerRefresh(self.waterlevels) - def cbWaterlevelsLabelsVisibleToggled(self): - print("cbWaterlevelsLabelsVisibleToggled: %s" % (self.ui.cbWaterlevelsVisible.isChecked(),)) + def cbWaterlevelsNameToggled(self): + checked = self.ui.cbWaterlevelsName.isChecked() + print("cbWaterlevelsNameToggled: %s" % (checked,)) # TODO - def rbValueChanged(self, button): - print("rbValueChanged") - if self.layer_waterlevels is None: - self.loadWaterlevels() + def cbWaterlevelsTimestampToggled(self): + checked = self.ui.cbWaterlevelsTimestamp.isChecked() + print("cbWaterlevelsTimestampToggled: %s" % (checked,)) + # TODO - 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")) + def cbWaterlevelsValueToggled(self): + checked = self.ui.cbWaterlevelsValue.isChecked() + print("cbWaterlevelsValueToggled: %s" % (checked,)) + # TODO - self.cbWaterlevelsVisibleToggled() + def cbWaterlevelsMeanToggled(self): + checked = self.ui.cbWaterlevelsMean.isChecked() + print("cbWaterlevelsMeanToggled: %s" % (checked,)) + # TODO - def disconnectStations(self): - print("disconnectStations") - self.layer_stations = None - self.ui.cbStationsVisible.setChecked(False) + def cbWaterlevelsAbsoluteToggled(self): + checked = self.ui.cbWaterlevelsAbsolute.isChecked() + print("cbWaterlevelsAbsoluteToggled: %s" % (checked,)) + # TODO def disconnectWaterlevels(self): print("disconnectWaterlevels") - self.layer_waterlevels = None + self.waterlevels = None self.ui.cbWaterlevelsVisible.setChecked(False) - def disconnectBasemapLines(self): - print("disconnectBasemapLines") - self.basemap_lines = None - self.ui.cbBasemapLinesVisible.setChecked(False) - - def disconnectBasemapAreas(self): - print("disconnectBasemapAreas") - self.basemap_areas = None - self.ui.cbBasemapAreasVisible.setChecked(False) + # 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()