Nodes sollen bearbeitbar sein

This commit is contained in:
2025-08-12 20:56:26 +02:00
parent b69b8755a8
commit 21547003f9
7 changed files with 1077 additions and 4 deletions
+158
View File
@@ -0,0 +1,158 @@
from PySide6.QtWidgets import QDialog, QTableWidgetItem, QMessageBox
from PySide6.QtCore import Qt
from ui.TreeNodeEditDialog_ui import Ui_TreeNodeEditDialog
from conf import TreeNode
class TreeNodeEditDialog(QDialog):
"""Dialog zur Bearbeitung von TreeNode-Objekten."""
def __init__(self, parent=None, node=None, parent_params=None):
"""
Initialisiert den Dialog.
Args:
parent: Übergeordnetes Widget
node: TreeNode-Objekt zum Bearbeiten
parent_params: Dictionary mit Eltern-Parametern (nur anzeigen)
"""
super().__init__(parent)
# UI einrichten
self.ui = Ui_TreeNodeEditDialog()
self.ui.setupUi(self)
# Node-Objekt speichern
self.node = node
self.parent_params = parent_params or {}
# Signale verbinden
self.ui.addParamButton.clicked.connect(self.add_parameter)
self.ui.removeParamButton.clicked.connect(self.remove_parameter)
# Tabellen konfigurieren
self._setup_tables()
# Daten laden
if self.node:
self._load_data()
def _setup_tables(self):
"""Konfiguriert die Tabellen."""
# XSLT Parameter Tabelle
self.ui.xsltParamsTable.setColumnWidth(0, 200)
self.ui.xsltParamsTable.setColumnWidth(1, 300)
self.ui.xsltParamsTable.horizontalHeader().setStretchLastSection(True)
# Eltern-Parameter Tabelle
self.ui.parentParamsTable.setColumnWidth(0, 200)
self.ui.parentParamsTable.setColumnWidth(1, 300)
self.ui.parentParamsTable.horizontalHeader().setStretchLastSection(True)
def _load_data(self):
"""Lädt die Daten des TreeNode in den Dialog."""
if not self.node:
return
# Bezeichnung setzen
self.ui.bezEdit.setText(str(self.node.bez) if self.node.bez else "")
# XSLT Parameter laden
self._load_xslt_params()
# Eltern-Parameter laden
self._load_parent_params()
def _load_xslt_params(self):
"""Lädt die XSLT Parameter in die Tabelle."""
if not self.node or not self.node.xslt_params:
return
params = self.node.xslt_params
self.ui.xsltParamsTable.setRowCount(len(params))
for row, (key, value) in enumerate(params.items()):
# Parameter-Name
key_item = QTableWidgetItem(str(key))
self.ui.xsltParamsTable.setItem(row, 0, key_item)
# Parameter-Wert
value_item = QTableWidgetItem(str(value))
self.ui.xsltParamsTable.setItem(row, 1, value_item)
def _load_parent_params(self):
"""Lädt die Eltern-Parameter in die Tabelle (nur anzeigen)."""
if not self.parent_params:
return
self.ui.parentParamsTable.setRowCount(len(self.parent_params))
for row, (key, value) in enumerate(self.parent_params.items()):
# Parameter-Name
key_item = QTableWidgetItem(str(key))
key_item.setFlags(key_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
self.ui.parentParamsTable.setItem(row, 0, key_item)
# Parameter-Wert
value_item = QTableWidgetItem(str(value))
value_item.setFlags(value_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
self.ui.parentParamsTable.setItem(row, 1, value_item)
def add_parameter(self):
"""Fügt einen neuen Parameter hinzu."""
row_count = self.ui.xsltParamsTable.rowCount()
self.ui.xsltParamsTable.insertRow(row_count)
# Leere Items hinzufügen
key_item = QTableWidgetItem("")
value_item = QTableWidgetItem("")
self.ui.xsltParamsTable.setItem(row_count, 0, key_item)
self.ui.xsltParamsTable.setItem(row_count, 1, value_item)
# Fokus auf den neuen Parameter setzen
self.ui.xsltParamsTable.setCurrentCell(row_count, 0)
def remove_parameter(self):
"""Entfernt den ausgewählten Parameter."""
current_row = self.ui.xsltParamsTable.currentRow()
if current_row >= 0:
self.ui.xsltParamsTable.removeRow(current_row)
def get_data(self):
"""
Gibt die bearbeiteten Daten zurück.
Returns:
dict: Dictionary mit den bearbeiteten Daten oder None bei Fehler
"""
# Bezeichnung prüfen
bez = self.ui.bezEdit.text().strip()
if not bez:
QMessageBox.warning(self, "Warnung", "Bitte geben Sie eine Bezeichnung ein.")
return None
# XSLT Parameter sammeln
xslt_params = {}
for row in range(self.ui.xsltParamsTable.rowCount()):
key_item = self.ui.xsltParamsTable.item(row, 0)
value_item = self.ui.xsltParamsTable.item(row, 1)
if key_item and value_item:
key = key_item.text().strip()
value = value_item.text().strip()
if key: # Nur Parameter mit nicht-leerem Schlüssel hinzufügen
xslt_params[key] = value
return {
"bez": bez,
"xslt_params": xslt_params
}
def accept(self):
"""Überschreibt accept() um Datenvalidierung durchzuführen."""
data = self.get_data()
if data is not None:
super().accept()