Files
GOGUpdater/src/ui/main_window.py
T

72 lines
2.6 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_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)