diff --git a/src/ui/XmlToXslAssignDialog.py b/src/ui/XmlToXslAssignDialog.py
index 1f0b8a2..50c0560 100644
--- a/src/ui/XmlToXslAssignDialog.py
+++ b/src/ui/XmlToXslAssignDialog.py
@@ -1,4 +1,4 @@
-from PySide6.QtWidgets import QDialog, QTreeWidgetItem, QMessageBox
+from PySide6.QtWidgets import QDialog, QTreeWidgetItem, QCheckBox, QMessageBox, QWidget, QHBoxLayout
from PySide6.QtCore import Qt
from pathlib import Path
@@ -51,6 +51,74 @@ class XmlToXslAssignDialog(QDialog):
# Header-Eigenschaften
self.ui.xslNodesTree.header().setStretchLastSection(False)
+ def _create_centered_checkbox(self):
+ """
+ Erstellt eine zentrierte Checkbox in einem Widget.
+
+ Returns:
+ tuple: (widget, checkbox) - Das Container-Widget und die Checkbox
+ """
+ # Erstelle Container-Widget
+ widget = QWidget()
+
+ # Erstelle horizontales Layout
+ layout = QHBoxLayout(widget)
+ layout.setContentsMargins(0, 0, 0, 0)
+ layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
+
+ # Erstelle Checkbox
+ checkbox = QCheckBox()
+ checkbox.setChecked(False)
+
+ # Füge Checkbox zum Layout hinzu
+ layout.addWidget(checkbox)
+
+ return widget, checkbox
+
+ def _add_checkboxes_to_tree(self):
+ """
+ Fügt Checkboxen zu allen XSL-Knoten im Tree hinzu.
+ Diese Methode wird nach dem Hinzufügen aller Items aufgerufen.
+ """
+ try:
+ # Durchlaufe alle Items im Tree rekursiv
+ root = self.ui.xslNodesTree.invisibleRootItem()
+ self._add_checkboxes_recursive(root)
+
+ print(f"Checkboxen zu {len(self.xsl_checkboxes)} XSL-Knoten hinzugefügt")
+
+ except Exception as e:
+ print(f"Fehler beim Hinzufügen der Checkboxen: {e}")
+
+ def _add_checkboxes_recursive(self, parent_item):
+ """
+ Fügt rekursiv Checkboxen zu XSL-Knoten hinzu.
+
+ Args:
+ parent_item: Das Eltern-Item
+ """
+ for i in range(parent_item.childCount()):
+ item = parent_item.child(i)
+
+ # Hole das Node-Objekt
+ node = item.data(0, Qt.ItemDataRole.UserRole)
+
+ if isinstance(node, XslFile):
+ # Erstelle zentrierte Checkbox für XSL-Knoten
+ checkbox_widget, checkbox = self._create_centered_checkbox()
+
+ # Setze das Widget in Spalte 2
+ self.ui.xslNodesTree.setItemWidget(item, 2, checkbox_widget)
+
+ # Speichere Checkbox-Referenz
+ self.xsl_checkboxes[id(node)] = checkbox
+
+ print(f"Checkbox für XSL-Knoten '{node.bez}' hinzugefügt")
+
+ # Rekursiv für Kinder
+ if item.childCount() > 0:
+ self._add_checkboxes_recursive(item)
+
def _load_data(self):
"""Lädt die Daten in den Dialog."""
# XML-Datei-Label setzen
@@ -77,6 +145,9 @@ class XmlToXslAssignDialog(QDialog):
# Baum expandieren
self.ui.xslNodesTree.expandAll()
+
+ # Checkboxen nach dem Hinzufügen der Items erstellen
+ self._add_checkboxes_to_tree()
def _create_tree_item_from_node(self, node):
"""
@@ -115,16 +186,10 @@ class XmlToXslAssignDialog(QDialog):
item.addChild(child_item)
elif isinstance(node, XslFile):
- # XslFile: Zeige XSL-Datei-Pfad und füge Checkbox hinzu
+ # XslFile: Zeige XSL-Datei-Pfad
item.setText(1, str(node.xsl_file))
- # Aktiviere Checkbox für dieses Item in Spalte 2
- item.setFlags(item.flags() | Qt.ItemFlag.ItemIsUserCheckable)
- item.setCheckState(2, Qt.CheckState.Unchecked)
-
- # Speichere Item-Referenz für XSL-Knoten
- self.xsl_checkboxes[id(node)] = item
-
+ # Checkbox wird später in _add_checkboxes_to_tree() hinzugefügt
# Keine Knoten für XslFile hinzufügen (XML-Dateien werden ausgeschlossen)
return item
@@ -135,13 +200,13 @@ class XmlToXslAssignDialog(QDialog):
def select_all(self):
"""Wählt alle XSL-Knoten aus."""
- for item in self.xsl_checkboxes.values():
- item.setCheckState(2, Qt.CheckState.Checked)
+ for checkbox in self.xsl_checkboxes.values():
+ checkbox.setChecked(True)
def deselect_all(self):
"""Wählt alle XSL-Knoten ab."""
- for item in self.xsl_checkboxes.values():
- item.setCheckState(2, Qt.CheckState.Unchecked)
+ for checkbox in self.xsl_checkboxes.values():
+ checkbox.setChecked(False)
def get_selected_xsl_nodes(self):
"""
@@ -153,9 +218,9 @@ class XmlToXslAssignDialog(QDialog):
selected_nodes = []
try:
- # Durchlaufe alle XSL-Items
- for node_id, item in self.xsl_checkboxes.items():
- if item.checkState(2) == Qt.CheckState.Checked:
+ # Durchlaufe alle XSL-Checkboxes
+ for node_id, checkbox in self.xsl_checkboxes.items():
+ if checkbox.isChecked():
# Finde den entsprechenden XSL-Knoten
xsl_node = self._find_xsl_node_by_id(node_id)
if xsl_node:
diff --git a/src/ui/XmlToXslAssignDialog.ui b/src/ui/XmlToXslAssignDialog.ui
index ec1b7d7..6fa1660 100644
--- a/src/ui/XmlToXslAssignDialog.ui
+++ b/src/ui/XmlToXslAssignDialog.ui
@@ -48,9 +48,6 @@
3
-
- true
-
true
diff --git a/src/ui/XmlToXslAssignDialog_ui.py b/src/ui/XmlToXslAssignDialog_ui.py
index feaa4ff..504b1fc 100644
--- a/src/ui/XmlToXslAssignDialog_ui.py
+++ b/src/ui/XmlToXslAssignDialog_ui.py
@@ -44,7 +44,6 @@ class Ui_XmlToXslAssignDialog(object):
self.xslNodesTree.setObjectName(u"xslNodesTree")
self.xslNodesTree.setHeaderHidden(False)
self.xslNodesTree.setColumnCount(3)
- self.xslNodesTree.setAlternatingRowColors(True)
self.xslNodesTree.header().setVisible(True)
self.verticalLayout.addWidget(self.xslNodesTree)