Files
GOGUpdater/src/ui/main_window.py
T

71 lines
2.5 KiB
Python

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