diff --git a/IoListTestingWindow.ClockSyncUx.cs b/IoListTestingWindow.ClockSyncUx.cs index 2ca060789..7b265d1a2 100644 --- a/IoListTestingWindow.ClockSyncUx.cs +++ b/IoListTestingWindow.ClockSyncUx.cs @@ -40,9 +40,9 @@ private void ClockSyncUx_Loaded(object sender, RoutedEventArgs e) Margin = new Thickness(0, 0, 8, 0), Padding = new Thickness(2, 0, 2, 0), FontSize = 11.2, - FontWeight = FontWeights.SemiBold, + FontWeight = FontWeights.Medium, Foreground = TryFindResource("Ink") as Brush ?? Brushes.DimGray, - Text = "Global SNTP", + Text = "SNTP · —", ToolTip = "Global SNTP is controlled from the ARSAS header. It is not owned by FAT and continues running when the FAT window closes while the global server toggle remains enabled." }; @@ -54,7 +54,7 @@ private void ClockSyncUx_Loaded(object sender, RoutedEventArgs e) FontSize = 10.4, FontWeight = FontWeights.Medium, Foreground = TryFindResource("MutedInk") as Brush ?? Brushes.SlateGray, - Text = "SNTP: waiting" + Text = "Clock · waiting" }; _clockSyncGlobalStatusText = globalStatus; @@ -104,25 +104,22 @@ private void RefreshClockSyncEvidence(SntpClockServiceSnapshot snapshot) SntpClockTransportMode.UdpSocket => "UDP", _ => "—" }; - var localAddress = snapshot.Binding?.LocalAddress.ToString(); - _clockSyncGlobalStatusText.Text = !enabled - ? "Global SNTP · Off" - : snapshot.State == SntpClockServiceState.Serving - ? $"Global SNTP · {localAddress ?? "Active"}" - : "Global SNTP · Enabled"; + _clockSyncGlobalStatusText.Text = enabled + ? "SNTP · ON" + : "SNTP · OFF"; _clockSyncEvidenceText.Text = !enabled - ? "SNTP: off" + ? "Clock · idle" : snapshot.State switch { SntpClockServiceState.Serving => - $"{transport} · B {snapshot.BroadcastCount} · Req {snapshot.ClientRequestCount} · Reply {snapshot.ReplyCount} · sync not proven", - SntpClockServiceState.Starting => "SNTP: starting...", - SntpClockServiceState.Stopped => "SNTP: waiting for connected IED", - SntpClockServiceState.PortUnavailable => "SNTP: unavailable", - SntpClockServiceState.Faulted => "SNTP: fault", - _ => $"SNTP: {snapshot.State}" + $"{transport} · B {snapshot.BroadcastCount} · Req {snapshot.ClientRequestCount} · Rep {snapshot.ReplyCount}", + SntpClockServiceState.Starting => "Clock · starting...", + SntpClockServiceState.Stopped => "Clock · waiting", + SntpClockServiceState.PortUnavailable => "Clock · unavailable", + SntpClockServiceState.Faulted => "Clock · fault", + _ => $"Clock · {snapshot.State}" }; var toolTip = BuildClockSyncEvidenceToolTip(snapshot, transport, enabled); @@ -164,4 +161,4 @@ private void ClockSyncUx_Closed(object? sender, EventArgs e) _clockSyncSnapshotOwner.ClockSyncSnapshotChanged -= ClockSyncSnapshotChanged; _clockSyncSnapshotOwner = null; } -} +} \ No newline at end of file diff --git a/IoListTestingWindow.P0BenchUx.cs b/IoListTestingWindow.P0BenchUx.cs index 04d69babc..788f8420c 100644 --- a/IoListTestingWindow.P0BenchUx.cs +++ b/IoListTestingWindow.P0BenchUx.cs @@ -58,6 +58,7 @@ private void ApplyP0BenchUx() { ConfigureP0StableFatColumns(); ConfigureP0AdaptiveHeaderActions(); + ConfigureP2CompactHeader(); } private void ConfigureP0StableFatColumns() @@ -206,4 +207,4 @@ public object Convert(object value, Type targetType, object parameter, CultureIn public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => Binding.DoNothing; -} +} \ No newline at end of file diff --git a/IoListTestingWindow.P2CompactHeader.cs b/IoListTestingWindow.P2CompactHeader.cs new file mode 100644 index 000000000..9d899819c --- /dev/null +++ b/IoListTestingWindow.P2CompactHeader.cs @@ -0,0 +1,67 @@ +using System.Windows; +using System.Windows.Controls; + +namespace ArIED61850Tester; + +/// +/// P2 bench-facing header compaction. +/// +/// P0 already separates operational actions from evidence/status actions. P2 only tightens +/// that existing hierarchy so the FAT header remains readable on normal engineering laptop +/// widths. Full evidence detail stays in the existing tooltips; protocol, evidence and grid +/// behavior are intentionally untouched. +/// +public partial class IoListTestingWindow +{ + private void ConfigureP2CompactHeader() + { + if (_p0PrimaryHeaderActions == null || _p0SecondaryHeaderActions == null) + return; + + _p0PrimaryHeaderActions.Margin = new Thickness(0); + _p0SecondaryHeaderActions.Margin = new Thickness(0, 3, 0, 0); + + foreach (var button in _p0PrimaryHeaderActions.Children.OfType