Checkbox wird zentriert angezeigt
This commit is contained in:
@@ -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 PySide6.QtCore import Qt
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@@ -51,6 +51,74 @@ class XmlToXslAssignDialog(QDialog):
|
|||||||
# Header-Eigenschaften
|
# Header-Eigenschaften
|
||||||
self.ui.xslNodesTree.header().setStretchLastSection(False)
|
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):
|
def _load_data(self):
|
||||||
"""Lädt die Daten in den Dialog."""
|
"""Lädt die Daten in den Dialog."""
|
||||||
# XML-Datei-Label setzen
|
# XML-Datei-Label setzen
|
||||||
@@ -78,6 +146,9 @@ class XmlToXslAssignDialog(QDialog):
|
|||||||
# Baum expandieren
|
# Baum expandieren
|
||||||
self.ui.xslNodesTree.expandAll()
|
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):
|
def _create_tree_item_from_node(self, node):
|
||||||
"""
|
"""
|
||||||
Erstellt ein QTreeWidgetItem aus einem TreeNode oder XslFile.
|
Erstellt ein QTreeWidgetItem aus einem TreeNode oder XslFile.
|
||||||
@@ -115,16 +186,10 @@ class XmlToXslAssignDialog(QDialog):
|
|||||||
item.addChild(child_item)
|
item.addChild(child_item)
|
||||||
|
|
||||||
elif isinstance(node, XslFile):
|
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))
|
item.setText(1, str(node.xsl_file))
|
||||||
|
|
||||||
# Aktiviere Checkbox für dieses Item in Spalte 2
|
# Checkbox wird später in _add_checkboxes_to_tree() hinzugefügt
|
||||||
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
|
|
||||||
|
|
||||||
# Keine Knoten für XslFile hinzufügen (XML-Dateien werden ausgeschlossen)
|
# Keine Knoten für XslFile hinzufügen (XML-Dateien werden ausgeschlossen)
|
||||||
|
|
||||||
return item
|
return item
|
||||||
@@ -135,13 +200,13 @@ class XmlToXslAssignDialog(QDialog):
|
|||||||
|
|
||||||
def select_all(self):
|
def select_all(self):
|
||||||
"""Wählt alle XSL-Knoten aus."""
|
"""Wählt alle XSL-Knoten aus."""
|
||||||
for item in self.xsl_checkboxes.values():
|
for checkbox in self.xsl_checkboxes.values():
|
||||||
item.setCheckState(2, Qt.CheckState.Checked)
|
checkbox.setChecked(True)
|
||||||
|
|
||||||
def deselect_all(self):
|
def deselect_all(self):
|
||||||
"""Wählt alle XSL-Knoten ab."""
|
"""Wählt alle XSL-Knoten ab."""
|
||||||
for item in self.xsl_checkboxes.values():
|
for checkbox in self.xsl_checkboxes.values():
|
||||||
item.setCheckState(2, Qt.CheckState.Unchecked)
|
checkbox.setChecked(False)
|
||||||
|
|
||||||
def get_selected_xsl_nodes(self):
|
def get_selected_xsl_nodes(self):
|
||||||
"""
|
"""
|
||||||
@@ -153,9 +218,9 @@ class XmlToXslAssignDialog(QDialog):
|
|||||||
selected_nodes = []
|
selected_nodes = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Durchlaufe alle XSL-Items
|
# Durchlaufe alle XSL-Checkboxes
|
||||||
for node_id, item in self.xsl_checkboxes.items():
|
for node_id, checkbox in self.xsl_checkboxes.items():
|
||||||
if item.checkState(2) == Qt.CheckState.Checked:
|
if checkbox.isChecked():
|
||||||
# Finde den entsprechenden XSL-Knoten
|
# Finde den entsprechenden XSL-Knoten
|
||||||
xsl_node = self._find_xsl_node_by_id(node_id)
|
xsl_node = self._find_xsl_node_by_id(node_id)
|
||||||
if xsl_node:
|
if xsl_node:
|
||||||
|
|||||||
@@ -48,9 +48,6 @@
|
|||||||
<property name="columnCount">
|
<property name="columnCount">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="alternatingRowColors">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<attribute name="headerVisible">
|
<attribute name="headerVisible">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</attribute>
|
</attribute>
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ class Ui_XmlToXslAssignDialog(object):
|
|||||||
self.xslNodesTree.setObjectName(u"xslNodesTree")
|
self.xslNodesTree.setObjectName(u"xslNodesTree")
|
||||||
self.xslNodesTree.setHeaderHidden(False)
|
self.xslNodesTree.setHeaderHidden(False)
|
||||||
self.xslNodesTree.setColumnCount(3)
|
self.xslNodesTree.setColumnCount(3)
|
||||||
self.xslNodesTree.setAlternatingRowColors(True)
|
|
||||||
self.xslNodesTree.header().setVisible(True)
|
self.xslNodesTree.header().setVisible(True)
|
||||||
|
|
||||||
self.verticalLayout.addWidget(self.xslNodesTree)
|
self.verticalLayout.addWidget(self.xslNodesTree)
|
||||||
|
|||||||
Reference in New Issue
Block a user