diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py
index 1b62bd6..f7fccce 100644
--- a/src/ui/MainWindow.py
+++ b/src/ui/MainWindow.py
@@ -12,6 +12,8 @@ from PySide6.QtPdf import QPdfDocument
from ui.MainWinddow_ui import Ui_MainWindow
from ui.AppSettings import AppSettingsDlg
from ui.PdfProject import PdfProjectDlg
+from ui.TreeNodeEditDialog import TreeNodeEditDialog
+from ui.XslFileEditDialog import XslFileEditDialog
from conf import app_settings, Project, ProjectData, TreeNode, XslFile, XmlFile
from pathlib import Path
@@ -1040,9 +1042,49 @@ class MainWindow(QMainWindow):
# TODO: Dialog zum Auswählen der XSL-Datei öffnen
def _edit_tree_node(self, item):
- """Bearbeitet einen TreeNode."""
+ """
+ Bearbeitet einen TreeNode.
+
+ Args:
+ item: Das TreeWidgetItem des TreeNode
+ """
print(f"TreeNode bearbeiten: {item.text(0)}")
- # TODO: Dialog zum Bearbeiten der Node-Daten öffnen
+
+ try:
+ # Hole das Node-Objekt aus dem TreeWidgetItem
+ node = item.data(0, Qt.ItemDataRole.UserRole)
+ if not node or not isinstance(node, TreeNode):
+ QMessageBox.warning(self, "Warnung", "Kein gültiger TreeNode gefunden.")
+ return
+
+ # Sammle Eltern-Parameter
+ parent_params = self._collect_parent_params(item)
+
+ # Erstelle und zeige den Dialog
+ dialog = TreeNodeEditDialog(self, node, parent_params)
+ if dialog.exec() == TreeNodeEditDialog.DialogCode.Accepted:
+ # Hole die bearbeiteten Daten
+ data = dialog.get_data()
+ if data:
+ # Aktualisiere den Node
+ node.bez = data['bez']
+ node.xslt_params = data['xslt_params']
+
+ print(f"TreeNode '{node.bez}' wurde aktualisiert")
+ print(f"XSLT-Parameter: {node.xslt_params}")
+
+ # Speichere die Änderungen
+ self._save_project_settings()
+
+ # Aktualisiere das TreeWidget
+ self._load_nodes_to_tree()
+
+ QMessageBox.information(self, "Erfolg", "TreeNode wurde erfolgreich aktualisiert.")
+
+ except Exception as e:
+ error_msg = f"Fehler beim Bearbeiten des TreeNode: {str(e)}"
+ print(error_msg)
+ QMessageBox.critical(self, "Fehler", error_msg)
def _delete_tree_node(self, item):
"""Löscht einen TreeNode."""
@@ -1161,9 +1203,49 @@ class MainWindow(QMainWindow):
QMessageBox.critical(self, "Fehler", error_msg)
def _edit_xsl_file(self, item):
- """Bearbeitet eine XSL-Datei."""
+ """
+ Bearbeitet eine XSL-Datei.
+
+ Args:
+ item: Das TreeWidgetItem des XslFile
+ """
print(f"XslFile bearbeiten: {item.text(0)}")
- # TODO: Dialog zum Bearbeiten der XSL-Datei öffnen
+
+ try:
+ # Hole das Node-Objekt aus dem TreeWidgetItem
+ node = item.data(0, Qt.ItemDataRole.UserRole)
+ if not node or not isinstance(node, XslFile):
+ QMessageBox.warning(self, "Warnung", "Keine gültige XSL-Datei gefunden.")
+ return
+
+ # Sammle Eltern-Parameter
+ parent_params = self._collect_parent_params(item)
+
+ # Erstelle und zeige den Dialog
+ dialog = XslFileEditDialog(self, node, parent_params)
+ if dialog.exec() == XslFileEditDialog.DialogCode.Accepted:
+ # Hole die bearbeiteten Daten
+ data = dialog.get_data()
+ if data:
+ # Aktualisiere den Node
+ node.bez = data['bez']
+ node.xslt_params = data['xslt_params']
+
+ print(f"XslFile '{node.bez}' wurde aktualisiert")
+ print(f"XSLT-Parameter: {node.xslt_params}")
+
+ # Speichere die Änderungen
+ self._save_project_settings()
+
+ # Aktualisiere das TreeWidget
+ self._load_nodes_to_tree()
+
+ QMessageBox.information(self, "Erfolg", "XSL-Datei wurde erfolgreich aktualisiert.")
+
+ except Exception as e:
+ error_msg = f"Fehler beim Bearbeiten der XSL-Datei: {str(e)}"
+ print(error_msg)
+ QMessageBox.critical(self, "Fehler", error_msg)
def _delete_xsl_file(self, item):
"""Löscht eine XSL-Datei."""
@@ -1432,6 +1514,43 @@ class MainWindow(QMainWindow):
existing_node.children.append(new_child)
print(f"Neues Kind hinzugefügt zu Node {existing_node.id}: {new_child.bez}")
+ def _collect_parent_params(self, item):
+ """
+ Sammelt die XSLT-Parameter aller Eltern-Nodes.
+
+ Args:
+ item: Das TreeWidgetItem
+
+ Returns:
+ dict: Dictionary mit allen Eltern-Parametern
+ """
+ parent_params = {}
+
+ try:
+ # Gehe die Hierarchie nach oben durch
+ current_item = item.parent()
+
+ while current_item:
+ # Hole das Node-Objekt
+ parent_node = current_item.data(0, Qt.ItemDataRole.UserRole)
+
+ if parent_node and hasattr(parent_node, 'xslt_params') and parent_node.xslt_params:
+ # Füge die Parameter des Eltern-Nodes hinzu
+ # Eltern-Parameter haben niedrigere Priorität (werden überschrieben)
+ for key, value in parent_node.xslt_params.items():
+ if key not in parent_params: # Nur hinzufügen wenn noch nicht vorhanden
+ parent_params[key] = value
+
+ # Gehe zum nächsten Eltern-Element
+ current_item = current_item.parent()
+
+ print(f"Gesammelte Eltern-Parameter: {parent_params}")
+ return parent_params
+
+ except Exception as e:
+ print(f"Fehler beim Sammeln der Eltern-Parameter: {e}")
+ return {}
+
def _save_project_settings(self):
"""
Speichert die aktualisierten Projekt-Einstellungen.
diff --git a/src/ui/TreeNodeEditDialog.py b/src/ui/TreeNodeEditDialog.py
new file mode 100644
index 0000000..fd883e1
--- /dev/null
+++ b/src/ui/TreeNodeEditDialog.py
@@ -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()
diff --git a/src/ui/TreeNodeEditDialog.ui b/src/ui/TreeNodeEditDialog.ui
new file mode 100644
index 0000000..2f4b6dc
--- /dev/null
+++ b/src/ui/TreeNodeEditDialog.ui
@@ -0,0 +1,179 @@
+
+
+ TreeNodeEditDialog
+
+
+
+ 0
+ 0
+ 600
+ 400
+
+
+
+ TreeNode bearbeiten
+
+
+ true
+
+
+ -
+
+
+ QLayout::SizeConstraint::SetMaximumSize
+
+
-
+
+
+ Bezeichnung:
+
+
+
+ -
+
+
+
+
+ -
+
+
+ XSLT Parameter
+
+
+
-
+
+
+ 2
+
+
+ true
+
+
+
+ Parameter
+
+
+
+
+ Wert
+
+
+
+
+ -
+
+
-
+
+
+ Parameter hinzufügen
+
+
+
+ -
+
+
+ Parameter entfernen
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Eltern-Parameter (nur anzeigen)
+
+
+
-
+
+
+ 2
+
+
+ QAbstractItemView::EditTrigger::NoEditTriggers
+
+
+ true
+
+
+
+ Parameter
+
+
+
+
+ Wert
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
+
+
+ true
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ TreeNodeEditDialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ TreeNodeEditDialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/src/ui/TreeNodeEditDialog_ui.py b/src/ui/TreeNodeEditDialog_ui.py
new file mode 100644
index 0000000..2a47cf1
--- /dev/null
+++ b/src/ui/TreeNodeEditDialog_ui.py
@@ -0,0 +1,140 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'TreeNodeEditDialog.ui'
+##
+## Created by: Qt User Interface Compiler version 6.9.1
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QAbstractButton, QAbstractItemView, QApplication, QDialog,
+ QDialogButtonBox, QFormLayout, QGroupBox, QHBoxLayout,
+ QHeaderView, QLabel, QLayout, QLineEdit,
+ QPushButton, QSizePolicy, QSpacerItem, QTableWidget,
+ QTableWidgetItem, QVBoxLayout, QWidget)
+
+class Ui_TreeNodeEditDialog(object):
+ def setupUi(self, TreeNodeEditDialog):
+ if not TreeNodeEditDialog.objectName():
+ TreeNodeEditDialog.setObjectName(u"TreeNodeEditDialog")
+ TreeNodeEditDialog.resize(600, 400)
+ TreeNodeEditDialog.setModal(True)
+ self.verticalLayout = QVBoxLayout(TreeNodeEditDialog)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.formLayout = QFormLayout()
+ self.formLayout.setObjectName(u"formLayout")
+ self.formLayout.setSizeConstraint(QLayout.SizeConstraint.SetMaximumSize)
+ self.bezLabel = QLabel(TreeNodeEditDialog)
+ self.bezLabel.setObjectName(u"bezLabel")
+
+ self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.bezLabel)
+
+ self.bezEdit = QLineEdit(TreeNodeEditDialog)
+ self.bezEdit.setObjectName(u"bezEdit")
+
+ self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.bezEdit)
+
+
+ self.verticalLayout.addLayout(self.formLayout)
+
+ self.xsltParamsGroupBox = QGroupBox(TreeNodeEditDialog)
+ self.xsltParamsGroupBox.setObjectName(u"xsltParamsGroupBox")
+ self.xsltParamsLayout = QVBoxLayout(self.xsltParamsGroupBox)
+ self.xsltParamsLayout.setObjectName(u"xsltParamsLayout")
+ self.xsltParamsTable = QTableWidget(self.xsltParamsGroupBox)
+ if (self.xsltParamsTable.columnCount() < 2):
+ self.xsltParamsTable.setColumnCount(2)
+ __qtablewidgetitem = QTableWidgetItem()
+ self.xsltParamsTable.setHorizontalHeaderItem(0, __qtablewidgetitem)
+ __qtablewidgetitem1 = QTableWidgetItem()
+ self.xsltParamsTable.setHorizontalHeaderItem(1, __qtablewidgetitem1)
+ self.xsltParamsTable.setObjectName(u"xsltParamsTable")
+ self.xsltParamsTable.setColumnCount(2)
+ self.xsltParamsTable.horizontalHeader().setVisible(True)
+
+ self.xsltParamsLayout.addWidget(self.xsltParamsTable)
+
+ self.xsltParamsButtonLayout = QHBoxLayout()
+ self.xsltParamsButtonLayout.setObjectName(u"xsltParamsButtonLayout")
+ self.addParamButton = QPushButton(self.xsltParamsGroupBox)
+ self.addParamButton.setObjectName(u"addParamButton")
+
+ self.xsltParamsButtonLayout.addWidget(self.addParamButton)
+
+ self.removeParamButton = QPushButton(self.xsltParamsGroupBox)
+ self.removeParamButton.setObjectName(u"removeParamButton")
+
+ self.xsltParamsButtonLayout.addWidget(self.removeParamButton)
+
+ self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.xsltParamsButtonLayout.addItem(self.horizontalSpacer)
+
+
+ self.xsltParamsLayout.addLayout(self.xsltParamsButtonLayout)
+
+
+ self.verticalLayout.addWidget(self.xsltParamsGroupBox)
+
+ self.parentParamsGroupBox = QGroupBox(TreeNodeEditDialog)
+ self.parentParamsGroupBox.setObjectName(u"parentParamsGroupBox")
+ self.parentParamsLayout = QVBoxLayout(self.parentParamsGroupBox)
+ self.parentParamsLayout.setObjectName(u"parentParamsLayout")
+ self.parentParamsTable = QTableWidget(self.parentParamsGroupBox)
+ if (self.parentParamsTable.columnCount() < 2):
+ self.parentParamsTable.setColumnCount(2)
+ __qtablewidgetitem2 = QTableWidgetItem()
+ self.parentParamsTable.setHorizontalHeaderItem(0, __qtablewidgetitem2)
+ __qtablewidgetitem3 = QTableWidgetItem()
+ self.parentParamsTable.setHorizontalHeaderItem(1, __qtablewidgetitem3)
+ self.parentParamsTable.setObjectName(u"parentParamsTable")
+ self.parentParamsTable.setColumnCount(2)
+ self.parentParamsTable.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+ self.parentParamsTable.horizontalHeader().setVisible(True)
+
+ self.parentParamsLayout.addWidget(self.parentParamsTable)
+
+
+ self.verticalLayout.addWidget(self.parentParamsGroupBox)
+
+ self.buttonBox = QDialogButtonBox(TreeNodeEditDialog)
+ self.buttonBox.setObjectName(u"buttonBox")
+ self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
+ self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
+ self.buttonBox.setCenterButtons(True)
+
+ self.verticalLayout.addWidget(self.buttonBox)
+
+
+ self.retranslateUi(TreeNodeEditDialog)
+ self.buttonBox.accepted.connect(TreeNodeEditDialog.accept)
+ self.buttonBox.rejected.connect(TreeNodeEditDialog.reject)
+
+ QMetaObject.connectSlotsByName(TreeNodeEditDialog)
+ # setupUi
+
+ def retranslateUi(self, TreeNodeEditDialog):
+ TreeNodeEditDialog.setWindowTitle(QCoreApplication.translate("TreeNodeEditDialog", u"TreeNode bearbeiten", None))
+ self.bezLabel.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Bezeichnung:", None))
+ self.xsltParamsGroupBox.setTitle(QCoreApplication.translate("TreeNodeEditDialog", u"XSLT Parameter", None))
+ ___qtablewidgetitem = self.xsltParamsTable.horizontalHeaderItem(0)
+ ___qtablewidgetitem.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Parameter", None));
+ ___qtablewidgetitem1 = self.xsltParamsTable.horizontalHeaderItem(1)
+ ___qtablewidgetitem1.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Wert", None));
+ self.addParamButton.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Parameter hinzuf\u00fcgen", None))
+ self.removeParamButton.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Parameter entfernen", None))
+ self.parentParamsGroupBox.setTitle(QCoreApplication.translate("TreeNodeEditDialog", u"Eltern-Parameter (nur anzeigen)", None))
+ ___qtablewidgetitem2 = self.parentParamsTable.horizontalHeaderItem(0)
+ ___qtablewidgetitem2.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Parameter", None));
+ ___qtablewidgetitem3 = self.parentParamsTable.horizontalHeaderItem(1)
+ ___qtablewidgetitem3.setText(QCoreApplication.translate("TreeNodeEditDialog", u"Wert", None));
+ # retranslateUi
+
diff --git a/src/ui/XslFileEditDialog.py b/src/ui/XslFileEditDialog.py
new file mode 100644
index 0000000..99a72b0
--- /dev/null
+++ b/src/ui/XslFileEditDialog.py
@@ -0,0 +1,158 @@
+from PySide6.QtWidgets import QDialog, QTableWidgetItem, QMessageBox
+from PySide6.QtCore import Qt
+
+from ui.XslFileEditDialog_ui import Ui_XslFileEditDialog
+from conf import XslFile
+
+
+class XslFileEditDialog(QDialog):
+ """Dialog zur Bearbeitung von XslFile-Objekten."""
+
+ def __init__(self, parent=None, node=None, parent_params=None):
+ """
+ Initialisiert den Dialog.
+
+ Args:
+ parent: Übergeordnetes Widget
+ node: XslFile-Objekt zum Bearbeiten
+ parent_params: Dictionary mit Eltern-Parametern (nur anzeigen)
+ """
+ super().__init__(parent)
+
+ # UI einrichten
+ self.ui = Ui_XslFileEditDialog()
+ 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 XslFile 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()
diff --git a/src/ui/XslFileEditDialog.ui b/src/ui/XslFileEditDialog.ui
new file mode 100644
index 0000000..27ab48a
--- /dev/null
+++ b/src/ui/XslFileEditDialog.ui
@@ -0,0 +1,179 @@
+
+
+ XslFileEditDialog
+
+
+
+ 0
+ 0
+ 600
+ 400
+
+
+
+ XSL-Datei bearbeiten
+
+
+ true
+
+
+ -
+
+
+ QLayout::SizeConstraint::SetMaximumSize
+
+
-
+
+
+ Bezeichnung:
+
+
+
+ -
+
+
+
+
+ -
+
+
+ XSLT Parameter
+
+
+
-
+
+
+ 2
+
+
+ true
+
+
+
+ Parameter
+
+
+
+
+ Wert
+
+
+
+
+ -
+
+
-
+
+
+ Parameter hinzufügen
+
+
+
+ -
+
+
+ Parameter entfernen
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Eltern-Parameter (nur anzeigen)
+
+
+
-
+
+
+ 2
+
+
+ QAbstractItemView::EditTrigger::NoEditTriggers
+
+
+ true
+
+
+
+ Parameter
+
+
+
+
+ Wert
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
+
+
+ true
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ XslFileEditDialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ XslFileEditDialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/src/ui/XslFileEditDialog_ui.py b/src/ui/XslFileEditDialog_ui.py
new file mode 100644
index 0000000..91cdf6c
--- /dev/null
+++ b/src/ui/XslFileEditDialog_ui.py
@@ -0,0 +1,140 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'XslFileEditDialog.ui'
+##
+## Created by: Qt User Interface Compiler version 6.9.1
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QAbstractButton, QAbstractItemView, QApplication, QDialog,
+ QDialogButtonBox, QFormLayout, QGroupBox, QHBoxLayout,
+ QHeaderView, QLabel, QLayout, QLineEdit,
+ QPushButton, QSizePolicy, QSpacerItem, QTableWidget,
+ QTableWidgetItem, QVBoxLayout, QWidget)
+
+class Ui_XslFileEditDialog(object):
+ def setupUi(self, XslFileEditDialog):
+ if not XslFileEditDialog.objectName():
+ XslFileEditDialog.setObjectName(u"XslFileEditDialog")
+ XslFileEditDialog.resize(600, 400)
+ XslFileEditDialog.setModal(True)
+ self.verticalLayout = QVBoxLayout(XslFileEditDialog)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.formLayout = QFormLayout()
+ self.formLayout.setObjectName(u"formLayout")
+ self.formLayout.setSizeConstraint(QLayout.SizeConstraint.SetMaximumSize)
+ self.bezLabel = QLabel(XslFileEditDialog)
+ self.bezLabel.setObjectName(u"bezLabel")
+
+ self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.bezLabel)
+
+ self.bezEdit = QLineEdit(XslFileEditDialog)
+ self.bezEdit.setObjectName(u"bezEdit")
+
+ self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.bezEdit)
+
+
+ self.verticalLayout.addLayout(self.formLayout)
+
+ self.xsltParamsGroupBox = QGroupBox(XslFileEditDialog)
+ self.xsltParamsGroupBox.setObjectName(u"xsltParamsGroupBox")
+ self.xsltParamsLayout = QVBoxLayout(self.xsltParamsGroupBox)
+ self.xsltParamsLayout.setObjectName(u"xsltParamsLayout")
+ self.xsltParamsTable = QTableWidget(self.xsltParamsGroupBox)
+ if (self.xsltParamsTable.columnCount() < 2):
+ self.xsltParamsTable.setColumnCount(2)
+ __qtablewidgetitem = QTableWidgetItem()
+ self.xsltParamsTable.setHorizontalHeaderItem(0, __qtablewidgetitem)
+ __qtablewidgetitem1 = QTableWidgetItem()
+ self.xsltParamsTable.setHorizontalHeaderItem(1, __qtablewidgetitem1)
+ self.xsltParamsTable.setObjectName(u"xsltParamsTable")
+ self.xsltParamsTable.setColumnCount(2)
+ self.xsltParamsTable.horizontalHeader().setVisible(True)
+
+ self.xsltParamsLayout.addWidget(self.xsltParamsTable)
+
+ self.xsltParamsButtonLayout = QHBoxLayout()
+ self.xsltParamsButtonLayout.setObjectName(u"xsltParamsButtonLayout")
+ self.addParamButton = QPushButton(self.xsltParamsGroupBox)
+ self.addParamButton.setObjectName(u"addParamButton")
+
+ self.xsltParamsButtonLayout.addWidget(self.addParamButton)
+
+ self.removeParamButton = QPushButton(self.xsltParamsGroupBox)
+ self.removeParamButton.setObjectName(u"removeParamButton")
+
+ self.xsltParamsButtonLayout.addWidget(self.removeParamButton)
+
+ self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.xsltParamsButtonLayout.addItem(self.horizontalSpacer)
+
+
+ self.xsltParamsLayout.addLayout(self.xsltParamsButtonLayout)
+
+
+ self.verticalLayout.addWidget(self.xsltParamsGroupBox)
+
+ self.parentParamsGroupBox = QGroupBox(XslFileEditDialog)
+ self.parentParamsGroupBox.setObjectName(u"parentParamsGroupBox")
+ self.parentParamsLayout = QVBoxLayout(self.parentParamsGroupBox)
+ self.parentParamsLayout.setObjectName(u"parentParamsLayout")
+ self.parentParamsTable = QTableWidget(self.parentParamsGroupBox)
+ if (self.parentParamsTable.columnCount() < 2):
+ self.parentParamsTable.setColumnCount(2)
+ __qtablewidgetitem2 = QTableWidgetItem()
+ self.parentParamsTable.setHorizontalHeaderItem(0, __qtablewidgetitem2)
+ __qtablewidgetitem3 = QTableWidgetItem()
+ self.parentParamsTable.setHorizontalHeaderItem(1, __qtablewidgetitem3)
+ self.parentParamsTable.setObjectName(u"parentParamsTable")
+ self.parentParamsTable.setColumnCount(2)
+ self.parentParamsTable.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+ self.parentParamsTable.horizontalHeader().setVisible(True)
+
+ self.parentParamsLayout.addWidget(self.parentParamsTable)
+
+
+ self.verticalLayout.addWidget(self.parentParamsGroupBox)
+
+ self.buttonBox = QDialogButtonBox(XslFileEditDialog)
+ self.buttonBox.setObjectName(u"buttonBox")
+ self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
+ self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
+ self.buttonBox.setCenterButtons(True)
+
+ self.verticalLayout.addWidget(self.buttonBox)
+
+
+ self.retranslateUi(XslFileEditDialog)
+ self.buttonBox.accepted.connect(XslFileEditDialog.accept)
+ self.buttonBox.rejected.connect(XslFileEditDialog.reject)
+
+ QMetaObject.connectSlotsByName(XslFileEditDialog)
+ # setupUi
+
+ def retranslateUi(self, XslFileEditDialog):
+ XslFileEditDialog.setWindowTitle(QCoreApplication.translate("XslFileEditDialog", u"XSL-Datei bearbeiten", None))
+ self.bezLabel.setText(QCoreApplication.translate("XslFileEditDialog", u"Bezeichnung:", None))
+ self.xsltParamsGroupBox.setTitle(QCoreApplication.translate("XslFileEditDialog", u"XSLT Parameter", None))
+ ___qtablewidgetitem = self.xsltParamsTable.horizontalHeaderItem(0)
+ ___qtablewidgetitem.setText(QCoreApplication.translate("XslFileEditDialog", u"Parameter", None));
+ ___qtablewidgetitem1 = self.xsltParamsTable.horizontalHeaderItem(1)
+ ___qtablewidgetitem1.setText(QCoreApplication.translate("XslFileEditDialog", u"Wert", None));
+ self.addParamButton.setText(QCoreApplication.translate("XslFileEditDialog", u"Parameter hinzuf\u00fcgen", None))
+ self.removeParamButton.setText(QCoreApplication.translate("XslFileEditDialog", u"Parameter entfernen", None))
+ self.parentParamsGroupBox.setTitle(QCoreApplication.translate("XslFileEditDialog", u"Eltern-Parameter (nur anzeigen)", None))
+ ___qtablewidgetitem2 = self.parentParamsTable.horizontalHeaderItem(0)
+ ___qtablewidgetitem2.setText(QCoreApplication.translate("XslFileEditDialog", u"Parameter", None));
+ ___qtablewidgetitem3 = self.parentParamsTable.horizontalHeaderItem(1)
+ ___qtablewidgetitem3.setText(QCoreApplication.translate("XslFileEditDialog", u"Wert", None));
+ # retranslateUi
+