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