From ff781d34f414a9858a5d0947ae25e7d5fa0ff70c Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 15:34:42 +0700 Subject: [PATCH 1/6] ui(analyzer): replace cramped metering tile grid with readable full-width RMS/angle phase ledger and on-demand power details --- src/ProcessBus.App.Wpf/MainWindow.xaml | 521 ++++++++++--------------- 1 file changed, 214 insertions(+), 307 deletions(-) diff --git a/src/ProcessBus.App.Wpf/MainWindow.xaml b/src/ProcessBus.App.Wpf/MainWindow.xaml index 4b673d44..27b462a0 100644 --- a/src/ProcessBus.App.Wpf/MainWindow.xaml +++ b/src/ProcessBus.App.Wpf/MainWindow.xaml @@ -2328,321 +2328,228 @@ + - - - - - - - - - - - - - - - - + Style="{StaticResource DenseGroupBorderStyle}" + Padding="10" + Background="{DynamicResource PanelBrush}"> + + + + + + + + - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + From 4eefb071bdb73691af5785d66ef311f57aa242ae Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 15:35:29 +0700 Subject: [PATCH 2/6] ui(scope): remove live trace-overlapping labels and persistent cursor chips; show lightweight lane legend and drag-only sample inspection --- .../Controls/WaveformPanelControl.cs | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/ProcessBus.App.Wpf/Controls/WaveformPanelControl.cs b/src/ProcessBus.App.Wpf/Controls/WaveformPanelControl.cs index 35897b3b..d3870ec8 100644 --- a/src/ProcessBus.App.Wpf/Controls/WaveformPanelControl.cs +++ b/src/ProcessBus.App.Wpf/Controls/WaveformPanelControl.cs @@ -214,11 +214,17 @@ private void DrawLane(DrawingContext dc, Rect rect, LaneDefinition lane, Wavefor var amplitudeMax = ResolveLaneAmplitudeMax(lane, laneSeries); dc.DrawText(CreateText(lane.Title, 13, TitleBrush, TitleTypeface), new Point(rect.Left + 12, rect.Top + 7)); - // Shape quality is reported once in the main scope header. Repeating it inside - // both lanes and the footer created visual noise during harmonic tests. - dc.DrawText( - CreateText($"+/-{amplitudeMax:0.#} {lane.Unit}", 11, LabelBrush, LabelTypeface), - new Point(rect.Right - 104, rect.Top + 8)); + // Stable header legend, not badges covering the trace. Samples remain + // geometrically unmodified and every phase retains its color identity. + var legendX = rect.Left + 103; + foreach (var visible in laneSeries) + { + var legend = CreateText(visible.Name, 10.5, LabelBrush, LabelTypeface); + dc.DrawEllipse(GetSeriesBrush(visible.Name), null, + new Point(legendX, rect.Top + 15), 3.5, 3.5); + dc.DrawText(legend, new Point(legendX + 7, rect.Top + 7)); + legendX += legend.Width + 25; + } DrawGrid(dc, innerRect); DrawYAxisScale(dc, innerRect, amplitudeMax, lane.Unit); @@ -233,9 +239,9 @@ private void DrawLane(DrawingContext dc, Rect rect, LaneDefinition lane, Wavefor for (var index = 0; index < laneSeries.Count; index++) DrawSeries(dc, innerRect, laneSeries[index], amplitudeMax, stacked, index, laneSeries.Count); - // Cursor overlay is expensive during repaint/resize. - // Re-enable later with cached text layout. - if (MarkersEnabled) + // Inspection overlay is interactive only: never obstruct live curves + // with a permanent cursor/tooltip when the operator is not inspecting. + if (MarkersEnabled && _isDraggingCursor) DrawCursor(dc, innerRect, laneSeries, amplitudeMax, stacked, snapshot); DrawTimebaseLabel(dc, innerRect, snapshot); @@ -703,20 +709,6 @@ private void DrawSeries(DrawingContext dc, Rect rect, WaveformSeriesModel series dc.DrawGeometry(null, pens.Shadow, geometry); dc.DrawGeometry(null, pens.Main, geometry); - // cleaner label badge at right side - var labelY = GetLastY(rect, series.Samples, amplitudeMax, stacked, index, totalSeries) - 9; - var labelText = CreateText(series.Name, 11, brush, TitleTypeface); - var badge = new Rect(rect.Right - 43, labelY - 3, 38, labelText.Height + 6); - - dc.DrawRoundedRectangle(CloneBrushOpacity(brush, series.HasShapeDistortion ? 0.24 : 0.12), null, badge, 7, 7); - dc.DrawText(labelText, new Point(badge.Left + 8, badge.Top + 3)); - - if (series.HasShapeDistortion) - { - var marker = new Rect(badge.Left - 18, badge.Top + 1, 14, 14); - dc.DrawRoundedRectangle(CloneBrushOpacity(ShapeAlertBrush, 0.24), null, marker, 7, 7); - dc.DrawText(CreateText("!", 10.5, ShapeAlertBrush, TitleTypeface), new Point(marker.Left + 4.2, marker.Top - 0.5)); - } } private static void DrawLaneShapeBadge(DrawingContext dc, Rect rect, IReadOnlyList series) @@ -1051,6 +1043,7 @@ protected override void OnMouseUp(MouseButtonEventArgs e) _isDraggingCursor = false; ReleaseMouseCapture(); + InvalidateVisual(); e.Handled = true; } From ada1c66ca362cfcd1a632ed3e14c649e9d4722a6 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 15:36:43 +0700 Subject: [PATCH 3/6] ui(analyzer): remove duplicate stream summary, quiet scope header and keep technical metadata in a detail expander --- src/ProcessBus.App.Wpf/MainWindow.xaml | 130 ++----------------------- 1 file changed, 9 insertions(+), 121 deletions(-) diff --git a/src/ProcessBus.App.Wpf/MainWindow.xaml b/src/ProcessBus.App.Wpf/MainWindow.xaml index 27b462a0..d5c24eaf 100644 --- a/src/ProcessBus.App.Wpf/MainWindow.xaml +++ b/src/ProcessBus.App.Wpf/MainWindow.xaml @@ -910,97 +910,7 @@ Text="SV Stream Explorer"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - + - - - - - @@ -2300,10 +2192,6 @@ Text=""/> - - From e4748bedff2a71da1b3486f7bb7ce70fcbb57086 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 15:38:05 +0700 Subject: [PATCH 4/6] ui(diagnostics): prioritize four compact actionable health cards, demote repetitive explanations to contextual details --- src/ProcessBus.App.Wpf/MainWindow.xaml | 126 +++++++++++++------------ 1 file changed, 66 insertions(+), 60 deletions(-) diff --git a/src/ProcessBus.App.Wpf/MainWindow.xaml b/src/ProcessBus.App.Wpf/MainWindow.xaml index d5c24eaf..dad20b90 100644 --- a/src/ProcessBus.App.Wpf/MainWindow.xaml +++ b/src/ProcessBus.App.Wpf/MainWindow.xaml @@ -2503,85 +2503,91 @@ FontSize="12.5" FontWeight="SemiBold" Margin="0,1,0,0"/> - + - + + - - + - - - - - - - - - + + + - - + - - - - - + + + - - + - - - - - - - - + + + - - + - - - - - + + + - Date: Sat, 17 Oct 2026 15:39:22 +0700 Subject: [PATCH 5/6] ui(ptp): separate concise timing confidence from deep provenance; collapse verbose protocol caveats and remove repetitive copy --- src/ProcessBus.App.Wpf/MainWindow.xaml | 54 ++++++++++++++------------ 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/ProcessBus.App.Wpf/MainWindow.xaml b/src/ProcessBus.App.Wpf/MainWindow.xaml index dad20b90..86268c61 100644 --- a/src/ProcessBus.App.Wpf/MainWindow.xaml +++ b/src/ProcessBus.App.Wpf/MainWindow.xaml @@ -1531,21 +1531,22 @@ - + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +