Files
xsl-validator/src/ui/XsltParamsEditDialog.py
T

121 lines
4.5 KiB
Python
Raw Normal View History

from PySide6.QtWidgets import QDialog, QTableWidgetItem, QMessageBox
from PySide6.QtCore import Qt
class XsltParamsEditDialog(QDialog):
"""Gemeinsame Basisklasse für Dialoge zur Bearbeitung von XSLT-Parametern."""
def __init__(self, parent=None, node=None, parent_params=None):
super().__init__(parent)
self.ui = self._create_ui()
self.ui.setupUi(self)
self.node = node
self.parent_params = parent_params or {}
self.ui.addParamButton.clicked.connect(self.add_parameter)
self.ui.removeParamButton.clicked.connect(self.remove_parameter)
self._setup_tables()
if self.node:
self._load_data()
def _create_ui(self):
"""Gibt eine Instanz der konkreten UI-Klasse zurück. Muss überschrieben werden."""
raise NotImplementedError
def _setup_tables(self):
"""Konfiguriert die Tabellen."""
self.ui.xsltParamsTable.setColumnWidth(0, 200)
self.ui.xsltParamsTable.setColumnWidth(1, 300)
self.ui.xsltParamsTable.horizontalHeader().setStretchLastSection(True)
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 Knotens in den Dialog."""
if not self.node:
return
self.ui.bezEdit.setText(str(self.node.bez) if self.node.bez else "")
self._load_xslt_params()
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()):
self.ui.xsltParamsTable.setItem(row, 0, QTableWidgetItem(str(key)))
self.ui.xsltParamsTable.setItem(row, 1, QTableWidgetItem(str(value)))
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()):
key_item = QTableWidgetItem(str(key))
key_item.setFlags(key_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
self.ui.parentParamsTable.setItem(row, 0, key_item)
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)
self.ui.xsltParamsTable.setItem(row_count, 0, QTableWidgetItem(""))
self.ui.xsltParamsTable.setItem(row_count, 1, QTableWidgetItem(""))
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 mit 'bez', 'xslt_params', 'force_transform', oder None bei Validierungsfehler
"""
bez = self.ui.bezEdit.text().strip()
if not bez:
QMessageBox.warning(self, "Warnung", "Bitte geben Sie eine Bezeichnung ein.")
return None
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()
if key:
xslt_params[key] = value_item.text().strip()
return {
"bez": bez,
"xslt_params": xslt_params,
"force_transform": self.ui.alle_xml_transformieren.isChecked(),
}
def accept(self):
"""Überschreibt accept() um Datenvalidierung durchzuführen."""
if self.get_data() is not None:
super().accept()