"""Main application window with tab layout.""" from loguru import logger from PySide6.QtWidgets import QMainWindow, QTabWidget from src.api import GogApi from src.auth import AuthManager from src.config import AppConfig from src.constants import APP_TITLE from src.ui.tab_auth import AuthTab from src.ui.tab_languages import LanguagesTab from src.ui.tab_library import LibraryTab from src.ui.tab_settings import SettingsTab from src.ui.tab_status import StatusTab class MainWindow(QMainWindow): """Main GOGUpdater window with 5 tabs.""" def __init__(self, auth: AuthManager, api: GogApi, config: AppConfig) -> None: super().__init__() self.auth = auth self.api = api self.config = config self.setWindowTitle(APP_TITLE) self.setMinimumSize(900, 600) self._setup_tabs() self._connect_signals() def _setup_tabs(self) -> None: self.tabs = QTabWidget() self.setCentralWidget(self.tabs) self.auth_tab = AuthTab(self.auth) self.library_tab = LibraryTab(self.api, self.config) self.languages_tab = LanguagesTab(self.config) self.settings_tab = SettingsTab(self.api, self.config) self.status_tab = StatusTab(self.api, self.config) self.tabs.addTab(self.auth_tab, "Login") self.tabs.addTab(self.library_tab, "Library") self.tabs.addTab(self.languages_tab, "Languages") self.tabs.addTab(self.settings_tab, "Settings") self.tabs.addTab(self.status_tab, "Status") self._update_tab_states() def _connect_signals(self) -> None: self.auth_tab.login_state_changed.connect(self._on_login_changed) self.settings_tab.english_only_changed.connect(self._on_english_only_changed) self.library_tab.library_refreshed.connect(self.status_tab.check_updates_from_cache) def _on_login_changed(self, logged_in: bool) -> None: logger.info(f"Login state changed: logged_in={logged_in}") self._update_tab_states() def _on_english_only_changed(self, english_only: bool) -> None: """Enable/disable Languages tab based on english_only setting.""" logger.info(f"English only changed: {english_only}") self._update_tab_states() def _update_tab_states(self) -> None: """Enable/disable tabs based on login state and settings.""" logged_in = self.auth.is_logged_in for i in range(1, self.tabs.count()): self.tabs.setTabEnabled(i, logged_in) # Languages tab (index 2) disabled when english_only if logged_in and self.config.english_only: self.tabs.setTabEnabled(2, False)