# C:\PYTHON\MyICR_Suite\app\features\navigation\__init__.py import logging import app from pathlib import Path from PyQt6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QFrame, QSizePolicy from PyQt6.QtCore import Qt, pyqtSignal from PyQt6.QtGui import QPixmap from .navigation_panel import NavigationPanel logger = logging.getLogger(__name__) class NavigationPage(QWidget): section_selected = pyqtSignal(str) def __init__(self, main_window): super().__init__() self.main_window = main_window self.theme = main_window.theme self.init_ui() logger.info("🧭 NavigationPage (layout a 2 colonne) creata.") def init_ui(self): page_layout = QHBoxLayout(self) page_layout.setContentsMargins(0, 0, 0, 0) page_layout.setSpacing(0) nav_container = QFrame() nav_width = self.theme.get('components', {}).get('nav_panel_width', 280) nav_container.setFixedWidth(nav_width) nav_container.setStyleSheet( f"background-color: {self.theme.get('background_panel', '#F3F2F1')};" f"border-right: 1px solid {self.theme.get('border_dark', '#D2D0CE')};" ) nav_layout = QVBoxLayout(nav_container) nav_layout.setContentsMargins(0, 0, 0, 0) self.navigation_panel = NavigationPanel(theme=self.theme) nav_structure = { "📊 Dashboards": { "children": { "Analisi Tipologie Emesso": {"id": "dash_tipologie"}, "Analisi Pivot Emesso": {"id": "dash_em_pivot"}, "Analisi Diritti": {"id": "dash_diritti"} } }, "🎬 Applicazioni": { "children": { "MediaTrack": {"id": "mediatrack"}, "Linker": {"id": "linker"} } } } self.navigation_panel.populate_tree(nav_structure) nav_layout.addWidget(self.navigation_panel) welcome_area = QWidget() welcome_layout = QVBoxLayout(welcome_area) welcome_content_widget = QWidget() welcome_content_widget.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) welcome_content_layout = QVBoxLayout(welcome_content_widget) welcome_content_layout.setAlignment(Qt.AlignmentFlag.AlignCenter) welcome_content_layout.setSpacing(20) try: base_path = Path(__file__).resolve().parent.parent.parent image_path = base_path / "assets" / "images" / "splash_background.png" if not image_path.exists(): raise FileNotFoundError("Immagine di benvenuto non trovata") image_label = QLabel(parent=welcome_content_widget) pixmap = QPixmap(str(image_path)) if pixmap.isNull(): raise ValueError("Immagine corrotta o non supportata") image_label.setPixmap(pixmap) image_label.setScaledContents(True) image_label.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) image_label.setMaximumSize(800, 450) welcome_text = QLabel( "

Benvenuto in MyICR Suite

" "

Seleziona una voce dal pannello di navigazione per iniziare.

", parent=welcome_content_widget ) welcome_text.setAlignment(Qt.AlignmentFlag.AlignCenter) welcome_content_layout.addWidget(image_label) welcome_content_layout.addWidget(welcome_text) except Exception as e: logger.warning(f"Impossibile caricare l'immagine di benvenuto ({e}). Mostro testo di fallback.") fallback_label = QLabel("

Benvenuto in MyICR Suite

Seleziona una voce dal pannello.

", alignment=Qt.AlignmentFlag.AlignCenter) welcome_content_layout.addWidget(fallback_label) welcome_layout.addStretch(1) welcome_layout.addWidget(welcome_content_widget) welcome_layout.addStretch(1) page_layout.addWidget(nav_container) page_layout.addWidget(welcome_area, 1) self.navigation_panel.section_selected.connect(self.section_selected.emit) def page_activated(self): logger.info("NavigationPage attivata.") pass def page_deactivated(self): logger.info("NavigationPage disattivata.") pass