diff --git a/src/ui/mixins/tree_manager.py b/src/ui/mixins/tree_manager.py index 038fd76..758eacb 100644 --- a/src/ui/mixins/tree_manager.py +++ b/src/ui/mixins/tree_manager.py @@ -11,6 +11,7 @@ Dieses Mixin enthält alle Methoden für die Verwaltung des TreeWidgets im MainW import logging import shutil import time +from enum import Enum, auto from pathlib import Path from PySide6.QtCore import Qt @@ -31,6 +32,13 @@ from ui.TreeNodeEditDialog import TreeNodeEditDialog from ui.XslFileEditDialog import XslFileEditDialog +class ItemType(Enum): + TREE_NODE = auto() + XSL_FILE = auto() + XML_FILE = auto() + UNKNOWN = auto() + + logger = logging.getLogger(__name__) @@ -68,7 +76,7 @@ class TreeManagerMixin: if not item: # Kein Item gefunden - zeige Kontextmenü für Root-Elemente - node_type = "Unknown" + node_type = ItemType.UNKNOWN context_menu = self._create_context_menu_for_type(node_type, None) else: # Bestimme den Node-Typ basierend auf dem Item @@ -109,7 +117,7 @@ class TreeManagerMixin: node_type = self._get_node_type_from_item(item) logger.debug(f"Selektierter Node-Typ: {node_type}") - if node_type == "XmlFile": + if node_type == ItemType.XML_FILE: # Hole XmlFile-Objekt und XSL-ID aus UserRole xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole) xsl_id_str = item.data(1, Qt.ItemDataRole.UserRole) @@ -165,13 +173,13 @@ class TreeManagerMixin: # Child-Item - prüfe ob es ein XML-File ist text = item.text(0) if text.startswith("XML:"): - return "XmlFile" + return ItemType.XML_FILE else: # Könnte ein TreeNode-Child oder XslFile-Child sein # Prüfe den Parent-Typ parent_type = self._get_node_type_from_item(parent_item) - if parent_type == "XslFile": - return "XmlFile" + if parent_type == ItemType.XSL_FILE: + return ItemType.XML_FILE else: # Rekursiv bestimmen basierend auf gespeicherten Daten return self._determine_node_type_from_data(item) @@ -181,7 +189,7 @@ class TreeManagerMixin: except Exception as e: logger.error(f"Fehler beim Bestimmen des Node-Typs: {e}") - return "Unknown" + return ItemType.UNKNOWN def _determine_node_type_from_data(self, item): """ @@ -197,21 +205,21 @@ class TreeManagerMixin: # Hole das gespeicherte Node-Objekt direkt node = item.data(0, Qt.ItemDataRole.UserRole) if not node: - return "Unknown" + return ItemType.UNKNOWN # Bestimme den Typ direkt vom Node-Objekt if isinstance(node, TreeNode): - return "TreeNode" + return ItemType.TREE_NODE elif isinstance(node, XslFile): - return "XslFile" + return ItemType.XSL_FILE elif isinstance(node, XmlFile): - return "XmlFile" + return ItemType.XML_FILE - return "Unknown" + return ItemType.UNKNOWN except Exception as e: logger.error(f"Fehler beim Bestimmen des Node-Typs aus Daten: {e}") - return "Unknown" + return ItemType.UNKNOWN def _find_item_by_node(self, node_obj): """ @@ -284,7 +292,7 @@ class TreeManagerMixin: try: menu = QMenu(self) - if node_type == "TreeNode": + if node_type == ItemType.TREE_NODE: # Kontextmenü für TreeNode action_add_child = QAction("Unterknoten hinzufügen", self) action_add_child.setIcon(QIcon(QIcon.fromTheme("folder-new"))) @@ -338,7 +346,7 @@ class TreeManagerMixin: action_delete.triggered.connect(lambda: self._delete_tree_node(item)) menu.addAction(action_delete) - elif node_type == "XslFile": + elif node_type == ItemType.XSL_FILE: # Kontextmenü für XslFile action_add_xml = QAction("XML-Datei hinzufügen", self) action_add_xml.setIcon(QIcon(QIcon.fromTheme("document-new"))) @@ -387,7 +395,7 @@ class TreeManagerMixin: action_delete.triggered.connect(lambda: self._delete_xsl_file(item)) menu.addAction(action_delete) - elif node_type == "XmlFile": + elif node_type == ItemType.XML_FILE: # Kontextmenü für XmlFile # Transformations-Aktionen action_transform = QAction("Transformieren", self)