121 lines
4.5 KiB
Python
121 lines
4.5 KiB
Python
|
|
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()
|