Match the Available Mults and Qs window to N1MM's screenshots

The summary table labels had no foreground set, so only the highlighted
numbers drew. The window now has the two-line Mults/Qs and Bands/Modes
buttons, a bold summary table, a list sorted on frequency, a ringed picked
row, a tick in the Mlt column and N1MM's empty-list message.

Bands & Modes opens a window with band groups and the CW, Phone, Digital and
Contest modes. The hover text uses SpotDescription like the bandmap, so
control characters and the cluster time are gone. Grid columns keep a
minimum width of their heading in the Available, Statistics and Network
status windows.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 13:00:22 +00:00
co-authored by Claude Sonnet 5.5
parent fe70f9b058
commit 5e66778301
10 changed files with 395 additions and 134 deletions
@@ -0,0 +1,39 @@
using Nonemm.App.Windows;
using Nonemm.Contests;
using Nonemm.Core;
using Nonemm.Session;
using Nonemm.Spotting;
namespace Nonemm.App.Tests;
public class AvailableRowTests
{
private static readonly DateTime Now = new(2026, 5, 30, 12, 0, 0, DateTimeKind.Utc);
private static AvailableRow Row(string comment)
{
Spot spot = new(
Callsign.Parse("DL1ABC"),
Frequency.FromKilohertz(14_025),
Now.AddMinutes(-5),
SpotSource.Cluster,
"OK1TEST",
comment);
return new AvailableRow(new AvailableStation(spot, Bands.Band20M, Verdict.Dupe), "CW", Now, null, false, false);
}
[Fact]
public void TheHoverTextHasNoControlCharactersOtherThanLineBreaks()
{
string tip = Row("CW 24 dB\r\a 1234Z\r\n").Tip;
Assert.DoesNotContain(tip, c => char.IsControl(c) && c != '\n');
}
[Fact]
public void TheHoverTextLeavesOutTheClusterTimeAndTheSideband()
{
Assert.DoesNotContain("1234Z", Row("CW 24 dB 1234Z").Tip);
Assert.Equal("14025.0 by OK1TEST, 5m ago", Row("USB").Tip);
}
}