e306db6816
- SettingsTab: chamber ID, master CSV mapping (families A-Z), wafer behavior toggle, light/dark mode toggle, Edit CSV Metadata dialog - StatusTab: connection status card, wafer info, activity log (blank until Detect Wafer fires from the side rail) - DataTab: empty state, ready for parsed data - HomePage: side rail buttons dispatch device actions and jump to Status tab; selectedSideActionIndex defaults to -1 on startup - DeviceController registered as QML context property in main.py - LocalSettings: added status persistence fields - Theme: added subheadingColor and disabledText - Added serialcomm/ package and backend data/graph modules - gitignore: restore clean version
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import sys
|
|
from pathlib import Path
|
|
|
|
from PySide6.QtQml import QQmlApplicationEngine
|
|
from PySide6.QtQuickControls2 import QQuickStyle
|
|
from PySide6.QtWidgets import QApplication
|
|
|
|
from backend.device_controller import DeviceController
|
|
from backend.local_settings import LocalSettings
|
|
from backend.local_settings_model import LocalSettingsModel
|
|
from backend.file_browser import FileBrowser
|
|
|
|
# ===== Application Entry Point =====
|
|
if __name__ == "__main__":
|
|
# ===== UI Style Setup =====
|
|
# Use a non-native controls style so our custom QML button backgrounds are supported.
|
|
QQuickStyle.setStyle("Basic")
|
|
|
|
# ===== Qt Bootstrap =====
|
|
# Minimal Qt bootstrap: load the ISC QML module and exit if it fails.
|
|
app = QApplication(sys.argv)
|
|
engine = QQmlApplicationEngine()
|
|
|
|
# ===== Shared Models =====
|
|
settings_model = LocalSettingsModel()
|
|
select_file_dialog_model = FileBrowser()
|
|
settings_model.loadSettings()
|
|
engine.rootContext().setContextProperty("settingsModel", settings_model)
|
|
engine.rootContext().setContextProperty("file_browser", select_file_dialog_model)
|
|
|
|
# ===== Device Controller (serial comm) =====
|
|
data_dir = str(settings_model._data_dir)
|
|
raw_settings = LocalSettings.read_settings(data_dir)
|
|
device_controller = DeviceController(raw_settings, data_dir)
|
|
engine.rootContext().setContextProperty("deviceController", device_controller)
|
|
|
|
# ===== QML Startup =====
|
|
engine.addImportPath(Path(__file__).parent)
|
|
engine.loadFromModule("ISC", "Main")
|
|
|
|
# ===== Exit Handling =====
|
|
if not engine.rootObjects():
|
|
sys.exit(-1)
|
|
|
|
sys.exit(app.exec())
|