feat: Add Wafer Map tab and associated components

- Introduced a new Wafer Map tab in the HomePage.qml, which loads WaferMapTab.qml when selected.
- Created WaferMapTab.qml to display wafer map with live data and controls.
- Added ReadoutPanel.qml for displaying sensor statistics and thresholds.
- Implemented SourcePanel.qml for file selection and filtering.
- Developed TransportBar.qml for playback controls.
- Added WaferMapView.qml to visualize wafer data with interactive features.
- Created ReplaceSensorDialog.qml for sensor value overrides.
- Updated Theme.qml for new color schemes and UI adjustments.
- Modified qmldir files to include new components in the ISC.Tabs and ISC.Tabs.components modules.
This commit is contained in:
jack
2026-06-11 11:57:24 -07:00
parent b52b983bb2
commit 97ca58bfc2
10 changed files with 1080 additions and 13 deletions
@@ -0,0 +1,91 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import ISC
RowLayout {
spacing: 2
component TBtn: Button {
implicitWidth: 44
implicitHeight: 32
hoverEnabled: true
font.pixelSize: 13
background: Rectangle {
color: parent.pressed ? Theme.transportButtonHover
: parent.hovered ? Theme.transportButtonBg
: Theme.transportBackground
radius: Theme.radiusSm
}
contentItem: Text {
text: parent.text
color: Theme.headingColor
font: parent.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
// Left fill — centers the button cluster
Item { Layout.fillWidth: true }
TBtn { text: "⏮"; onClicked: streamController.step(-1) }
TBtn { text: "⏹"; onClicked: streamController.stop() }
TBtn { text: "⏸"; onClicked: streamController.pause() }
// Play: slightly wider; leftPadding nudge compensates for ▶ optical offset
TBtn {
text: "▶"
implicitWidth: 52
contentItem: Text {
text: parent.text
color: Theme.headingColor
font: parent.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
leftPadding: 2
}
onClicked: streamController.play()
}
TBtn { text: "⏭"; onClicked: streamController.step(1) }
// Right fill — balances centering
Item { Layout.fillWidth: true }
// Speed cycle
Button {
id: speedBtn
property var speeds: [1, 2, 5]
property int idx: 0
implicitWidth: 44
implicitHeight: 32
hoverEnabled: true
text: speeds[idx] + "×"
font.pixelSize: 11
font.weight: Font.Medium
background: Rectangle {
color: parent.pressed ? Theme.transportButtonHover
: parent.hovered ? Theme.transportButtonBg
: Theme.transportBackground
radius: Theme.radiusSm
}
contentItem: Text {
text: parent.text
color: Theme.bodyColor
font: parent.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
onClicked: {
idx = (idx + 1) % speeds.length
streamController.setSpeed(speeds[idx])
}
}
Item { width: 8 }
Label {
text: "frame " + (streamController.frameIndex + 1) + " / " + streamController.frameTotal
color: Theme.bodyColor
font.pixelSize: 11
}
}