Refactor: Stringly-typed Knotentypen durch ItemType-Enum ersetzt
ItemType(Enum) mit TREE_NODE, XSL_FILE, XML_FILE, UNKNOWN statt String-Konstanten in tree_manager.py. Verbessert Typsicherheit und IDE-Support. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user