"""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_games import GamesTab from src.ui.tab_languages import LanguagesTab from src.ui.tab_prune import PruneTab from src.ui.tab_settings import SettingsTab class MainWindow(QMainWindow): """Main GOGUpdater window. The Games tab merges the former Library + Status 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.games_tab = GamesTab(self.api, self.config) self.languages_tab = LanguagesTab(self.config) self.settings_tab = SettingsTab(self.api, self.config) self.prune_tab = PruneTab(self.config) self.tabs.addTab(self.auth_tab, "Login") self.tabs.addTab(self.games_tab, "Games") self.tabs.addTab(self.languages_tab, "Languages") self.tabs.addTab(self.settings_tab, "Settings") self.tabs.addTab(self.prune_tab, "Pruning") 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) 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: 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 is meaningless in English-only mode. languages_index = self.tabs.indexOf(self.languages_tab) if logged_in and self.config.english_only: self.tabs.setTabEnabled(languages_index, False)