Landkreis-Dropdown, BROR-Mehrfachauswahl-Dialog und UX-Fixes
- Landkreis-Feld in den Projekteigenschaften als Dropdown statt Freitext, Landkreiskennzahl zusätzlich als eigene Projektvariable verfügbar. - ask_bror_kombination(en) auf echte Mehrfachauswahl umgestellt, inkl. Titel, Wappen-Icon, kompakter/anpassbarer Größe und Scrollbar-Fix. - Neuer Dialog ask_landkreis_objekte für die landkreisweite Objektsuche (Mehrfachauswahl, "Alle auswählen", "Nur laden ohne weiteren Ablauf"). - qt_wrapper um QDialog/QDialogButtonBox/QListWidget/QListWidgetItem/ QAbstractItemView/QIcon sowie QComboBox-userData/currentData erweitert.
This commit is contained in:
+42
-11
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
sn_basis/ui/tabs/settings_tab.py – Einstellungen-Tab für Projekteinformationen.
|
||||
sn_basis/ui/tabs/settings_tab.py – Einstellungen-Tab für Projektinformationen.
|
||||
Verwaltet benutzerspezifische und projektspezifische Einstellungen.
|
||||
"""
|
||||
|
||||
@@ -8,28 +8,33 @@ from sn_basis.functions.qt_wrapper import (
|
||||
QGridLayout,
|
||||
QLabel,
|
||||
QLineEdit,
|
||||
QComboBox,
|
||||
QGroupBox,
|
||||
QVBoxLayout,
|
||||
QPushButton,
|
||||
)
|
||||
from sn_basis.functions.settings_logic import SettingsLogic
|
||||
from sn_basis.functions.landkreise import LANDKREISE
|
||||
|
||||
#: Feldschlüssel, die als Landkreis-Dropdown (statt Freitext) dargestellt werden.
|
||||
_LANDKREIS_DROPDOWN_FELDER = {"landkreis_user"}
|
||||
|
||||
|
||||
class SettingsTab(QWidget):
|
||||
"""
|
||||
Tab-Widget für die Verwaltung von Projekt- und Benutzereinstellungen.
|
||||
|
||||
|
||||
Attributes:
|
||||
tab_title: Anzeigetitel des Tabs ("Projekteigenschaften")
|
||||
logic: SettingsLogic-Instanz für persistente Einstellungen
|
||||
"""
|
||||
|
||||
|
||||
tab_title = "Projekteigenschaften"
|
||||
|
||||
def __init__(self, parent=None):
|
||||
"""
|
||||
Initialisiert den Settings-Tab mit Eingabefeldern.
|
||||
|
||||
|
||||
Args:
|
||||
parent: Übergeordnetes Widget (Standard: None)
|
||||
"""
|
||||
@@ -64,7 +69,7 @@ class SettingsTab(QWidget):
|
||||
self.user_inputs = {}
|
||||
|
||||
for row, (key, label) in enumerate(self.user_fields.items()):
|
||||
input_widget = QLineEdit()
|
||||
input_widget = self._build_input(key)
|
||||
self.user_inputs[key] = input_widget
|
||||
|
||||
user_layout.addWidget(QLabel(label), row, 0)
|
||||
@@ -80,7 +85,7 @@ class SettingsTab(QWidget):
|
||||
self.project_inputs = {}
|
||||
|
||||
for row, (key, label) in enumerate(self.project_fields.items()):
|
||||
input_widget = QLineEdit()
|
||||
input_widget = self._build_input(key)
|
||||
self.project_inputs[key] = input_widget
|
||||
|
||||
project_layout.addWidget(QLabel(label), row, 0)
|
||||
@@ -107,14 +112,35 @@ class SettingsTab(QWidget):
|
||||
# Daten laden
|
||||
self.load_data()
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Eingabewidget je Feld erzeugen
|
||||
# ---------------------------------------------------------
|
||||
def _build_input(self, key: str):
|
||||
if key in _LANDKREIS_DROPDOWN_FELDER:
|
||||
combo = QComboBox()
|
||||
combo.addItem("", None) # Platzhalter: keine Vorbelegung bei leerem Projekt
|
||||
for kennzahl, name in LANDKREISE:
|
||||
combo.addItem(name, kennzahl)
|
||||
return combo
|
||||
return QLineEdit()
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Speichern
|
||||
# ---------------------------------------------------------
|
||||
def save_data(self):
|
||||
fields = {
|
||||
key: widget.text()
|
||||
for key, widget in {**self.user_inputs, **self.project_inputs}.items()
|
||||
}
|
||||
fields = {}
|
||||
for key, widget in {**self.user_inputs, **self.project_inputs}.items():
|
||||
if isinstance(widget, QComboBox):
|
||||
fields[key] = widget.currentText()
|
||||
else:
|
||||
fields[key] = widget.text()
|
||||
|
||||
# Landkreiskennzahl aus der Dropdown-Auswahl zusätzlich als eigene
|
||||
# Variable bereitstellen (siehe landkreise.py).
|
||||
landkreis_widget = self.user_inputs.get("landkreis_user")
|
||||
if isinstance(landkreis_widget, QComboBox):
|
||||
fields["landkreis_kennzahl"] = landkreis_widget.currentData() or ""
|
||||
|
||||
self.logic.save(fields)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
@@ -123,4 +149,9 @@ class SettingsTab(QWidget):
|
||||
def load_data(self):
|
||||
data = self.logic.load()
|
||||
for key, widget in {**self.user_inputs, **self.project_inputs}.items():
|
||||
widget.setText(data.get(key, ""))
|
||||
if isinstance(widget, QComboBox):
|
||||
gespeicherter_name = data.get(key, "")
|
||||
index = widget.findText(gespeicherter_name)
|
||||
widget.setCurrentIndex(index if index >= 0 else 0)
|
||||
else:
|
||||
widget.setText(data.get(key, ""))
|
||||
|
||||
Reference in New Issue
Block a user