refactor ui + code clean

This commit is contained in:
Patrick Haßel 2025-09-27 11:36:37 +02:00
parent a93c9a520f
commit fb740f4895
2 changed files with 278 additions and 128 deletions

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>395</width> <width>297</width>
<height>365</height> <height>556</height>
</rect> </rect>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
@ -21,69 +21,153 @@
</property> </property>
<widget class="QWidget" name="dockWidgetContents"> <widget class="QWidget" name="dockWidgetContents">
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="1" column="0"> <item row="4" column="0">
<widget class="QGroupBox" name="gbShowMap"> <widget class="QGroupBox" name="gbWaterlevels">
<property name="title"> <property name="title">
<string>Wasserstandinformationen anzeigen:</string> <string>Pegelstände:</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="cbStationsVisible">
<property name="text">
<string>Stationen anzeigen</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="cbWaterlevelsVisible"> <widget class="QCheckBox" name="cbWaterlevelsVisible">
<property name="text"> <property name="text">
<string>Wasserstände anzeigen</string> <string>Anzeigen (Download von Pegelonline)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="cbBasemapLinesVisible"> <widget class="QGroupBox" name="gbWaterlevelsOptions">
<property name="title">
<string>Optionen:</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="cbWaterlevelsName">
<property name="text"> <property name="text">
<string>Basiskarte Flüsse anzeigen</string> <string>Name</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="cbBasemapAreasVisible"> <widget class="QCheckBox" name="cbWaterlevelsTimestamp">
<property name="text"> <property name="text">
<string>Basiskarte Flächen anzeigen</string> <string>Zeitstempel</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="cbWaterlevelsLabelsVisible"> <widget class="QCheckBox" name="cbWaterlevelsValue">
<property name="text"> <property name="text">
<string>Beschriftungen</string> <string>Aktueller Wert</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="rbShowTrend"> <widget class="QCheckBox" name="cbWaterlevelsMean">
<property name="text"> <property name="text">
<string>Trend</string> <string>mittelere niedrigste, höchste Pegel</string>
</property> </property>
<attribute name="buttonGroup">
<string notr="true">rbValue</string>
</attribute>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="rbShowAbsValues"> <widget class="QCheckBox" name="cbWaterlevelsAbsolute">
<property name="text"> <property name="text">
<string>Absolutwerte (in cm)</string> <string>absolute niedrigste, höchste Pegel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="gbStations">
<property name="title">
<string>Stationen:</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="cbStationsVisible">
<property name="text">
<string>Anzeigen (Download von Pegelonline)</string>
</property> </property>
<attribute name="buttonGroup">
<string notr="true">rbValue</string>
</attribute>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="PoGraphDisplay" name="poGraphDisplay" native="true"/> <widget class="QGroupBox" name="gbStationsOptions">
<property name="title">
<string>Optionen:</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="cbStationsName">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbStationsNumber">
<property name="text">
<string>Nummer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbStationsAgency">
<property name="text">
<string>Unternehmen</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QCheckBox" name="cbStationsKm">
<property name="text">
<string>km</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbStationsWater">
<property name="text">
<string>Wasserstand</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</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> </item>
</layout> </layout>
</widget> </widget>
@ -91,17 +175,6 @@
</layout> </layout>
</widget> </widget>
</widget> </widget>
<customwidgets>
<customwidget>
<class>PoGraphDisplay</class>
<extends>QWidget</extends>
<header>pegelonline.poGraph2</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
<buttongroups>
<buttongroup name="rbValue"/>
</buttongroups>
</ui> </ui>

View File

@ -17,30 +17,28 @@ class PoRunner(object):
self.local_dir = os.path.dirname(os.path.realpath(__file__)) self.local_dir = os.path.dirname(os.path.realpath(__file__))
# Layer Variablen # Layer Variablen
self.layer_stations = None self.stations = None
self.layer_waterlevels = None self.waterlevels = None
self.basemap_lines = None self.lines = None
self.basemap_areas = None self.areas = None
# connect ui signals self.connect_basemap_signals()
self.ui.cbStationsVisible.toggled.connect(self.cbStationsVisibleToggled) self.connect_stations_signals()
self.ui.cbWaterlevelsVisible.toggled.connect(self.cbWaterlevelsVisibleToggled) self.connect_waterlevels_signals()
self.ui.cbBasemapLinesVisible.toggled.connect(self.cbBasemapLinesVisibleToggled)
self.ui.cbBasemapAreasVisible.toggled.connect(self.cbBasemapAreasVisibleToggled) # stations ----------------------------------------------------------------
self.ui.cbWaterlevelsLabelsVisible.toggled.connect(self.cbWaterlevelsLabelsVisibleToggled)
self.ui.rbValue.buttonClicked.connect(self.rbValueChanged)
def loadStations(self): def loadStations(self):
print("loadStations") print("loadStations")
reader = PoQgsStations() reader = PoQgsStations()
self.layer_stations = self._layerFromReader(reader.fields, reader.crs, reader.getStationsFeatures(), "Stationen") self.stations = self._layerFromReader(reader.fields, reader.crs, reader.getStationsFeatures(), "Stationen")
self._layerShow(self.layer_stations, "styles/label_stations.qml", self.disconnectStations) self._layerShow(self.stations, "styles/label_stations.qml", self.disconnectStations)
def loadWaterlevels(self): def loadWaterlevels(self):
print("loadWaterlevels") print("loadWaterlevels")
reader = PoQgsCurrentW() reader = PoQgsCurrentW()
self.layer_waterlevels = self._layerFromReader(reader.fields, reader.crs, reader.getCurrentWFeatures(), "Wasserstandinformationen") self.waterlevels = self._layerFromReader(reader.fields, reader.crs, reader.getCurrentWFeatures(), "Wasserstandinformationen")
self._layerShow(self.layer_waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels) self._layerShow(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels)
def _layerFromReader(self, fields, crs, features, title) -> None | QgsVectorLayer: def _layerFromReader(self, fields, crs, features, title) -> None | QgsVectorLayer:
print("_layerFromReader") print("_layerFromReader")
@ -86,32 +84,60 @@ class PoRunner(object):
self._layerSetVisible(layer, True) self._layerSetVisible(layer, True)
self._layerRefresh(layer) self._layerRefresh(layer)
def _layerRefresh(self, layer): # stations signals --------------------------------------------------------
print("_layerRefresh")
if self.iface.mapCanvas().isCachingEnabled():
layer.triggerRepaint()
else:
self.iface.mapCanvas().refresh()
def cbBasemapLinesVisibleToggled(self): def connect_stations_signals(self):
checked = self.ui.cbBasemapLinesVisible.isChecked() print("connect_stations_signals")
print("cbBasemapLinesVisibleToggled: %s" % (checked,)) 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: def cbStationsVisibleToggled(self):
self.basemap_lines = self._basemapCreate("waters.gpkg|layername=water_l", "Flüsse", self.disconnectBasemapLines) visible = self.ui.cbStationsVisible.isChecked()
print("cbStationsVisibleToggled: %s" % (visible,))
if self.basemap_lines is not None: if self.stations is None and visible:
self._layerSetVisible(self.basemap_lines, checked) self.loadStations()
def cbBasemapAreasVisibleToggled(self): if self.stations is not None:
checked = self.ui.cbBasemapAreasVisible.isChecked() self.stations.setLabelsEnabled(visible)
print("cbBasemapAreasVisibleToggled: %s" % (checked,)) self._layerSetVisible(self.stations, visible)
self._layerRefresh(self.stations)
if self.basemap_areas is None and checked: def cbStationsNameToggled(self):
self.basemap_areas = self._basemapCreate("waters.gpkg|layername=water_f", "Flächen", self.disconnectBasemapAreas) checked = self.ui.cbStationsName.isChecked()
print("cbStationsNameToggled: %s" % (checked,))
# TODO
if self.basemap_areas is not None: def cbStationsNumberToggled(self):
self._layerSetVisible(self.basemap_areas, checked) 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: def _basemapCreate(self, path, name, disconnect: Callable[[], None]) -> None | QgsVectorLayer:
print("_basemapCreate: %s" % (name,)) print("_basemapCreate: %s" % (name,))
@ -134,68 +160,119 @@ class PoRunner(object):
return basemap 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): def _layerSetVisible(self, basemap: QgsVectorLayer, visible):
print("_layerSetVisible: %s => %s" % (basemap.name, visible)) print("_layerSetVisible: %s => %s" % (basemap.name, visible))
layer_tree = QgsProject.instance().layerTreeRoot().findLayer(basemap.id()) layer_tree = QgsProject.instance().layerTreeRoot().findLayer(basemap.id())
layer_tree.setItemVisibilityChecked(visible) layer_tree.setItemVisibilityChecked(visible)
self._layerRefresh(basemap) self._layerRefresh(basemap)
def cbStationsVisibleToggled(self): # waterlevels signals -----------------------------------------------------
visible = self.ui.cbStationsVisible.isChecked()
print("cbStationsVisibleToggled: %s" % (visible,))
if self.layer_stations is None and visible: def connect_waterlevels_signals(self):
self.loadStations() print("connect_waterlevels_signals")
self.ui.cbWaterlevelsVisible.toggled.connect(self.cbWaterlevelsVisibleToggled)
if self.layer_stations is not None: self.ui.cbWaterlevelsName.toggled.connect(self.cbWaterlevelsNameToggled)
self.layer_stations.setLabelsEnabled(visible) self.ui.cbWaterlevelsTimestamp.toggled.connect(self.cbWaterlevelsTimestampToggled)
self._layerSetVisible(self.layer_stations, visible) self.ui.cbWaterlevelsValue.toggled.connect(self.cbWaterlevelsValueToggled)
self._layerRefresh(self.layer_stations) self.ui.cbWaterlevelsMean.toggled.connect(self.cbWaterlevelsMeanToggled)
self.ui.cbWaterlevelsAbsolute.toggled.connect(self.cbWaterlevelsAbsoluteToggled)
def cbWaterlevelsVisibleToggled(self): def cbWaterlevelsVisibleToggled(self):
visible = self.ui.cbWaterlevelsVisible.isChecked() visible = self.ui.cbWaterlevelsVisible.isChecked()
print("cbWaterlevelsVisibleToggled: %s" % (visible,)) print("cbWaterlevelsVisibleToggled: %s" % (visible,))
if self.layer_waterlevels is None: if self.waterlevels is None:
self.loadWaterlevels() self.loadWaterlevels()
if self.layer_waterlevels is not None: if self.waterlevels is not None:
self.layer_waterlevels.setLabelsEnabled(visible) self.waterlevels.setLabelsEnabled(visible)
self._layerSetVisible(self.layer_waterlevels, visible) self._layerSetVisible(self.waterlevels, visible)
self._layerRefresh(self.layer_waterlevels) self._layerRefresh(self.waterlevels)
def cbWaterlevelsLabelsVisibleToggled(self): def cbWaterlevelsNameToggled(self):
print("cbWaterlevelsLabelsVisibleToggled: %s" % (self.ui.cbWaterlevelsVisible.isChecked(),)) checked = self.ui.cbWaterlevelsName.isChecked()
print("cbWaterlevelsNameToggled: %s" % (checked,))
# TODO # TODO
def rbValueChanged(self, button): def cbWaterlevelsTimestampToggled(self):
print("rbValueChanged") checked = self.ui.cbWaterlevelsTimestamp.isChecked()
if self.layer_waterlevels is None: print("cbWaterlevelsTimestampToggled: %s" % (checked,))
self.loadWaterlevels() # TODO
if button.objectName() == "rbShowTrend": def cbWaterlevelsValueToggled(self):
self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_trend.qml")) checked = self.ui.cbWaterlevelsValue.isChecked()
elif button.objectName() == "rbShowAbsValues": print("cbWaterlevelsValueToggled: %s" % (checked,))
self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_absvalue.qml")) # TODO
self.cbWaterlevelsVisibleToggled() def cbWaterlevelsMeanToggled(self):
checked = self.ui.cbWaterlevelsMean.isChecked()
print("cbWaterlevelsMeanToggled: %s" % (checked,))
# TODO
def disconnectStations(self): def cbWaterlevelsAbsoluteToggled(self):
print("disconnectStations") checked = self.ui.cbWaterlevelsAbsolute.isChecked()
self.layer_stations = None print("cbWaterlevelsAbsoluteToggled: %s" % (checked,))
self.ui.cbStationsVisible.setChecked(False) # TODO
def disconnectWaterlevels(self): def disconnectWaterlevels(self):
print("disconnectWaterlevels") print("disconnectWaterlevels")
self.layer_waterlevels = None self.waterlevels = None
self.ui.cbWaterlevelsVisible.setChecked(False) self.ui.cbWaterlevelsVisible.setChecked(False)
def disconnectBasemapLines(self): # def rbValueChanged(self, button):
print("disconnectBasemapLines") # print("rbValueChanged")
self.basemap_lines = None # if self.layer_waterlevels is None:
self.ui.cbBasemapLinesVisible.setChecked(False) # self.loadWaterlevels()
#
def disconnectBasemapAreas(self): # if button.objectName() == "rbShowTrend":
print("disconnectBasemapAreas") # self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_trend.qml"))
self.basemap_areas = None # elif button.objectName() == "rbShowAbsValues":
self.ui.cbBasemapAreasVisible.setChecked(False) # self.layer_waterlevels.loadNamedStyle(os.path.join(self.local_dir, "styles/label_currentw_absvalue.qml"))
#
# self.cbWaterlevelsVisibleToggled()