From 5ab86748331978bb9d253107203f9cac8d49e143 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Sun, 18 Jan 2026 13:48:20 +0100 Subject: [PATCH] =?UTF-8?q?Feature:=20Icons=20f=C3=BCr=20TreeNodes,=20XSL-?= =?UTF-8?q?Nodes=20und=20XML-Nodes=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fügt visuelle Icons für bessere Übersichtlichkeit im TreeWidget hinzu: - TreeNode: Ordner-Icon (folder-open mit Fallback) - XslFile: Script/Code-Icon (text-x-script) - XmlFile: XML-Dokument-Icon (text-xml) Icons verwenden QIcon.ThemeIcon für bessere Kompatibilität und System-Theme-Integration mit automatischen Fallbacks. --- src/ui/mixins/tree_manager.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ui/mixins/tree_manager.py b/src/ui/mixins/tree_manager.py index 8b10484..b283f15 100644 --- a/src/ui/mixins/tree_manager.py +++ b/src/ui/mixins/tree_manager.py @@ -545,6 +545,20 @@ class TreeManagerMixin: # Dies ermöglicht späteren Zugriff auf alle Node-Eigenschaften item.setData(0, Qt.ItemDataRole.UserRole, node) + # Setze Icon basierend auf Node-Typ + if isinstance(node, TreeNode): + # TreeNode: Ordner-Icon + folder_icon = QIcon.fromTheme(QIcon.ThemeIcon.FolderOpen) + if folder_icon.isNull(): + folder_icon = QIcon.fromTheme("folder") + item.setIcon(0, folder_icon) + elif isinstance(node, XslFile): + # XslFile: Code/Script-Icon für XSL-Dateien + xsl_icon = QIcon.fromTheme("text-x-script") + if xsl_icon.isNull(): + xsl_icon = QIcon.fromTheme("text-x-generic") + item.setIcon(0, xsl_icon) + # Setze zusätzliche Informationen in Spalte 1 if isinstance(node, TreeNode): # TreeNode: Zeige Anzahl der Knoten @@ -584,9 +598,7 @@ class TreeManagerMixin: from conf import app_settings # Hole XSL-Verzeichnis aus Projekt-Konfiguration - xsl_dir = next( - (xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None - ) + xsl_dir = next((xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None) if xsl_dir: # Konstruiere absoluten Pfad zur XSL-Datei @@ -613,6 +625,14 @@ class TreeManagerMixin: xsl_id_str = "_".join(str(x) for x in node.id) xml_item.setData(1, Qt.ItemDataRole.UserRole, xsl_id_str) + # Setze XML-Icon + xml_icon = QIcon.fromTheme("text-xml") + if xml_icon.isNull(): + xml_icon = QIcon.fromTheme("application-xml") + if xml_icon.isNull(): + xml_icon = QIcon.fromTheme(QIcon.ThemeIcon.TextXGeneric) + xml_item.setIcon(0, xml_icon) + # Prüfe ob XML-Datei existiert und deaktiviere Knoten falls nicht # Wenn XSL-Datei fehlt, deaktiviere auch alle untergeordneten XML-Knoten if xsl_file_missing: