Compare commits

..

4 Commits

Author SHA1 Message Date
Jack.Le 7e76cffc88 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
2026-05-28 15:02:58 -07:00
Jack.Le f24dd89e8e Update dependencies and enhance CSV metadata handling
- Updated requirements.txt to specify minimum versions for PySide6, pyqtgraph, and numpy.
- Modified CSVFileMetadata class to include a new master_type attribute for improved metadata representation.
- Enhanced FileBrowser class to handle master_type in metadata saving and retrieval.
- Added a new method in FileBrowser for parsing CSV metadata, improving error handling and data extraction.
- Adjusted LocalSettingsModel to format code and change default reverseZWafer setting to False.
2026-05-05 10:00:00 -07:00
Jack.Le bbe7baea5b Refactor SelectFileDialog and SettingsTab for improved metadata handling and UI consistency
- Removed unused local_settings reference from qmldir.
- Enhanced SelectFileDialog to include a masterTypeFieldText property for better metadata representation.
- Updated normalizedRows to merge settingsModel.masters with sidecar data for dynamic UI updates.
- Adjusted column headers and removed the save button from the table model for a cleaner interface.
- Modified SettingsTab to streamline CSV file handling and ensure settings are saved upon updates.
2026-05-05 09:59:18 -07:00
Jack.Le b338eedb13 chore: remove trailing character from pyproject.toml 2026-04-27 14:38:21 -07:00
+2 -16
View File
@@ -18,11 +18,6 @@ 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
@@ -33,14 +28,14 @@ ColumnLayout {
Item { Item {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
visible: !root.statusActive visible: !root.waferDetected && !deviceController.operationInProgress
} }
// ===== 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.statusActive visible: root.waferDetected || deviceController.operationInProgress
spacing: Theme.rightPaneGap spacing: Theme.rightPaneGap
// --- Connection Status --- // --- Connection Status ---
@@ -222,14 +217,7 @@ 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
@@ -245,7 +233,6 @@ 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] || "—"
@@ -255,7 +242,6 @@ 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