Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions apps/arstack_studio/qml/Main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -1039,8 +1039,8 @@ ApplicationWindow {
StudioTimingTray {
objectName: "studioTimingTray"
Layout.fillWidth: true
Layout.preferredHeight: 84
Layout.minimumHeight: 84
Layout.preferredHeight: 57
Layout.minimumHeight: 57
theme: studioTheme
controller: root
device: device
Expand Down Expand Up @@ -1105,9 +1105,10 @@ ApplicationWindow {
DockFrame {
visible: root.phasorDockVisible && !root.phasorDetached
SplitView.fillWidth: true
SplitView.fillHeight: true
SplitView.minimumHeight: 170
SplitView.preferredHeight: 238
SplitView.preferredHeight: 225
SplitView.maximumHeight: 265
SplitView.fillHeight: false

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove the duplicate SplitView fill-height bindings

This DockFrame already binds SplitView.fillHeight: true on line 1108, so adding a contradictory second binding here makes Main.qml invalid; the waveform frame has the same duplicate binding on line 1152. Qt classifies a property bound multiple times as a duplicate-property-binding, which can prevent the main component from loading. Replace the existing bindings rather than adding second assignments.

Useful? React with 👍 / 👎.

theme: studioTheme
titleText: "Phasor"
statusText: ""
Expand Down Expand Up @@ -1144,9 +1145,9 @@ ApplicationWindow {
DockFrame {
visible: root.waveformDockVisible && !root.waveformDetached
SplitView.fillWidth: true
SplitView.fillHeight: true
SplitView.minimumHeight: 170
SplitView.preferredHeight: 328
SplitView.fillHeight: true
theme: studioTheme
titleText: "Waveform"
statusText: root.signalFrequency.toFixed(3) + " Hz"
Expand Down
2 changes: 1 addition & 1 deletion apps/arstack_studio/qml/ModernRibbon.qml
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ Rectangle {
toolTipText: "Start"
onClicked: {
if (!bar.device.deviceVerified) {
// The footer already identifies preview-only operation.
bar.controller.offlinePreviewRunning = true
bar.controller.showMessage("Offline waveform preview · no network SV output.", false)
} else bar.workflow.requestStart()
}
}
Expand Down
27 changes: 4 additions & 23 deletions apps/arstack_studio/qml/StudioTimingTray.qml
Original file line number Diff line number Diff line change
Expand Up @@ -61,30 +61,11 @@ Rectangle {

ColumnLayout {
anchors.fill: parent
anchors.margins: tray.compact ? 9 : 11
spacing: tray.compact ? 5 : 7

RowLayout {
Layout.fillWidth: true
spacing: 8
Rectangle { width: 3; height: 14; radius: 2; color: tray.theme.accent }
Label {
text: "TIME SYNC / SV SIMULATION"
color: tray.theme.textSoft
font.family: tray.uiFont
font.pixelSize: 10
font.weight: Font.DemiBold
font.letterSpacing: 0.45
}
Item { Layout.fillWidth: true }
StateBadge {
theme: tray.theme
monoFont: tray.monoFont
state: tray.stateText
stateColor: tray.stateColor
}
}
anchors.margins: tray.compact ? 7 : 9
spacing: 0

// The only global PTP/device status lives in the footer.
// This is an action strip, not a second diagnostic/status card.
Comment on lines +67 to +68

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve transient PTP states in the surviving status area

When a verified device lacks PTP support, or while ptpStarting is true but ptpRunning is still false, the footer continues to render PTP OFF; this patch removes the badge that distinguished PTP UNAVAILABLE, PENDING, and UNVERIFIED. Consequently, an asynchronous start or failed/unverified transition is presented as an ordinary stopped state even though the controls are disabled. Move those state distinctions into the footer before removing the badge.

Useful? React with 👍 / 👎.

RowLayout {
Layout.fillWidth: true
spacing: tray.compact ? 7 : 10
Expand Down
9 changes: 9 additions & 0 deletions apps/arstack_studio/tests/check_operator_workspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,15 @@ def main() -> None:
assert "width: 212" in menu and "commandRows * 29" in menu
assert "text: \"Generated setpoint · not independent on-wire proof\"" not in preview
assert "No ESP32 board detected · Preview mode only" in main_qml
require("Layout.preferredHeight: 57" in main_qml
and "SplitView.maximumHeight: 265" in main_qml
and "SplitView.fillHeight: false" in main_qml,
"compact timing strip and bounded phasor panel must avoid dead space")
require("TIME SYNC / SV SIMULATION" not in tray
and "StateBadge {" not in tray,
"device/PTP status must not be duplicated in the control tray")
require("Offline waveform preview · no network SV output." not in ribbon,
"offline Start should not duplicate preview status with a toast")
assert "Layout.preferredHeight: 78" in main_qml
device_src = (STUDIO / "src/DeviceController.cpp").read_text(encoding="utf-8")
session_src = (STUDIO / "src/SmartSessionController.cpp").read_text(encoding="utf-8")
Expand Down
Loading