diff --git a/apps/arstack_studio/qml/FirmwarePanel.qml b/apps/arstack_studio/qml/FirmwarePanel.qml index 3abdb754d..fbb6de3fa 100644 --- a/apps/arstack_studio/qml/FirmwarePanel.qml +++ b/apps/arstack_studio/qml/FirmwarePanel.qml @@ -41,38 +41,6 @@ SurfacePanel { } } - component DarkComboBox: ComboBox { - id: combo - implicitHeight: 40 - font.family: panel.uiFont - font.pixelSize: 11 - leftPadding: 12 - rightPadding: 34 - contentItem: Text { - leftPadding: 2 - rightPadding: 2 - text: combo.displayText - color: combo.enabled ? panel.theme.text : panel.theme.muted2 - font: combo.font - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - indicator: Label { - x: combo.width - width - 12 - y: (combo.height - height) / 2 - text: "⌄" - color: combo.enabled ? panel.theme.textSoft : panel.theme.muted2 - font.family: panel.uiFont - font.pixelSize: 13 - } - background: Rectangle { - radius: 7 - color: combo.hovered ? panel.theme.raisedHover : panel.theme.surface2 - border.width: 1 - border.color: combo.activeFocus ? panel.theme.accent : panel.theme.line - } - } - Component.onCompleted: if (panel.session) panel.session.requestRefreshPorts() ColumnLayout { @@ -219,7 +187,9 @@ SurfacePanel { RowLayout { Layout.fillWidth: true spacing: 8 - DarkComboBox { + StudioDarkComboBox { + theme: panel.theme + uiFont: panel.uiFont id: firmwarePort Layout.preferredWidth: 205 model: panel.device.ports diff --git a/apps/arstack_studio/qml/Main.qml b/apps/arstack_studio/qml/Main.qml index 8efae0100..fdaef5634 100644 --- a/apps/arstack_studio/qml/Main.qml +++ b/apps/arstack_studio/qml/Main.qml @@ -789,7 +789,9 @@ ApplicationWindow { CalmButton { theme: studioTheme; uiFont: root.uiFont; text: "50"; implicitWidth: 44; onClicked: root.setFrequencyValue(50) } CalmButton { theme: studioTheme; uiFont: root.uiFont; text: "60"; implicitWidth: 44; onClicked: root.setFrequencyValue(60) } Rectangle { width: 1; height: 24; color: studioTheme.lineSoft } - CheckBox { + StudioDarkCheckBox { + theme: studioTheme + uiFont: root.uiFont enabled: root.signalFrequency > 0 checked: root.phaseLink text: "3-phase link" diff --git a/apps/arstack_studio/qml/PtpExpertPanel.qml b/apps/arstack_studio/qml/PtpExpertPanel.qml index 7cb838094..ebbc7ef52 100644 --- a/apps/arstack_studio/qml/PtpExpertPanel.qml +++ b/apps/arstack_studio/qml/PtpExpertPanel.qml @@ -54,6 +54,11 @@ SurfacePanel { readonly property string activeRole: panel.device.ptpRole readonly property bool sourceRole: activeRole === "SOURCE" + readonly property string svTimingEvidence: panel.device.smpSynchSimulated + ? "SIMULATED FLAG · sample clock not necessarily synchronized" + : panel.device.smpSynchMeasured + ? "MEASURED SYNC FLAG · verify sample-phase evidence independently" + : "FREE-RUN / UNQUALIFIED · PTP packets do not prove SV sample lock" readonly property bool receiverRole: activeRole === "RECEIVER" readonly property bool sourceEvidence: Number(panel.device.ptpAnnounceSent) > 0 && Number(panel.device.ptpSyncSent) > 0 @@ -277,7 +282,7 @@ SurfacePanel { } Label { Layout.fillWidth: true - text: "AUTO = measured evidence; 0 / 1 / 2 = on-wire simulation flag only. PTP packets and sampling clock are separate." + text: panel.svTimingEvidence + "\nAUTO uses measured evidence; 0 / 1 / 2 only simulates the on-wire flag." wrapMode: Text.WordWrap color: panel.theme.textSoft font.family: panel.uiFont diff --git a/apps/arstack_studio/qml/QualityEditor.qml b/apps/arstack_studio/qml/QualityEditor.qml index 6864a3d0f..73aef4c91 100644 --- a/apps/arstack_studio/qml/QualityEditor.qml +++ b/apps/arstack_studio/qml/QualityEditor.qml @@ -99,7 +99,9 @@ RowLayout { } } - ComboBox { + StudioDarkComboBox { + theme: editor.theme + uiFont: editor.uiFont id: presetBox implicitWidth: editor.compact ? 98 : 108 model: ["Good", "Invalid", "Questionable", "Test"] diff --git a/apps/arstack_studio/qml/SignalMatrix.qml b/apps/arstack_studio/qml/SignalMatrix.qml index a151da39e..1b789b0d0 100644 --- a/apps/arstack_studio/qml/SignalMatrix.qml +++ b/apps/arstack_studio/qml/SignalMatrix.qml @@ -128,7 +128,7 @@ Rectangle { id: magnitudeMenu background: Rectangle { color: matrix.theme.raised; radius: 8; border.color: matrix.theme.line } MenuItem { - text: "Equal ABC values to " + signalRow.sid + text: "Equal Value · A/B/C = " + signalRow.sid enabled: signalRow.rowIndex < 3 onTriggered: matrix.controller.equalGroupMagnitudes(matrix.groupIndex, signalRow.rowIndex) contentItem: Label { text: parent.text; color: matrix.theme.text; font.family: matrix.uiFont; font.pixelSize: 12 } @@ -139,14 +139,14 @@ Rectangle { id: phaseMenu background: Rectangle { color: matrix.theme.raised; radius: 8; border.color: matrix.theme.line } MenuItem { - text: "Equal ABC angles to " + signalRow.sid + text: "Equal Angle · A/B/C = " + signalRow.sid enabled: signalRow.rowIndex < 3 onTriggered: matrix.controller.equalGroupAngles(matrix.groupIndex, signalRow.rowIndex) contentItem: Label { text: parent.text; color: matrix.theme.text; font.family: matrix.uiFont; font.pixelSize: 12 } background: Rectangle { color: parent.highlighted ? matrix.theme.accentSoft : "transparent" } } MenuItem { - text: "Balance ABC angles (120 degrees)" + text: "Balance Angle · 120° from " + signalRow.sid enabled: signalRow.rowIndex < 3 onTriggered: matrix.controller.balanceGroupAngles(matrix.groupIndex, signalRow.rowIndex) contentItem: Label { text: parent.text; color: matrix.theme.text; font.family: matrix.uiFont; font.pixelSize: 12 } @@ -195,7 +195,9 @@ Rectangle { anchors.rightMargin: 9 spacing: 6 - CheckBox { + StudioDarkCheckBox { + theme: matrix.theme + uiFont: matrix.uiFont Layout.preferredWidth: 25 Layout.alignment: Qt.AlignVCenter checked: signalRow.channelEnabled @@ -227,6 +229,9 @@ Rectangle { NumericField { id: magnitudeField + ToolTip.visible: hovered && !activeFocus + ToolTip.delay: 650 + ToolTip.text: "Right-click: Equal Value (set phases A/B/C to this magnitude)" MouseArea { anchors.fill: parent z: 5 @@ -282,6 +287,9 @@ Rectangle { NumericField { id: phaseField + ToolTip.visible: hovered && !activeFocus + ToolTip.delay: 650 + ToolTip.text: "Right-click: Equal Angle or Balance phases A/B/C by 120°" MouseArea { anchors.fill: parent z: 5