71 lines
2.5 KiB
Python
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)
|