Edit-Dialoge: XSLT-Parameter nebeneinander + Force-Transformation

UI-Redesign für TreeNodeEditDialog und XslFileEditDialog:
- XSLT-Parameter-Tabellen werden jetzt nebeneinander angezeigt
- Eigene Parameter (editierbar) links, geerbte Parameter (read-only) rechts
- Bessere Übersicht durch direkten visuellen Vergleich
- Fensterbreite auf ~870px erhöht für optimale Darstellung
- Icons für Hinzufügen/Entfernen-Buttons hinzugefügt
- Kompakteres Layout durch reduzierte Margins

Neue Funktionalität: Force-Transformation nach Bearbeitung
- Neue CheckBox "Alle XML-Dateien neu transformieren (force)" in beiden Dialogen
- Beim Schließen mit OK werden alle untergeordneten XML-Dateien transformiert
- TreeNodeEditDialog: Transformiert rekursiv alle XML-Dateien unter dem Knoten
- XslFileEditDialog: Transformiert alle XML-Dateien der XSL-Datei
- Transformation erfolgt auch bei bereits aktuellem Output (force=True)

Implementierungsdetails:
- TreeNodeEditDialog.get_data() gibt jetzt force_transform zurück
- XslFileEditDialog.get_data() gibt jetzt force_transform zurück
- MainWindow._find_item_by_node() findet Item nach TreeWidget-Neuladen
- MainWindow._edit_tree_node() startet Force-Transformation bei Bedarf
- MainWindow._edit_xsl_file() startet Force-Transformation bei Bedarf

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-16 20:32:33 +01:00
parent 5b64cf5890
commit 091096270a
7 changed files with 715 additions and 436 deletions
+53
View File
@@ -887,6 +887,39 @@ class MainWindow(QMainWindow):
print(f"Fehler beim Bestimmen des Node-Typs aus Daten: {e}")
return "Unknown"
def _find_item_by_node(self, node_obj):
"""
Findet ein TreeWidgetItem basierend auf einem Node-Objekt.
Args:
node_obj: Das Node-Objekt (TreeNode, XslFile oder XmlFile)
Returns:
QTreeWidgetItem oder None wenn nicht gefunden
"""
def search_recursive(item):
"""Rekursive Suche durch TreeWidget."""
# Prüfe aktuelles Item
item_node = item.data(0, Qt.ItemDataRole.UserRole)
if item_node is node_obj:
return item
# Durchsuche Kinder
for i in range(item.childCount()):
child = item.child(i)
result = search_recursive(child)
if result:
return result
return None
# Durchsuche alle Root-Items
for i in range(self.ui.treeWidget.topLevelItemCount()):
root_item = self.ui.treeWidget.topLevelItem(i)
result = search_recursive(root_item)
if result:
return result
return None
def _find_node_by_id(self, nodes, target_id):
"""
Sucht rekursiv nach einem Node mit der angegebenen ID.
@@ -1650,6 +1683,16 @@ class MainWindow(QMainWindow):
# Aktualisiere das TreeWidget
self._load_nodes_to_tree()
# Wenn Force-Transformation gewünscht, führe sie aus
if data.get("force_transform", False):
# Finde das neue Item nach dem Neuladen
new_item = self._find_item_by_node(node)
if new_item:
logger.info(f"Starte Force-Transformation für TreeNode '{node.bez}'")
self._transform_tree_node(new_item, force=True)
else:
logger.warning(f"Konnte Item für TreeNode '{node.bez}' nicht finden")
# QMessageBox.information(self, "Erfolg", "TreeNode wurde erfolgreich aktualisiert.")
except Exception as e:
@@ -1811,6 +1854,16 @@ class MainWindow(QMainWindow):
# Aktualisiere das TreeWidget
self._load_nodes_to_tree()
# Wenn Force-Transformation gewünscht, führe sie aus
if data.get("force_transform", False):
# Finde das neue Item nach dem Neuladen
new_item = self._find_item_by_node(node)
if new_item:
logger.info(f"Starte Force-Transformation für XslFile '{node.bez}'")
self._transform_xsl_file(new_item, force=True)
else:
logger.warning(f"Konnte Item für XslFile '{node.bez}' nicht finden")
# QMessageBox.information(self, "Erfolg", "XSL-Datei wurde erfolgreich aktualisiert.")
except Exception as e: