style(ui): minor styling adjustments for AboutDialog and OverlapMapCard
CI / preflight (push) Waiting to run
CI / preflight (push) Waiting to run
This commit is contained in:
@@ -37,7 +37,6 @@ moc_*.cpp
|
|||||||
# Build / packaging artifacts
|
# Build / packaging artifacts
|
||||||
build/
|
build/
|
||||||
dist/
|
dist/
|
||||||
*.spec
|
|
||||||
*.icns
|
*.icns
|
||||||
*.ico
|
*.ico
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import QtQuick.Controls
|
|||||||
import QtQuick.Dialogs
|
import QtQuick.Dialogs
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import ISC
|
import ISC
|
||||||
|
import ISC.Tabs.components
|
||||||
|
|
||||||
Popup {
|
Popup {
|
||||||
id: root
|
id: root
|
||||||
@@ -133,13 +134,28 @@ Popup {
|
|||||||
Label { text: modelData.mfgDate; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.preferredWidth: 120 }
|
Label { text: modelData.mfgDate; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.preferredWidth: 120 }
|
||||||
Label { text: modelData.level; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.preferredWidth: 80 }
|
Label { text: modelData.level; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.preferredWidth: 80 }
|
||||||
Label { text: modelData.licDate; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.fillWidth: true }
|
Label { text: modelData.licDate; font.pixelSize: Theme.fontMd; color: Theme.bodyColor; Layout.fillWidth: true }
|
||||||
ToolButton {
|
Button {
|
||||||
|
id: removeLicenseBtn
|
||||||
Layout.preferredWidth: 28
|
Layout.preferredWidth: 28
|
||||||
|
implicitHeight: 28
|
||||||
|
hoverEnabled: true
|
||||||
|
background: Rectangle {
|
||||||
|
color: removeLicenseBtn.pressed ? Theme.buttonPressed : removeLicenseBtn.hovered ? Theme.buttonNeutralHover : "transparent"
|
||||||
|
radius: Theme.radiusSm
|
||||||
|
}
|
||||||
|
contentItem: Text {
|
||||||
text: "✕"
|
text: "✕"
|
||||||
font.pixelSize: Theme.fontSm
|
font.pixelSize: Theme.fontSm
|
||||||
ToolTip.visible: hovered
|
color: Theme.bodyColor
|
||||||
ToolTip.text: "Remove license"
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
onClicked: licenseModel.removeLicense(modelData.serial, modelData.level)
|
onClicked: licenseModel.removeLicense(modelData.serial, modelData.level)
|
||||||
|
|
||||||
|
AppToolTip {
|
||||||
|
visible: removeLicenseBtn.hovered
|
||||||
|
text: "Remove license"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,19 +124,25 @@ Rectangle {
|
|||||||
licenseModel.startReplayTrial()
|
licenseModel.startReplayTrial()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function onParsedDataReady(result) {
|
}
|
||||||
if (result.success && result.csv_path) {
|
Connections {
|
||||||
streamController.loadFile(result.csv_path)
|
// Deferred until the post-read metadata dialog (StatusTab.qml) closes —
|
||||||
|
// jumping tabs from onParsedDataReady directly would deactivate the
|
||||||
|
// Status Loader (StackLayout.index !== selectedTabIndex) and tear down
|
||||||
|
// the dialog before the technician could see or use it.
|
||||||
|
target: statusTabLoader.item
|
||||||
|
function onCsvMetadataDialogClosed(csvPath) {
|
||||||
|
if (!csvPath) return
|
||||||
|
streamController.loadFile(csvPath)
|
||||||
// Fires while still on Status(0), before the tab switch below —
|
// Fires while still on Status(0), before the tab switch below —
|
||||||
// the generic per-tab tracker only attributes picks made while
|
// the generic per-tab tracker only attributes picks made while
|
||||||
// already on Map/Graph, so record this one explicitly.
|
// already on Map/Graph, so record this one explicitly.
|
||||||
root.mapReviewFile = result.csv_path
|
root.mapReviewFile = csvPath
|
||||||
if (root.selectedTabIndex === 0 && licenseModel.licenses.length > 0) {
|
if (root.selectedTabIndex === 0 && licenseModel.licenses.length > 0) {
|
||||||
root.selectedTabIndex = 2
|
root.selectedTabIndex = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Connections {
|
Connections {
|
||||||
target: licenseModel
|
target: licenseModel
|
||||||
function onLicensesChanged() {
|
function onLicensesChanged() {
|
||||||
@@ -764,6 +770,7 @@ Rectangle {
|
|||||||
currentIndex: root.selectedTabIndex
|
currentIndex: root.selectedTabIndex
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
|
id: statusTabLoader
|
||||||
source: "Tabs/StatusTab.qml"
|
source: "Tabs/StatusTab.qml"
|
||||||
active: StackLayout.index === root.selectedTabIndex
|
active: StackLayout.index === root.selectedTabIndex
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,12 @@ ColumnLayout {
|
|||||||
anchors.margins: Theme.panelPadding
|
anchors.margins: Theme.panelPadding
|
||||||
spacing: 8
|
spacing: 8
|
||||||
|
|
||||||
|
// Fired once the post-read metadata dialog is dismissed (Save or Cancel),
|
||||||
|
// so HomePage can defer its auto-jump-to-Map until after the technician
|
||||||
|
// has had a chance to edit metadata — jumping tabs immediately would
|
||||||
|
// deactivate this Loader's item and kill the dialog mid-display.
|
||||||
|
signal csvMetadataDialogClosed(string csvPath)
|
||||||
|
|
||||||
// ── Reusable Inline Components ──
|
// ── Reusable Inline Components ──
|
||||||
component StatCard : Rectangle {
|
component StatCard : Rectangle {
|
||||||
property alias value: valueText.text
|
property alias value: valueText.text
|
||||||
@@ -147,31 +153,127 @@ ColumnLayout {
|
|||||||
id: editCsvDialog
|
id: editCsvDialog
|
||||||
parent: Overlay.overlay
|
parent: Overlay.overlay
|
||||||
modal: true
|
modal: true
|
||||||
title: "Edit CSV Metadata"
|
|
||||||
width: 460
|
width: 460
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
standardButtons: Dialog.Save | Dialog.Cancel
|
standardButtons: Dialog.NoButton
|
||||||
|
padding: 20
|
||||||
onAccepted: file_browser.saveMetadata(root.csvPath, metaWafer.text, metaDate.text, metaChamber.text, metaNotes.text, false, "")
|
onAccepted: file_browser.saveMetadata(root.csvPath, metaWafer.text, metaDate.text, metaChamber.text, metaNotes.text, false, "")
|
||||||
|
onClosed: root.csvMetadataDialogClosed(root.csvPath)
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
radius: Theme.radiusLg
|
||||||
|
color: Theme.cardBackground
|
||||||
|
border.color: Theme.cardBorder
|
||||||
|
border.width: Theme.borderThin
|
||||||
|
}
|
||||||
|
|
||||||
|
component MetaField: TextField {
|
||||||
|
id: metaField
|
||||||
|
Layout.fillWidth: true
|
||||||
|
color: Theme.fieldText
|
||||||
|
placeholderTextColor: Theme.fieldPlaceholder
|
||||||
|
selectedTextColor: Theme.fieldBackground
|
||||||
|
selectionColor: Theme.fieldText
|
||||||
|
font.pixelSize: Theme.fontMd
|
||||||
|
background: Rectangle {
|
||||||
|
radius: Theme.radiusXs
|
||||||
|
color: Theme.fieldBackground
|
||||||
|
border.width: metaField.activeFocus ? Theme.borderStrong : Theme.borderThin
|
||||||
|
border.color: metaField.activeFocus ? Theme.fieldBorderFocus : Theme.fieldBorder
|
||||||
|
Behavior on border.color {
|
||||||
|
ColorAnimation { duration: Theme.durationFast }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: 6
|
spacing: 6
|
||||||
|
|
||||||
|
// ── header ───────────────────────────────────────────────
|
||||||
|
Label {
|
||||||
|
text: "EDIT CSV METADATA"
|
||||||
|
color: Theme.headingColor
|
||||||
|
font.pixelSize: Theme.fontLg
|
||||||
|
font.bold: true
|
||||||
|
font.letterSpacing: 1
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
text: root.csvPath.split("/").pop()
|
text: root.csvPath.split("/").pop()
|
||||||
color: Theme.sideMutedText
|
color: Theme.sideMutedText
|
||||||
font.pixelSize: Theme.fontXs
|
font.pixelSize: Theme.fontXs
|
||||||
elide: Text.ElideMiddle
|
elide: Text.ElideMiddle
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Layout.bottomMargin: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.bottomMargin: 8
|
||||||
|
height: 1
|
||||||
|
color: Theme.cardBorder
|
||||||
|
}
|
||||||
|
|
||||||
|
Label { text: "Wafer"; color: Theme.bodyColor; font.pixelSize: Theme.fontXs }
|
||||||
|
MetaField { id: metaWafer }
|
||||||
|
Label { text: "Date"; color: Theme.bodyColor; font.pixelSize: Theme.fontXs; Layout.topMargin: 6 }
|
||||||
|
MetaField { id: metaDate }
|
||||||
|
Label { text: "Chamber"; color: Theme.bodyColor; font.pixelSize: Theme.fontXs; Layout.topMargin: 6 }
|
||||||
|
MetaField { id: metaChamber }
|
||||||
|
Label { text: "Notes"; color: Theme.bodyColor; font.pixelSize: Theme.fontXs; Layout.topMargin: 6 }
|
||||||
|
MetaField { id: metaNotes }
|
||||||
|
|
||||||
|
// ── buttons ───────────────────────────────────────────────
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 14
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: cancelCsvBtn
|
||||||
|
text: "Cancel"
|
||||||
|
Layout.fillWidth: true
|
||||||
|
hoverEnabled: true
|
||||||
|
background: Rectangle {
|
||||||
|
radius: Theme.radiusSm
|
||||||
|
color: cancelCsvBtn.down ? Theme.buttonNeutralPressed : cancelCsvBtn.hovered ? Theme.buttonNeutralHover : Theme.buttonNeutralBackground
|
||||||
|
border.width: Theme.borderThin
|
||||||
|
border.color: Theme.fieldBorder
|
||||||
|
}
|
||||||
|
contentItem: Text {
|
||||||
|
text: cancelCsvBtn.text
|
||||||
|
color: Theme.buttonNeutralText
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: Theme.fontSm
|
||||||
|
}
|
||||||
|
onClicked: editCsvDialog.reject()
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
id: saveCsvBtn
|
||||||
|
text: "Save"
|
||||||
|
Layout.fillWidth: true
|
||||||
|
hoverEnabled: true
|
||||||
|
background: Rectangle {
|
||||||
|
radius: Theme.radiusSm
|
||||||
|
color: saveCsvBtn.hovered ? Qt.lighter(Theme.primaryAccent, 1.1) : Theme.primaryAccent
|
||||||
|
border.width: Theme.borderThin
|
||||||
|
border.color: Theme.primaryAccent
|
||||||
|
}
|
||||||
|
contentItem: Text {
|
||||||
|
text: saveCsvBtn.text
|
||||||
|
color: Theme.tone100
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: Theme.fontSm
|
||||||
|
}
|
||||||
|
onClicked: editCsvDialog.accept()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Label { text: "Wafer" }
|
|
||||||
TextField { id: metaWafer; Layout.fillWidth: true }
|
|
||||||
Label { text: "Date" }
|
|
||||||
TextField { id: metaDate; Layout.fillWidth: true }
|
|
||||||
Label { text: "Chamber" }
|
|
||||||
TextField { id: metaChamber; Layout.fillWidth: true }
|
|
||||||
Label { text: "Notes" }
|
|
||||||
TextField { id: metaNotes; Layout.fillWidth: true }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,13 +316,12 @@ ColumnLayout {
|
|||||||
|
|
||||||
Item { Layout.fillHeight: true }
|
Item { Layout.fillHeight: true }
|
||||||
|
|
||||||
RowLayout {
|
// Badge cluster centers on the full card width; port name overlays
|
||||||
Layout.fillWidth: true
|
// the right edge independently so a long port string can't drag
|
||||||
spacing: 8
|
// the centered badge off-center (was sharing width via RowLayout).
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: 22
|
Layout.preferredHeight: 22
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
@@ -279,9 +380,10 @@ ColumnLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
text: root.portName
|
text: root.portName
|
||||||
color: root.isConnected ? Theme.statusSuccessColor : Theme.headingColor
|
color: root.isConnected ? Theme.statusSuccessColor : Theme.headingColor
|
||||||
font.pixelSize: Theme.fontMd
|
font.pixelSize: Theme.fontMd
|
||||||
@@ -612,7 +714,7 @@ ColumnLayout {
|
|||||||
root.dataCols = 0;
|
root.dataCols = 0;
|
||||||
root.csvPath = "";
|
root.csvPath = "";
|
||||||
if (result && result.success === true)
|
if (result && result.success === true)
|
||||||
saveDirDialog.open();
|
root.parseAndSavePendingRead();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ PanelBox {
|
|||||||
margin: 1.0
|
margin: 1.0
|
||||||
blend: card.blendAmount / 100
|
blend: card.blendAmount / 100
|
||||||
showLabels: true
|
showLabels: true
|
||||||
|
showExtremes: false
|
||||||
ringColor: Theme.waferRingColor
|
ringColor: Theme.waferRingColor
|
||||||
axisColor: Theme.waferAxisColor
|
axisColor: Theme.waferAxisColor
|
||||||
lowColor: Theme.sensorLow
|
lowColor: Theme.sensorLow
|
||||||
|
|||||||
Reference in New Issue
Block a user