Compare commits

..

2 Commits

Author SHA1 Message Date
Jack.Le e306db6816 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
2026-05-28 15:49:07 -07:00
jack 6d33da2eab Merge pull request 'SettingTab' (#1) from SettingTab into main
Reviewed-on: #1
2026-04-27 21:28:54 +00:00
+16 -2
View File
@@ -18,6 +18,11 @@ ColumnLayout {
property alias waferCycles: waferCycles.text property alias waferCycles: waferCycles.text
property bool waferDetected: false property bool waferDetected: false
// Latches true once any operation starts (or a previous session is
// restored) and never resets, so the status panel stays visible even
// when a detect finds no wafer.
property bool statusActive: false
// Data summary after parse // Data summary after parse
property int dataRows: 0 property int dataRows: 0
property int dataCols: 0 property int dataCols: 0
@@ -28,14 +33,14 @@ ColumnLayout {
Item { Item {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
visible: !root.waferDetected && !deviceController.operationInProgress visible: !root.statusActive
} }
// ===== Results area (shown once detect/operation runs) ===== // ===== Results area (shown once detect/operation runs) =====
ColumnLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
visible: root.waferDetected || deviceController.operationInProgress visible: root.statusActive
spacing: Theme.rightPaneGap spacing: Theme.rightPaneGap
// --- Connection Status --- // --- Connection Status ---
@@ -217,7 +222,14 @@ ColumnLayout {
// --- Signal Handlers --- // --- Signal Handlers ---
Connections { Connections {
target: deviceController target: deviceController
// Any operation start (detect/read/erase/debug) latches the panel on.
function onPortsUpdated() {
if (deviceController.operationInProgress)
root.statusActive = true
}
function onDetectResult(result) { function onDetectResult(result) {
root.statusActive = true
if (result && result.familyCode) { if (result && result.familyCode) {
root.waferDetected = true root.waferDetected = true
waferInfoFamily.text = result.familyCode waferInfoFamily.text = result.familyCode
@@ -233,6 +245,7 @@ ColumnLayout {
// Show restored wafer info if available // Show restored wafer info if available
var info = deviceController.lastWaferInfo var info = deviceController.lastWaferInfo
if (info && info.length > 0) { if (info && info.length > 0) {
root.statusActive = true
root.waferDetected = true root.waferDetected = true
waferInfoFamily.text = info[0] || "—" waferInfoFamily.text = info[0] || "—"
waferSerial.text = info[1] || "—" waferSerial.text = info[1] || "—"
@@ -242,6 +255,7 @@ ColumnLayout {
} }
// Show data summary if data was previously parsed // Show data summary if data was previously parsed
if (deviceController.dataRowCount > 0) { if (deviceController.dataRowCount > 0) {
root.statusActive = true
root.dataParsed = true root.dataParsed = true
root.dataRows = deviceController.dataRowCount root.dataRows = deviceController.dataRowCount
root.dataCols = deviceController.dataColCount root.dataCols = deviceController.dataColCount