Merge branch 'bearbeiten_der_nodes'

This commit is contained in:
2025-08-12 21:15:14 +02:00
7 changed files with 1077 additions and 4 deletions
+123 -4
View File
@@ -12,6 +12,8 @@ from PySide6.QtPdf import QPdfDocument
from ui.MainWinddow_ui import Ui_MainWindow from ui.MainWinddow_ui import Ui_MainWindow
from ui.AppSettings import AppSettingsDlg from ui.AppSettings import AppSettingsDlg
from ui.PdfProject import PdfProjectDlg 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 conf import app_settings, Project, ProjectData, TreeNode, XslFile, XmlFile
from pathlib import Path from pathlib import Path
@@ -1040,9 +1042,49 @@ class MainWindow(QMainWindow):
# TODO: Dialog zum Auswählen der XSL-Datei öffnen # TODO: Dialog zum Auswählen der XSL-Datei öffnen
def _edit_tree_node(self, item): 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)}") 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): def _delete_tree_node(self, item):
"""Löscht einen TreeNode.""" """Löscht einen TreeNode."""
@@ -1161,9 +1203,49 @@ class MainWindow(QMainWindow):
QMessageBox.critical(self, "Fehler", error_msg) QMessageBox.critical(self, "Fehler", error_msg)
def _edit_xsl_file(self, item): 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)}") 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): def _delete_xsl_file(self, item):
"""Löscht eine XSL-Datei.""" """Löscht eine XSL-Datei."""
@@ -1432,6 +1514,43 @@ class MainWindow(QMainWindow):
existing_node.children.append(new_child) existing_node.children.append(new_child)
print(f"Neues Kind hinzugefügt zu Node {existing_node.id}: {new_child.bez}") 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): def _save_project_settings(self):
""" """
Speichert die aktualisierten Projekt-Einstellungen. Speichert die aktualisierten Projekt-Einstellungen.
+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()
+179
View File
@@ -0,0 +1,179 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TreeNodeEditDialog</class>
<widget class="QDialog" name="TreeNodeEditDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>TreeNode bearbeiten</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetMaximumSize</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="bezLabel">
<property name="text">
<string>Bezeichnung:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="bezEdit"/>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="xsltParamsGroupBox">
<property name="title">
<string>XSLT Parameter</string>
</property>
<layout class="QVBoxLayout" name="xsltParamsLayout">
<item>
<widget class="QTableWidget" name="xsltParamsTable">
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Wert</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="xsltParamsButtonLayout">
<item>
<widget class="QPushButton" name="addParamButton">
<property name="text">
<string>Parameter hinzufügen</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeParamButton">
<property name="text">
<string>Parameter entfernen</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="parentParamsGroupBox">
<property name="title">
<string>Eltern-Parameter (nur anzeigen)</string>
</property>
<layout class="QVBoxLayout" name="parentParamsLayout">
<item>
<widget class="QTableWidget" name="parentParamsTable">
<property name="columnCount">
<number>2</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Wert</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>TreeNodeEditDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>TreeNodeEditDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+140
View File
@@ -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
+158
View File
@@ -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()
+179
View File
@@ -0,0 +1,179 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>XslFileEditDialog</class>
<widget class="QDialog" name="XslFileEditDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>XSL-Datei bearbeiten</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetMaximumSize</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="bezLabel">
<property name="text">
<string>Bezeichnung:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="bezEdit"/>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="xsltParamsGroupBox">
<property name="title">
<string>XSLT Parameter</string>
</property>
<layout class="QVBoxLayout" name="xsltParamsLayout">
<item>
<widget class="QTableWidget" name="xsltParamsTable">
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Wert</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="xsltParamsButtonLayout">
<item>
<widget class="QPushButton" name="addParamButton">
<property name="text">
<string>Parameter hinzufügen</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeParamButton">
<property name="text">
<string>Parameter entfernen</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="parentParamsGroupBox">
<property name="title">
<string>Eltern-Parameter (nur anzeigen)</string>
</property>
<layout class="QVBoxLayout" name="parentParamsLayout">
<item>
<widget class="QTableWidget" name="parentParamsTable">
<property name="columnCount">
<number>2</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Wert</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>XslFileEditDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>XslFileEditDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+140
View File
@@ -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