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
+12 -6
View File
@@ -23,8 +23,7 @@ Item {
}
function handleCsvSelected(filePath) {
console.log("Doing work with:", filePath);
// @todo: implement CSV metadata handling after file selection.
// Selection confirmed — metadata editing is handled inline inside SelectFileDialog.
}
// ===== Settings Data Helpers =====
@@ -136,7 +135,7 @@ Item {
title: "Choose Master CSV"
nameFilters: ["CSV files (*.csv)"]
property string targetFamily: ""
onAccepted: settingsModel.setMaster(targetFamily, selectedFile.toLocalFile())
onAccepted: settingsModel.setMaster(targetFamily, String(selectedFile).replace(/^file:\/\//, ""))
}
// ===== Settings Page Layout =====
@@ -206,7 +205,6 @@ Item {
Layout.minimumWidth: Theme.settingsFieldMinWidth
placeholderText: "Enter chamber ID"
text: settingsModel.chamberId
onEditingFinished: settingsModel.setChamberId(text)
Connections {
target: settingsModel
@@ -222,7 +220,10 @@ Item {
text: "Set"
Layout.preferredWidth: 90
Layout.preferredHeight: Theme.settingsButtonHeight
onClicked: settingsModel.setChamberId(chamberField.text)
onClicked: {
settingsModel.setChamberId(chamberField.text);
settingsModel.saveSettings();
}
}
}
}
@@ -389,6 +390,11 @@ Item {
Layout.fillWidth: true
}
}
// Bottom spacer so last group isn't flush with scroll edge
Item {
Layout.preferredHeight: Theme.settingsSectionSpacing
}
}
}
@@ -406,7 +412,7 @@ Item {
}
GradientStop {
position: 1.0
color: Qt.transparent
color: Qt.rgba(0, 0, 0, 0)
}
}