diff --git a/gui/main_window_qt.py b/gui/main_window_qt.py index 998b52a..066fc65 100644 --- a/gui/main_window_qt.py +++ b/gui/main_window_qt.py @@ -71,10 +71,13 @@ class ModelLoaderThread(QThread): class MainWindow(QMainWindow): """Main application window using PySide6.""" - def __init__(self): + def __init__(self, splash_screen=None): """Initialize the main window.""" super().__init__() + # Store splash screen reference + self.splash_screen = splash_screen + # Application state self.is_transcribing = False self.config = Config() @@ -101,14 +104,32 @@ class MainWindow(QMainWindow): self.setWindowTitle("Local Transcription") self.resize(900, 700) + # Update splash + self._update_splash("Creating user interface...") + # Create UI self._create_widgets() + # Update splash + self._update_splash("Starting web server...") + + # Start web server if enabled + self._start_web_server_if_enabled() + + # Update splash + self._update_splash("Loading Whisper model...") + # Initialize components (in background) self._initialize_components() - # Start web server if enabled - self._start_web_server_if_enabled() + def _update_splash(self, message: str): + """Update splash screen message if it exists.""" + if self.splash_screen: + from PySide6.QtCore import Qt + from PySide6.QtGui import QColor + from PySide6.QtWidgets import QApplication + self.splash_screen.showMessage(message, Qt.AlignBottom | Qt.AlignCenter, QColor("#888888")) + QApplication.processEvents() def _create_widgets(self): """Create all UI widgets.""" diff --git a/main.py b/main.py index 49ce89b..f41f871 100644 --- a/main.py +++ b/main.py @@ -14,10 +14,53 @@ from pathlib import Path project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) -from PySide6.QtWidgets import QApplication +from PySide6.QtWidgets import QApplication, QSplashScreen +from PySide6.QtGui import QPixmap, QPainter, QColor, QFont +from PySide6.QtCore import Qt, QTimer from gui.main_window_qt import MainWindow +def create_splash_pixmap(message="Loading..."): + """Create a pixmap for the splash screen with a custom message.""" + pixmap = QPixmap(500, 300) + pixmap.fill(QColor("#2b2b2b")) + + # Draw on the pixmap + painter = QPainter(pixmap) + painter.setRenderHint(QPainter.Antialiasing) + + # Draw title + title_font = QFont("Arial", 28, QFont.Bold) + painter.setFont(title_font) + painter.setPen(QColor("#ffffff")) + painter.drawText(pixmap.rect(), Qt.AlignCenter, "Local Transcription") + + # Draw subtitle + subtitle_font = QFont("Arial", 12) + painter.setFont(subtitle_font) + painter.setPen(QColor("#888888")) + subtitle_rect = pixmap.rect().adjusted(0, 60, 0, 0) + painter.drawText(subtitle_rect, Qt.AlignCenter, message) + + # Draw version/status at bottom + status_font = QFont("Arial", 10) + painter.setFont(status_font) + painter.setPen(QColor("#666666")) + status_rect = pixmap.rect().adjusted(0, 0, 0, -20) + painter.drawText(status_rect, Qt.AlignHCenter | Qt.AlignBottom, "Please wait...") + + painter.end() + return pixmap + + +def create_splash_screen(): + """Create a splash screen for startup.""" + pixmap = create_splash_pixmap("Initializing...") + splash = QSplashScreen(pixmap) + splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.SplashScreen) + return splash + + def main(): """Main application entry point.""" try: @@ -31,8 +74,21 @@ def main(): app.setApplicationName("Local Transcription") app.setOrganizationName("LocalTranscription") - # Create and show main window - window = MainWindow() + # Create and show splash screen + splash = create_splash_screen() + splash.show() + app.processEvents() # Make sure splash is visible + + # Update splash with progress + splash.showMessage("Loading configuration...", Qt.AlignBottom | Qt.AlignCenter, QColor("#888888")) + app.processEvents() + + # Create main window (this takes time due to model loading) + # Pass splash to window so it can update the message + window = MainWindow(splash_screen=splash) + + # Close splash and show main window + splash.finish(window) window.show() # Run application