# C:\PYTHON\MyICR_Suite\app\features\navigation\navigation_panel.py import logging from PyQt6.QtWidgets import QWidget, QVBoxLayout, QTreeWidget, QTreeWidgetItem, QTreeWidgetItemIterator from PyQt6.QtCore import pyqtSignal, Qt logger = logging.getLogger(__name__) class NavigationPanel(QWidget): """Pannello di navigazione laterale con una struttura ad albero (QTreeView).""" section_selected = pyqtSignal(str) def __init__(self, theme=None): super().__init__() self.theme = theme or {} self.main_layout = QVBoxLayout(self) self.main_layout.setContentsMargins(0, 0, 0, 0) self.main_layout.setSpacing(0) self.tree_widget = QTreeWidget() self.tree_widget.setHeaderHidden(True) self.tree_widget.itemClicked.connect(self._on_item_clicked) self.tree_widget.setStyleSheet(self._get_tree_style()) self.main_layout.addWidget(self.tree_widget) def populate_tree(self, structure: dict): self.tree_widget.clear() self._add_items(None, structure) self.tree_widget.expandAll() def _add_items(self, parent_item, children): for name, details in children.items(): current_item = QTreeWidgetItem(parent_item or self.tree_widget) current_item.setText(0, name) if 'id' in details: current_item.setData(0, Qt.ItemDataRole.UserRole, details['id']) else: current_item.setFlags(current_item.flags() & ~Qt.ItemFlag.ItemIsSelectable) if 'children' in details: self._add_items(current_item, details['children']) def set_active_section(self, section_id: str): iterator = QTreeWidgetItemIterator(self.tree_widget) while iterator.value(): item = iterator.value() item_id = item.data(0, Qt.ItemDataRole.UserRole) if item_id == section_id: self.tree_widget.setCurrentItem(item) break iterator += 1 def _on_item_clicked(self, item, column): section_id = item.data(0, Qt.ItemDataRole.UserRole) if section_id: logger.debug(f"Item di navigazione cliccato: {section_id}") self.section_selected.emit(section_id) def _get_tree_style(self) -> str: return """ QTreeView { border: none; background-color: transparent; font-size: 14px; } QTreeView::item { padding: 10px; } QTreeView::item:hover { background-color: #E1E1E1; } QTreeView::item:selected { background-color: #DEECF9; color: #005A9E; font-weight: 600; } """