Add SettingsTab, StatusTab, DataTab and wire up DeviceController

- 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
This commit is contained in:
Jack.Le
2026-05-28 15:37:12 -07:00
parent 6d33da2eab
commit e306db6816
25 changed files with 2457 additions and 106 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: