Improve the bandmap window

Remove the status bar and the band name, add the 75 and 150 kHz spans,
add buttons for the callsign size (saved in the settings), draw the scale
in the form's text colour so it shows in the dark theme, mark the carrier
on the VFO bar and place a sideband bar on its side of the carrier, and
show who spotted a station, when, and the comment when the pointer is on it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 01:21:45 +00:00
co-authored by Claude Sonnet 5.5
parent 7cf8cf29ec
commit c8bc141829
8 changed files with 170 additions and 56 deletions
@@ -82,14 +82,27 @@ public class BandmapLayoutTests
Assert.Equal(14_050_000, Scale().At(50).Hertz);
[Fact]
public void AReceiverBarIsAsWideAsTheModeItIsIn()
public void ACwReceiverBarIsCentredOnTheCarrier()
{
VfoMarker vfo = VfoMarker.Centred(
Frequency.FromKilohertz(14_025),
Frequency.FromHertz(500),
VfoRole.Receive);
VfoMarker vfo = VfoMarker.For(Frequency.FromKilohertz(14_025), Modes.Cw, VfoRole.Receive);
Assert.Equal(14_024_750, vfo.Low.Hertz);
Assert.Equal(14_025_250, vfo.High.Hertz);
Assert.Equal((14_024_750, 14_025_250), (vfo.Low.Hertz, vfo.High.Hertz));
Assert.Equal(14_025_000, vfo.Carrier.Hertz);
}
[Fact]
public void AnUpperSidebandBarStartsAtTheCarrier()
{
VfoMarker vfo = VfoMarker.For(Frequency.FromKilohertz(14_200), Modes.Usb, VfoRole.Receive);
Assert.Equal((14_200_000, 14_202_700), (vfo.Low.Hertz, vfo.High.Hertz));
}
[Fact]
public void ALowerSidebandBarEndsAtTheCarrier()
{
VfoMarker vfo = VfoMarker.For(Frequency.FromKilohertz(7_100), Modes.Lsb, VfoRole.Receive);
Assert.Equal((7_097_300, 7_100_000), (vfo.Low.Hertz, vfo.High.Hertz));
}
}
@@ -0,0 +1,27 @@
using Nonemm.Core;
namespace Nonemm.Spotting.Tests;
public class SpotDescriptionTests
{
private static readonly DateTime At = new(2026, 5, 30, 12, 1, 0, DateTimeKind.Utc);
[Fact]
public void ASpotNamesTheSpotterTheTimeAndTheComment()
{
Spot spot = new(
Callsign.Parse("JA1XYZ"), Frequency.FromKilohertz(14_025), At, SpotSource.Cluster,
"K1TTT", "CW 26 dB");
Assert.Equal("JA1XYZ 14025.0\nSpotted by K1TTT at 12:01Z\nCW 26 dB", SpotDescription.Of(spot));
}
[Fact]
public void ASpotWithoutACommentHasTwoLines()
{
Spot spot = new(
Callsign.Parse("JA1XYZ"), Frequency.FromKilohertz(14_025), At, SpotSource.Log);
Assert.Equal("JA1XYZ 14025.0\nWorked at 12:01Z", SpotDescription.Of(spot));
}
}