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
+123 -4
View File
@@ -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
@@ -1041,9 +1043,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."""
@@ -1168,9 +1210,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."""
@@ -1439,6 +1521,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.