Diff-PDF-Anzahl in Spalte 3 für TreeNode und XslFile anzeigen

Zeigt die Anzahl der untergeordneten Diff-PDF-Dateien in der dritten Spalte
des TreeWidgets für TreeNode und XslFile Knoten (nicht für XML-Dateien).

Neue Funktionen:
- _count_diff_pdfs_under_node(): Zählt rekursiv existierende Diff-PDFs
- _update_diff_pdf_counts_recursive(): Aktualisiert Anzahl in Spalte 2
- _update_all_diff_pdf_counts(): Aktualisiert alle Knoten im TreeWidget

Automatische Aktualisierung:
- Nach jeder Transformation (_on_all_transformations_finished)
- Beim Laden eines Projekts (_load_nodes_to_tree)
- Initial beim Erstellen der Tree-Items

🤖 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-14 21:11:40 +01:00
parent b5e004ad8b
commit f5767da611
+83
View File
@@ -1226,6 +1226,9 @@ class MainWindow(QMainWindow):
print(f"{len(self.pdf_project.nodes)} Root-Nodes in TreeWidget geladen (alphabetisch sortiert)")
# Aktualisiere Diff-PDF-Anzahl nach dem Laden
self._update_all_diff_pdf_counts()
except Exception as e:
print(f"Fehler beim Laden der Nodes in TreeWidget: {e}")
@@ -1268,6 +1271,11 @@ class MainWindow(QMainWindow):
child_item = self._create_tree_item_from_node(child)
item.addChild(child_item)
# Setze Diff-PDF-Anzahl in Spalte 2 (wird später aktualisiert)
diff_count = self._count_diff_pdfs_under_node(node, item)
if diff_count > 0:
item.setText(2, str(diff_count))
elif isinstance(node, XslFile):
# XslFile: Zeige XSL-Datei-Pfad
item.setText(1, str(node.xsl_file))
@@ -1275,6 +1283,11 @@ class MainWindow(QMainWindow):
# Speichere zusätzlich die Node-ID in UserRole+1 für Kompatibilität
item.setData(0, Qt.ItemDataRole.UserRole + 1, node.id)
# Setze Diff-PDF-Anzahl in Spalte 2 (wird später aktualisiert)
diff_count = self._count_diff_pdfs_under_node(node, item)
if diff_count > 0:
item.setText(2, str(diff_count))
# Lade XML-Dateien als Knoten
if node.xmls:
for xml in node.xmls:
@@ -3093,6 +3106,73 @@ class MainWindow(QMainWindow):
logger.error(f"Fehler beim Transformieren der XSL-Datei: {e}")
QMessageBox.critical(self, "Fehler", f"Fehler beim Transformieren: {str(e)}")
def _count_diff_pdfs_under_node(self, node: TreeNode | XslFile, node_item: QTreeWidgetItem) -> int:
"""
Zählt die Anzahl der existierenden Diff-PDFs unter einem Knoten.
Args:
node: TreeNode oder XslFile Objekt
node_item: Das TreeWidgetItem des Knotens
Returns:
int: Anzahl der existierenden Diff-PDF-Dateien
"""
count = 0
if isinstance(node, XslFile):
# Für XslFile: Zähle Diff-PDFs für jede XML-Datei
if not self.project:
return 0
diff_dir = self.project.project_dir / "diff"
xsl_id_str = "_".join(str(x) for x in node.id) if node.id else ""
for xml_file_obj in node.xmls:
xml_stem = xml_file_obj.xml.stem
pdf_basename = f"{xml_stem}_xsl_{xsl_id_str}.pdf"
diff_pdf_path = diff_dir / pdf_basename
if diff_pdf_path.exists():
count += 1
elif isinstance(node, TreeNode):
# Für TreeNode: Rekursiv alle Kinder durchgehen
for i in range(node_item.childCount()):
child_item = node_item.child(i)
child_node = child_item.data(0, Qt.ItemDataRole.UserRole)
if isinstance(child_node, (XslFile, TreeNode)):
count += self._count_diff_pdfs_under_node(child_node, child_item)
return count
def _update_diff_pdf_counts_recursive(self, tree_item: QTreeWidgetItem):
"""
Aktualisiert rekursiv die Diff-PDF-Anzahl in Spalte 2 für alle TreeNode und XslFile Items.
Args:
tree_item: Das TreeWidgetItem (kann Root oder beliebiger Knoten sein)
"""
node = tree_item.data(0, Qt.ItemDataRole.UserRole)
# Aktualisiere nur für TreeNode und XslFile, nicht für XmlFile
if isinstance(node, (TreeNode, XslFile)):
count = self._count_diff_pdfs_under_node(node, tree_item)
tree_item.setText(2, str(count) if count > 0 else "")
# Rekursiv für alle Kinder
for i in range(tree_item.childCount()):
child_item = tree_item.child(i)
self._update_diff_pdf_counts_recursive(child_item)
def _update_all_diff_pdf_counts(self):
"""
Aktualisiert die Diff-PDF-Anzahl für alle Knoten im TreeWidget.
"""
root = self.ui.treeWidget.invisibleRootItem()
for i in range(root.childCount()):
self._update_diff_pdf_counts_recursive(root.child(i))
def _has_xml_files_recursive(self, node: TreeNode) -> bool:
"""
Prüft rekursiv, ob unter einem TreeNode mindestens eine XML-Datei vorhanden ist.
@@ -3456,6 +3536,9 @@ class MainWindow(QMainWindow):
"""
logger.info(f"Alle Transformationen abgeschlossen: {successful_count}/{total_count} erfolgreich")
# Aktualisiere Diff-PDF-Anzahl in allen Knoten
self._update_all_diff_pdf_counts()
if successful_count == total_count:
self.statusBar().showMessage(f"✓ Alle {total_count} Transformationen erfolgreich", 5000)
QMessageBox.information(