From 682932c35dc99d59d0a1e8822ffe9af74c74d7c4 Mon Sep 17 00:00:00 2001 From: ericek111 Date: Fri, 28 Aug 2026 10:39:32 +0000 Subject: [PATCH] Make the run switch a switch, and split the tuning tolerance by mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three things you could not see or could not set. Run and S&P were a label saying which one you were in. They are two buttons now, the one you are in marked, either one clickable, which is what N1MM has. Ctrl+? and F1 still work. The tuning tolerance is one number per mode, as N1MM keeps it: CW, phone and digital, 300 Hz each, which are its defaults. A phone signal is wide and a CW one is not, so one number for both was wrong. The bearing line went blank whenever it could not be worked out, which looks exactly like a missing feature. It now says which end could not be placed and what to do — no country file, no position for your own station, or a callsign the country file does not place. It also gives miles beside the kilometres, as N1MM does. While clicking it: a marked button lost its mark under the pointer, because the theme paints its own background there. The band buttons had the same fault. Co-Authored-By: Claude Opus 5 --- README.md | 17 ++++--- src/Nonemm.App/Configuration/Settings.cs | 16 +++++-- .../Windows/EntryWindow.CallFrame.cs | 6 ++- src/Nonemm.App/Windows/EntryWindow.axaml | 24 ++++++++-- src/Nonemm.App/Windows/EntryWindow.axaml.cs | 44 +++++++++++++++++-- 5 files changed, 90 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 455ab63..d41433d 100644 --- a/README.md +++ b/README.md @@ -198,8 +198,11 @@ name and the comment — and round again; shift and tab go the other way. N1MM does not touch the tab key at all, so tab there walks its boxes in the order they are laid out, which is what this does. -Two lights sit beside the run switch: the left one is green while a radio is -answering, the right one red while something is going out on the air. +Run and S&P are two buttons beside the lights; the one you are in is marked. +Ctrl+? switches between them, and F1 puts you into run mode, as in N1MM. + +Two lights sit beside them: the left one is green while a radio is answering, +the right one red while something is going out on the air. ### The buttons and the title bar @@ -226,14 +229,18 @@ when this is the frequency you last called CQ on. While searching, space with an empty callsign box takes the station out of the frame and into the box, so a spotted station is worked without typing its call. While running it does not, because a running station is answering callers rather than chasing the one it is -sitting on. How close the radio has to be to a spot is `TuningToleranceHertz` in -`settings.json`, 300 Hz out of the box, which is N1MM's default. +sitting on. How close the radio has to be to a spot is one number per mode in +`settings.json` — `CwTuningToleranceHertz`, `PhoneTuningToleranceHertz` and +`DigitalTuningToleranceHertz` — 300 Hz each out of the box, which is how N1MM +keeps them and what it defaults them to. ### Where the other station is Under the entry window is the line N1MM writes there: the beam heading, the heading the long way round, the distance in kilometres, and the sunrise and -sunset times at the other station. +sunset times at the other station, in kilometres and miles as N1MM shows them. +When it cannot be worked out the line says which end could not be placed, rather +than going blank. The position comes from the grid square when the contest exchanges one and it has been copied, or from the call history file, and from the country file diff --git a/src/Nonemm.App/Configuration/Settings.cs b/src/Nonemm.App/Configuration/Settings.cs index 40b4271..43c5f35 100644 --- a/src/Nonemm.App/Configuration/Settings.cs +++ b/src/Nonemm.App/Configuration/Settings.cs @@ -67,9 +67,19 @@ public sealed record Settings public bool EsmSendsCorrectedCall { get; init; } = true; /// How close to a spot the radio has to be for the entry window to say the - /// station is there. N1MM asks for the same number, one per mode; this is - /// one number for all of them. - public int TuningToleranceHertz { get; init; } = 300; + /// station is there. N1MM keeps one per mode and defaults each to 300 Hz. + public int CwTuningToleranceHertz { get; init; } = 300; + + public int PhoneTuningToleranceHertz { get; init; } = 300; + + public int DigitalTuningToleranceHertz { get; init; } = 300; + + public int TuningToleranceFor(ModeCategory mode) => mode switch + { + ModeCategory.Phone => PhoneTuningToleranceHertz, + ModeCategory.Digital => DigitalTuningToleranceHertz, + _ => CwTuningToleranceHertz, + }; /// How far `{FREQUP}` and `{FREQDN}` move the radio. N1MM asks for the same /// number in its Configurer. diff --git a/src/Nonemm.App/Windows/EntryWindow.CallFrame.cs b/src/Nonemm.App/Windows/EntryWindow.CallFrame.cs index 5e10ee9..203e58b 100644 --- a/src/Nonemm.App/Windows/EntryWindow.CallFrame.cs +++ b/src/Nonemm.App/Windows/EntryWindow.CallFrame.cs @@ -20,8 +20,12 @@ public sealed partial class EntryWindow /// one, and neither is nothing. private string framedCall = ""; + /// How close counts as sitting on a spot, which is a different number for + /// each mode: a phone signal is wide and a CW one is not. private Frequency TuningTolerance => - Frequency.FromHertz(Math.Max(0, session.Settings.TuningToleranceHertz)); + Frequency.FromHertz(Math.Max( + 0, + session.Settings.TuningToleranceFor(Logging?.Mode.Category ?? ModeCategory.Cw))); private void ShowCallFrame() { diff --git a/src/Nonemm.App/Windows/EntryWindow.axaml b/src/Nonemm.App/Windows/EntryWindow.axaml index e05cbf9..6d7f550 100644 --- a/src/Nonemm.App/Windows/EntryWindow.axaml +++ b/src/Nonemm.App/Windows/EntryWindow.axaml @@ -17,6 +17,21 @@ + + + + +