diff --git a/src/Nonemm.App/Dialogs/BandmapDialog.axaml b/src/Nonemm.App/Dialogs/BandmapDialog.axaml
new file mode 100644
index 0000000..e8aab5f
--- /dev/null
+++ b/src/Nonemm.App/Dialogs/BandmapDialog.axaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Nonemm.App/Dialogs/BandmapDialog.axaml.cs b/src/Nonemm.App/Dialogs/BandmapDialog.axaml.cs
new file mode 100644
index 0000000..a769c87
--- /dev/null
+++ b/src/Nonemm.App/Dialogs/BandmapDialog.axaml.cs
@@ -0,0 +1,39 @@
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Nonemm.App.Configuration;
+
+namespace Nonemm.App.Dialogs;
+
+/// How long spots stay on the bandmap, and when the program puts a station on
+/// it by itself.
+public sealed partial class BandmapDialog : Window
+{
+ private readonly Settings settings;
+
+ public BandmapDialog(Settings settings)
+ {
+ this.settings = settings;
+ InitializeComponent();
+ CwDigitalTimeoutBox.Value = settings.CwDigitalSpotTimeoutMinutes;
+ PhoneTimeoutBox.Value = settings.PhoneSpotTimeoutMinutes;
+ QsySpotBox.Value = settings.QsySpotHertz;
+ CqLeaveBox.Value = settings.CqLeaveHertz;
+ RecentSpotBox.Value = settings.RecentContactSpotMinutes;
+ }
+
+ private void OnSave(object? sender, RoutedEventArgs e) =>
+ Close(settings with
+ {
+ CwDigitalSpotTimeoutMinutes = Read(CwDigitalTimeoutBox, settings.CwDigitalSpotTimeoutMinutes),
+ PhoneSpotTimeoutMinutes = Read(PhoneTimeoutBox, settings.PhoneSpotTimeoutMinutes),
+ QsySpotHertz = Read(QsySpotBox, settings.QsySpotHertz),
+ CqLeaveHertz = Read(CqLeaveBox, settings.CqLeaveHertz),
+ RecentContactSpotMinutes = Read(RecentSpotBox, settings.RecentContactSpotMinutes),
+ });
+
+ /// A box the operator emptied keeps the setting it had.
+ private static int Read(NumericUpDown box, int fallback) =>
+ box.Value is { } value ? (int)value : fallback;
+
+ private void OnCancel(object? sender, RoutedEventArgs e) => Close(null);
+}
diff --git a/src/Nonemm.App/Windows/EntryWindow.Menu.cs b/src/Nonemm.App/Windows/EntryWindow.Menu.cs
index 27dd6e9..d5d21dc 100644
--- a/src/Nonemm.App/Windows/EntryWindow.Menu.cs
+++ b/src/Nonemm.App/Windows/EntryWindow.Menu.cs
@@ -572,6 +572,17 @@ public sealed partial class EntryWindow
}
}
+ private async void OnBandmapSettings(object? sender, RoutedEventArgs e)
+ {
+ BandmapDialog dialog = new(session.Settings);
+ Settings? updated = await dialog.ShowDialog(this);
+ if (updated is not null)
+ {
+ session.Save(updated);
+ Status("bandmap settings saved");
+ }
+ }
+
private async void OnBroadcastSettings(object? sender, RoutedEventArgs e)
{
BroadcastDataDialog dialog = new(session.Settings);
diff --git a/src/Nonemm.App/Windows/EntryWindow.axaml b/src/Nonemm.App/Windows/EntryWindow.axaml
index b77d7c1..f58946a 100644
--- a/src/Nonemm.App/Windows/EntryWindow.axaml
+++ b/src/Nonemm.App/Windows/EntryWindow.axaml
@@ -101,6 +101,7 @@
+
diff --git a/src/Nonemm.App/Windows/TelnetWindow.Filters.cs b/src/Nonemm.App/Windows/TelnetWindow.Filters.cs
index 898778c..d703e78 100644
--- a/src/Nonemm.App/Windows/TelnetWindow.Filters.cs
+++ b/src/Nonemm.App/Windows/TelnetWindow.Filters.cs
@@ -48,11 +48,6 @@ public sealed partial class TelnetWindow
CallAreasBox.Text = string.Join(' ', filter.CallAreas);
BlockedSpottersBox.Text = string.Join(' ', filter.BlockedSpotters);
BlockedCallsBox.Text = string.Join(' ', filter.BlockedCalls);
- TimeoutBox.Text = session.Settings.CwDigitalSpotTimeoutMinutes.ToString(CultureInfo.InvariantCulture);
- PhoneTimeoutBox.Text = session.Settings.PhoneSpotTimeoutMinutes.ToString(CultureInfo.InvariantCulture);
- QsySpotBox.Text = session.Settings.QsySpotHertz.ToString(CultureInfo.InvariantCulture);
- RecentSpotBox.Text = session.Settings.RecentContactSpotMinutes.ToString(CultureInfo.InvariantCulture);
- CqLeaveBox.Text = session.Settings.CqLeaveHertz.ToString(CultureInfo.InvariantCulture);
SpotCommentBox.Text = session.Settings.SpotComment;
}
@@ -75,13 +70,6 @@ public sealed partial class TelnetWindow
PreferredSpotters = Words(PreferredSpottersBox.Text),
},
RandomizeSpots = RandomizeBox.IsChecked == true,
- CwDigitalSpotTimeoutMinutes = Minutes(TimeoutBox.Text, session.Settings.CwDigitalSpotTimeoutMinutes),
- PhoneSpotTimeoutMinutes = Minutes(PhoneTimeoutBox.Text, session.Settings.PhoneSpotTimeoutMinutes),
- QsySpotHertz = Minutes(QsySpotBox.Text, session.Settings.QsySpotHertz),
- RecentContactSpotMinutes = int.TryParse(RecentSpotBox.Text, out int recent) && recent >= 0
- ? recent
- : session.Settings.RecentContactSpotMinutes,
- CqLeaveHertz = Minutes(CqLeaveBox.Text, session.Settings.CqLeaveHertz),
});
Show("*** filters applied — they hold for the spots that arrive from now on", NoticeColour);
}
diff --git a/src/Nonemm.App/Windows/TelnetWindow.axaml b/src/Nonemm.App/Windows/TelnetWindow.axaml
index 1419c61..b8b0c7c 100644
--- a/src/Nonemm.App/Windows/TelnetWindow.axaml
+++ b/src/Nonemm.App/Windows/TelnetWindow.axaml
@@ -120,16 +120,6 @@
-
-
-
-
-
-
-
-
-
-