HoDA_Radio/app/ui/windows/settings_window.py
2025-09-26 17:51:43 +02:00

101 lines
4.0 KiB
Python

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"))