Repository navigation
P0 Studio UI polish: exact table-to-SV START, stacked 4V/4I, readable controls #237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: feature/studio-matched-ptp-sv-auto-20261017
Are you sure you want to change the base?
Changes from all commits
b672d79
973f1f6
3bd2570
c2e2f3f
37f88c2
e073624
00ef28b
e4ec60d
b79d330
6509e4b
229cf04
420fc04
d4a7423
778dbdc
3ecddad
0c68565
9185228
ef43c2b
f36bd99
2529638
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -118,7 +118,8 @@ ApplicationWindow { | |
| // Session-only operator intent. Never persist across application launches: | ||
| // an explicit PTP ON can be restored after a firmware reflash/reconnect | ||
| // without introducing an uncontrolled power-on publisher. | ||
| property bool ptpDesiredForSession: false | ||
| property bool ptpDesiredForSession: true | ||
| property bool defaultPtpStartAttempted: false | ||
| property string ptpDesiredRole: "SOURCE" | ||
| property bool ptpRestoreAfterFirmware: false | ||
| property int ptpRestoreChecks: 0 | ||
|
|
@@ -239,6 +240,26 @@ ApplicationWindow { | |
| } | ||
| } | ||
|
|
||
| // Operator default: PTP SOURCE ON once a verified board is ready. | ||
| // Keep the toggle tied to actual board telemetry, not this intent. | ||
| // Manual OFF cancels default ON for the rest of this application session. | ||
| Timer { | ||
| interval: 400 | ||
| repeat: true | ||
| running: !root.defaultPtpStartAttempted | ||
| onTriggered: { | ||
| const session = workflowBar.session | ||
| if (!session || !device.deviceVerified || !device.ptpAvailable || | ||
| !session.startReady || session.updatingFirmware || | ||
| device.ptpStarting) | ||
| return | ||
| root.defaultPtpStartAttempted = true | ||
| if (root.ptpDesiredForSession && !device.ptpRunning && | ||
| !root.startPtpRole("SOURCE")) | ||
| root.showMessage("PTP SOURCE could not start automatically. Use PTP On to retry.", true) | ||
| } | ||
| } | ||
|
|
||
| Timer { | ||
| id: messageTimer | ||
| interval: 2600 | ||
|
|
@@ -323,6 +344,7 @@ ApplicationWindow { | |
| } | ||
|
|
||
| function requestStopPtp() { | ||
| root.defaultPtpStartAttempted = true | ||
| root.ptpDesiredForSession = false | ||
| root.ptpRestoreAfterFirmware = false | ||
| return workflowBar.session && workflowBar.session.requestStopPtp() | ||
|
|
@@ -930,10 +952,27 @@ ApplicationWindow { | |
| SplitView.preferredWidth: root.compactLayout ? 700 : 860 | ||
| theme: studioTheme | ||
|
|
||
| ColumnLayout { | ||
| Flickable { | ||
| id: injectionScroll | ||
| objectName: "studioInjectionScroll" | ||
| anchors.fill: parent | ||
| anchors.margins: root.compactLayout ? 11 : 13 | ||
| spacing: root.compactLayout ? 6 : 8 | ||
| property real innerMargin: root.compactLayout ? 11 : 13 | ||
| clip: true | ||
| contentWidth: width | ||
| contentHeight: injectionContent.height + 2 * innerMargin | ||
| flickableDirection: Flickable.VerticalFlick | ||
| boundsBehavior: Flickable.StopAtBounds | ||
| interactive: contentHeight > height | ||
| ScrollBar.vertical: ScrollBar { policy: ScrollBar.AsNeeded } | ||
|
|
||
| ColumnLayout { | ||
| id: injectionContent | ||
| x: injectionScroll.innerMargin | ||
| y: injectionScroll.innerMargin | ||
| width: Math.max(0, injectionScroll.width - 2 * injectionScroll.innerMargin) | ||
| height: Math.max(injectionScroll.height - 2 * injectionScroll.innerMargin, | ||
| implicitHeight) | ||
| spacing: root.compactLayout ? 6 : 8 | ||
|
|
||
| RowLayout { | ||
| Layout.fillWidth: true | ||
|
|
@@ -1049,17 +1088,19 @@ ApplicationWindow { | |
| } | ||
| } | ||
|
|
||
| RowLayout { | ||
| ColumnLayout { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Changing this container from AGENTS.md reference: AGENTS.md:L249-L263 Useful? React with 👍 / 👎. |
||
| Layout.fillWidth: true | ||
| Layout.preferredHeight: root.compactLayout ? 214 : 224 | ||
| Layout.maximumHeight: root.compactLayout ? 214 : 224 | ||
| spacing: 9 | ||
| Layout.fillHeight: true | ||
| Layout.minimumHeight: 418 | ||
| spacing: 8 | ||
| SignalMatrix { | ||
| id: voltageMatrix | ||
| enabled: !workflowBar.startQueued | ||
| objectName: "studioVoltageMatrix" | ||
| Layout.fillWidth: true | ||
| Layout.fillHeight: true | ||
| Layout.preferredHeight: 205 | ||
| Layout.minimumHeight: 205 | ||
| theme: studioTheme | ||
| controller: root | ||
| device: device | ||
|
|
@@ -1079,6 +1120,8 @@ ApplicationWindow { | |
| objectName: "studioCurrentMatrix" | ||
| Layout.fillWidth: true | ||
| Layout.fillHeight: true | ||
| Layout.preferredHeight: 205 | ||
| Layout.minimumHeight: 205 | ||
| theme: studioTheme | ||
| controller: root | ||
| device: device | ||
|
|
@@ -1136,7 +1179,10 @@ ApplicationWindow { | |
| compact: root.compactLayout | ||
| } | ||
| } | ||
| Item { Layout.fillHeight: true } | ||
| // Stacked voltage/current matrices fill the full | ||
| // desktop panel; Flickable preserves all controls | ||
| // on smaller Windows viewports without clipping. | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With the session intent now initially true, an operator who turns PTP off from the Advanced panel does not cancel that intent: both Advanced stop paths call
session.requestStopPtp()directly inPtpExpertPanel.qmlrather thanroot.requestStopPtp(). After a later successful firmware update,onFirmwareUpdateFinishedstill sees this property as true and automatically restarts PTP SOURCE despite the explicit OFF; Advanced starts likewise do not updateptpDesiredRole, so a selected receiver/monitor role can be restored as SOURCE. Route all PTP start/stop entry points through the intent-owning controller.AGENTS.md reference: AGENTS.md:L74-L86
Useful? React with 👍 / 👎.