Add the Info window, following N1MM's source

The window shows the operator, the call-frame spot, country, bearing and
sun lines, the WWV line and a message area. It draws both rate graphs
against the goals and shows the QSO timer (seven modes), the band timer,
the band-change count and the Run/Mult box.

Goals use N1MM's `dhh goal` file format and its Import Goals rules,
including statistics and CSV files. Logic that does not need the UI is in
Nonemm.Contests (Goals, QsoTimer, RateBars) and Nonemm.Session
(InfoLines), with tests.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 15:43:09 +00:00
co-authored by Claude Sonnet 5.5
parent 7a728af469
commit 012b0cdc8b
26 changed files with 2055 additions and 0 deletions
+20
View File
@@ -26,6 +26,26 @@ The Cabrillo output has not been put in front of a contest sponsor's robot.
## Half-built
**The info window: what N1MM has and this does not.** The window follows
`InfoWindow.cs` from the decompiled source: the caption, the call-frame spot,
the country, bearing and sun lines, the WWV line, the message area, both graphs
with goals, the QSO timer in all seven modes, the band timer, the band-change
count and the Run/Mult box. Goals use N1MM's `dhh goal` file format and its
Import Goals rules, including the statistics and CSV files. Left out:
- the multi-op category mismatch message and the CPU-load advisory for heavy
spot traffic;
- goals kept per contest in the Admin database, and the goal file that a
contest's Associated Files tab loads when the contest starts. Goals are one
list in `settings.json` that stays until it is replaced;
- the highlight on a spot from a preferred spotter;
- N1MM's time-since-last-QSO options 4 to 6, which its code limits by radio
number in a way that does not match their menu labels. This program follows
the labels;
- the hourly graph's slots end on the minute they start, where N1MM's end a
minute early (:19, :39, :59);
- a real check of the RBN link. It is N1MM's URL, and has not been opened.
**The digital window: what N1MM has and this does not.** The window is here —
receive pane in both of N1MM's scroll modes, the Letters/Figs and MouseOver
readouts, the pause bar, coloured callsigns with N1MM's validity routines, grab