Add SettingsTab, StatusTab, DataTab and wire up DeviceController

- SettingsTab: chamber ID, master CSV mapping, wafer behavior toggle,
  light/dark mode toggle, Edit CSV Metadata dialog
- StatusTab: connection status, wafer info, activity log (blank until
  Detect Wafer fires)
- DataTab: empty state, ready for parsed data
- HomePage: side rail buttons dispatch device actions and jump to Status
  tab; selectedSideActionIndex defaults to -1 (nothing active 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: added build/, dist/, *.spec
This commit is contained in:
Jack.Le
2026-05-28 15:02:58 -07:00
parent f24dd89e8e
commit 7e76cffc88
19 changed files with 2302 additions and 5 deletions
+11
View File
@@ -7,6 +7,7 @@ from pathlib import Path
class LocalSettings:
# ===== Defaults =====
def __init__(self):
# Configuration settings
self.chamber_id = ""
self.reverse_z_wafer = False
self.master = {} # Dict[str, str]
@@ -18,6 +19,16 @@ class LocalSettings:
self.wafer_detect_timeout = 5000
self.split_threshold = 40.0
# Status persistence (operational state)
self.connection_status = "Disconnected"
self.selected_port = ""
self.last_wafer_info = {} # Dict[str, Any]
self.save_data_dir = ""
self.activity_log = [] # List[str]
self.data_row_count = 0
self.data_col_count = 0
self.last_csv_path = ""
# ===== File Path Helpers =====
@classmethod
def _settings_path(cls, directory: str) -> Path: