"""StudioApp — bootstrap de la aplicación PySide6.""" from __future__ import annotations import sys from pathlib import Path from PySide6.QtCore import QSize, Qt from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication from vmssailor.shared.logging_setup import setup_logging from vmssailor.studio.theme import apply_theme from vmssailor.version import __version__ BRAND_ROOT = Path(__file__).resolve().parents[2] / "docs" / "brand" class StudioApp(QApplication): """Application class del Studio. Aplica tema y configuración global.""" def __init__(self, argv: list[str] | None = None) -> None: super().__init__(argv or sys.argv) self.setOrganizationName("Aerom") self.setApplicationName("VMS-Sailor Studio") self.setApplicationVersion(__version__) self.setApplicationDisplayName("VMS-Sailor Studio") # Hi-DPI scaling se maneja automáticamente en Qt6. # Solo seteamos política de redondeo amigable. self.setAttribute(Qt.AA_UseHighDpiPixmaps, True) # Logo del app icon_svg = BRAND_ROOT / "favicon.svg" if icon_svg.exists(): self.setWindowIcon(QIcon(str(icon_svg))) apply_theme(self) def run_studio(argv: list[str] | None = None) -> int: """Lanza la aplicación Studio y bloquea hasta que cierre. Devuelve el exit code de Qt. """ setup_logging() app = StudioApp(argv) # Import perezoso para evitar costos cuando solo se chequea --help. from vmssailor.studio.main_window import MainWindow window = MainWindow() window.resize(QSize(1440, 900)) window.show() return app.exec() if __name__ == "__main__": sys.exit(run_studio())