Let the operator pick, order and sort the log columns

The log showed the contest's columns and nothing else, with the country,
points and multiplier columns fixed in the XAML. LogColumns now holds every
field the log can show and the settings file keeps the names, left to right.

A right click on a header adds or removes a column and offers the contest's
own set back, a header can be dragged to move its column, and a click sorts
on it. Sorting uses the field, not the text of the cell, so 9,000 kHz comes
before 14,000 and the serial numbers do not run 1, 10, 2. Both grids get the
same columns, so a value in the pane below sits under the column it belongs
to. Removing the last column is refused, otherwise nothing could be selected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015NZkFxHde1iifAQemFTHxf
This commit is contained in:
2026-09-10 11:38:30 +00:00
co-authored by Claude Opus 5
parent d5788da240
commit 33c7631e17
7 changed files with 478 additions and 101 deletions
+4
View File
@@ -208,6 +208,10 @@ public sealed record Settings
public string QtcRttySendAllEnding { get; init; } = QtcMessages.DefaultSendAllEnding;
/// The log window's columns, as `QsoField` names left to right. Empty means
/// the set the contest opens with.
public IReadOnlyList<string> LogColumns { get; init; } = [];
/// What the statistics window counts down the rows and across the columns.
/// N1MM opens on the contacts per hand per hour, so this program does too.
public string StatsRow { get; init; } = "Hour";