Feature: Icons für TreeNodes, XSL-Nodes und XML-Nodes hinzufügen

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.
This commit is contained in:
2026-01-18 13:48:20 +01:00
parent f4d2d4b944
commit 5ab8674833
+23 -3
View File
@@ -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: