Clean push: Removed heavy files & added only latest snapshot
This commit is contained in:
203
qt_app_pyside1/finale/UI.py
Normal file
203
qt_app_pyside1/finale/UI.py
Normal file
@@ -0,0 +1,203 @@
|
||||
"""
|
||||
Finale UI - Main Entry Point
|
||||
Modern traffic monitoring interface entry point.
|
||||
"""
|
||||
|
||||
from PySide6.QtWidgets import QApplication
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtGui import QFont, QPalette, QColor
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Import finale components
|
||||
try:
|
||||
# Try relative imports first (when running as a package)
|
||||
from .main_window import FinaleMainWindow
|
||||
from .splash import FinaleSplashScreen
|
||||
from .styles import FinaleStyles, MaterialColors
|
||||
from .icons import FinaleIcons
|
||||
except ImportError:
|
||||
# Fallback to direct imports (when running as script)
|
||||
try:
|
||||
from main_window import FinaleMainWindow
|
||||
from splash import FinaleSplashScreen
|
||||
from styles import FinaleStyles, MaterialColors
|
||||
from icons import FinaleIcons
|
||||
except ImportError:
|
||||
print('Error importing main components')
|
||||
|
||||
# Add Qt message handler from original main.py
|
||||
def qt_message_handler(mode, context, message):
|
||||
print(f"Qt Message: {message} (Mode: {mode})")
|
||||
# Install custom handler for Qt messages
|
||||
from PySide6.QtCore import Qt
|
||||
if hasattr(Qt, 'qInstallMessageHandler'):
|
||||
Qt.qInstallMessageHandler(qt_message_handler)
|
||||
|
||||
class FinaleUI:
|
||||
"""
|
||||
Main Finale UI application class.
|
||||
Handles application initialization, theme setup, and window management.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.app = None
|
||||
self.main_window = None
|
||||
self.splash = None
|
||||
|
||||
def initialize_application(self, sys_argv=None):
|
||||
"""
|
||||
Initialize the QApplication with proper settings.
|
||||
|
||||
Args:
|
||||
sys_argv: System arguments (defaults to sys.argv)
|
||||
"""
|
||||
if sys_argv is None:
|
||||
sys_argv = sys.argv
|
||||
|
||||
# Create or get existing application instance
|
||||
self.app = QApplication.instance() or QApplication(sys_argv)
|
||||
|
||||
# Set application properties
|
||||
self.app.setApplicationName("Finale Traffic Monitoring")
|
||||
self.app.setApplicationVersion("1.0.0")
|
||||
self.app.setOrganizationName("Finale Systems")
|
||||
self.app.setOrganizationDomain("finale.traffic")
|
||||
|
||||
# Set application icon
|
||||
self.app.setWindowIcon(FinaleIcons.get_icon("traffic_monitoring"))
|
||||
|
||||
# Enable high DPI scaling
|
||||
self.app.setAttribute(Qt.AA_EnableHighDpiScaling, True)
|
||||
self.app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
|
||||
|
||||
# Set font
|
||||
self.setup_fonts()
|
||||
|
||||
# Set global theme
|
||||
self.setup_theme()
|
||||
|
||||
return self.app
|
||||
|
||||
def setup_fonts(self):
|
||||
"""Setup application fonts"""
|
||||
# Set default font
|
||||
font = QFont("Segoe UI", 9)
|
||||
font.setHintingPreference(QFont.PreferDefaultHinting)
|
||||
self.app.setFont(font)
|
||||
|
||||
def setup_theme(self):
|
||||
"""Setup global application theme"""
|
||||
# Apply dark theme by default
|
||||
MaterialColors.apply_dark_theme()
|
||||
|
||||
# Set global stylesheet
|
||||
self.app.setStyleSheet(FinaleStyles.get_global_style())
|
||||
|
||||
def show_splash_screen(self):
|
||||
"""Show splash screen during initialization"""
|
||||
try:
|
||||
self.splash = FinaleSplashScreen()
|
||||
self.splash.show()
|
||||
|
||||
# Process events to show splash
|
||||
self.app.processEvents()
|
||||
|
||||
return self.splash
|
||||
except Exception as e:
|
||||
print(f"Could not show splash screen: {e}")
|
||||
return None
|
||||
|
||||
def create_main_window(self):
|
||||
"""Create and initialize the main window"""
|
||||
try:
|
||||
self.main_window = FinaleMainWindow()
|
||||
return self.main_window
|
||||
except Exception as e:
|
||||
print(f"Error creating main window: {e}")
|
||||
raise
|
||||
|
||||
def run(self, show_splash=True):
|
||||
"""
|
||||
Run the complete Finale UI application.
|
||||
|
||||
Args:
|
||||
show_splash: Whether to show splash screen
|
||||
|
||||
Returns:
|
||||
Application exit code
|
||||
"""
|
||||
try:
|
||||
# Initialize application
|
||||
if not self.app:
|
||||
self.initialize_application()
|
||||
|
||||
# Show splash screen
|
||||
if show_splash:
|
||||
splash = self.show_splash_screen()
|
||||
if splash:
|
||||
splash.update_progress(20, "Initializing UI components...")
|
||||
self.app.processEvents()
|
||||
|
||||
# Create main window
|
||||
if splash:
|
||||
splash.update_progress(50, "Loading detection models...")
|
||||
self.app.processEvents()
|
||||
|
||||
self.main_window = self.create_main_window()
|
||||
|
||||
if splash:
|
||||
splash.update_progress(80, "Connecting to backend...")
|
||||
self.app.processEvents()
|
||||
|
||||
# Finish splash and show main window
|
||||
if splash:
|
||||
splash.update_progress(100, "Ready!")
|
||||
self.app.processEvents()
|
||||
splash.finish(self.main_window)
|
||||
|
||||
# Show main window
|
||||
self.main_window.show()
|
||||
|
||||
# Start event loop
|
||||
return self.app.exec()
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error running Finale UI: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return 1
|
||||
|
||||
def create_finale_app(sys_argv=None):
|
||||
"""
|
||||
Create and return a Finale UI application instance.
|
||||
|
||||
Args:
|
||||
sys_argv: System arguments
|
||||
|
||||
Returns:
|
||||
FinaleUI instance
|
||||
"""
|
||||
finale_ui = FinaleUI()
|
||||
finale_ui.initialize_application(sys_argv)
|
||||
return finale_ui
|
||||
|
||||
def run_finale_ui(sys_argv=None, show_splash=True):
|
||||
"""
|
||||
Convenience function to run the Finale UI.
|
||||
|
||||
Args:
|
||||
sys_argv: System arguments
|
||||
show_splash: Whether to show splash screen
|
||||
|
||||
Returns:
|
||||
Application exit code
|
||||
"""
|
||||
finale_ui = create_finale_app(sys_argv)
|
||||
return finale_ui.run(show_splash)
|
||||
|
||||
# Main execution
|
||||
if __name__ == "__main__":
|
||||
exit_code = run_finale_ui()
|
||||
sys.exit(exit_code)
|
||||
Reference in New Issue
Block a user