Keep an operator's windows, colours and recordings
Ctrl+O asks who is at the radio, as it does in N1MM, and the callsign goes on
every contact logged from then on. A multi-operator station changes hands every
few hours, so each operator also keeps what he wants the program to look like:
where the windows sit, the theme, and the folder his recordings are in.
The windows on the screen are stored against the operator leaving, before the
dialog opens, and the operator taking over gets his own back. A window he opens
later is placed as it appears. An operator who is new to the list starts with
whatever is on the screen.
Nothing plays the recordings yet, so the folder is stored and waits on voice
keying. {OPERATOR} in a message sends the callsign.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoGtneMQaz4M9w7Kk49AVD
This commit is contained in:
@@ -186,6 +186,14 @@ public sealed record Settings
|
||||
|
||||
public IReadOnlyList<string> PhoneMessages { get; init; } = [];
|
||||
|
||||
/// The operators at this station, and their windows and colours. N1MM
|
||||
/// keeps an operator's callsign against every contact he logs; this keeps
|
||||
/// what he wants the program to look like as well.
|
||||
public IReadOnlyList<StoredOperator> Operators { get; init; } = [];
|
||||
|
||||
/// Whoever is at the radio now, or empty at a station with one operator.
|
||||
public string CurrentOperator { get; init; } = "";
|
||||
|
||||
/// The digital window's twenty-four macro buttons, in the same
|
||||
/// `label,message` lines as a function key file. Empty means the built-in
|
||||
/// set.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Nonemm.App.Configuration;
|
||||
|
||||
/// One operator's own settings. A multi-operator station changes hands every
|
||||
/// few hours, and each operator wants the windows where he left them and the
|
||||
/// colours he can read; N1MM asks for the operator's callsign the same way, and
|
||||
/// records it against every contact he logs.
|
||||
public sealed record StoredOperator
|
||||
{
|
||||
public string Callsign { get; init; } = "";
|
||||
|
||||
/// Empty leaves the colours as they are, which is what a new operator gets
|
||||
/// until he changes them.
|
||||
public string Theme { get; init; } = "";
|
||||
|
||||
/// The folder this operator's recordings are in. A voice keyer plays the
|
||||
/// recordings of whoever is at the microphone, so the path is the
|
||||
/// operator's rather than the station's.
|
||||
public string WavPath { get; init; } = "";
|
||||
|
||||
public IReadOnlyList<StoredWindow> Windows { get; init; } = [];
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace Nonemm.App.Configuration;
|
||||
|
||||
/// Where one window sits, in screen pixels. `Name` is the window's class name,
|
||||
/// which is what tells the entry window from the bandmap when a layout is put
|
||||
/// back.
|
||||
public sealed record StoredWindow
|
||||
{
|
||||
public string Name { get; init; } = "";
|
||||
|
||||
public int X { get; init; }
|
||||
|
||||
public int Y { get; init; }
|
||||
|
||||
public double Width { get; init; }
|
||||
|
||||
public double Height { get; init; }
|
||||
}
|
||||
Reference in New Issue
Block a user