from PyQt6.QtWidgets import QWidget, QVBoxLayout, QComboBox, QLabel, QHBoxLayout from PyQt6.QtCore import Qt from app.core.main_manager import MainManager, NotificationType from typing import Optional class SettingsWindow(QWidget): def __init__(self, parent: Optional[QWidget] = None) -> None: super().__init__(parent) self.main_manager: MainManager = MainManager.get_instance() self.language_manager = self.main_manager.get_language_manager() self.settings_manager = self.main_manager.get_settings_manager() self.theme_manager = self.main_manager.get_theme_manager() self.observer_manager = self.main_manager.get_observer_manager() self.observer_manager.subscribe(NotificationType.LANGUAGE, self.update_language) # Type hints for UI elements self.language_layout: QHBoxLayout self.language_label: QLabel self.language_combo: QComboBox self.theme_layout: QHBoxLayout self.theme_label: QLabel self.theme_combo: QComboBox self.setup_ui() def setup_ui(self) -> None: layout: QVBoxLayout = QVBoxLayout(self) layout.setAlignment(Qt.AlignmentFlag.AlignTop) layout.setSpacing(20) layout.setContentsMargins(20, 20, 20, 20) layout.addStretch() self.language_layout = QHBoxLayout() # Paramètres de langue self.language_label = QLabel(self.language_manager.get_text("language"),self) self.language_label.setFixedWidth(120) # Largeur fixe pour l'alignement self.language_layout.addWidget(self.language_label) self.language_combo = self.createLanguageSelector() self.language_layout.addWidget(self.language_combo) layout.addLayout(self.language_layout) layout.addStretch() # Paramètres de thème self.theme_layout = QHBoxLayout() self.theme_label = QLabel(self.language_manager.get_text("theme"), self) self.theme_label.setFixedWidth(120) # Même largeur fixe pour l'alignement self.theme_layout.addWidget(self.theme_label) self.theme_combo = self.createThemeSelector() self.theme_layout.addWidget(self.theme_combo) layout.addLayout(self.theme_layout) layout.addStretch() def createLanguageSelector(self) -> QComboBox: combo: QComboBox = QComboBox() # Ajouter toutes les langues disponibles for lang_code, lang_data in self.language_manager.translations.items(): combo.addItem(lang_data["lang_name"], lang_code) # Sélectionner la langue actuelle current_index = combo.findData(self.settings_manager.get_language()) combo.setCurrentIndex(current_index) combo.currentIndexChanged.connect(self.change_language) return combo def createThemeSelector(self) -> QComboBox: combo: QComboBox = QComboBox() # Ajouter toutes les options de thème disponibles for theme in self.theme_manager.get_themes(): combo.addItem(self.language_manager.get_text(theme.name+"_theme"), theme.name) # Sélectionner le thème actuel current_index = combo.findData(self.settings_manager.get_theme()) combo.setCurrentIndex(current_index) combo.currentIndexChanged.connect(self.change_theme) return combo def change_language(self, index: int) -> None: self.settings_manager.set_language(self.language_combo.itemData(index)) def change_theme(self, index: int) -> None: theme: str = self.theme_combo.itemData(index) self.settings_manager.set_theme(theme) def update_language(self) -> None: self.language_label.setText(self.language_manager.get_text("language")) self.theme_label.setText(self.language_manager.get_text("theme")) # Mettre à jour les textes dans la combo de thème for i in range(self.theme_combo.count()): self.theme_combo.setItemText(i, self.language_manager.get_text(self.theme_combo.itemData(i)+ "_theme"))