Lay the station form out the way N1MM lays it out

The dialog now carries N1MM's fields in N1MM's order, with the labels to
the left of the boxes and the tip text at the top right. New fields in
StoredStation: the address, the licence class, the position, the radio,
the antenna and the email address.

The grid square and the position fill each other in, as they do in N1MM.
Which box has focus decides the direction, because TextChanged arrives
too late to tell a typed edit from a programmed one.

The fields N1MM's form does not have are gone from it. Continent and the
country prefix are looked up from the callsign after Ok; the rest keep
the value they had.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-28 11:32:22 +00:00
parent 682932c35d
commit d347538fbc
6 changed files with 283 additions and 65 deletions

View File

@@ -356,6 +356,38 @@ public sealed record StoredStation
{
public string Callsign { get; init; } = "";
public string Address1 { get; init; } = "";
public string Address2 { get; init; } = "";
public string City { get; init; } = "";
public string Zip { get; init; } = "";
/// The country written out, as it goes on an award application. The prefix
/// the contest rules compare against is `CountryPrefix`.
public string Country { get; init; } = "";
public string License { get; init; } = "";
public double Latitude { get; init; }
public double Longitude { get; init; }
/// The radio, as N1MM's "Station" box asks for it.
public string Rig { get; init; } = "";
public string Antenna { get; init; } = "";
public string AntennaHeight { get; init; } = "";
/// Height above sea level.
public string AboveSeaLevel { get; init; } = "";
public string RoverQth { get; init; } = "";
public string Email { get; init; } = "";
public int CqZone { get; init; }
public int ItuZone { get; init; }
@@ -401,5 +433,7 @@ public sealed record StoredStation
Club = Club,
Check = Check,
Precedence = Precedence,
Latitude = Latitude,
Longitude = Longitude,
};
}