This commit is contained in:
2026-06-07 11:00:25 +02:00
parent 8040a37315
commit d0526c39f5
4 changed files with 115 additions and 7 deletions
+4
View File
@@ -2535,6 +2535,9 @@ export default function App() {
if (m) setMode(m);
}
onCallsignInput(s.dx_call);
// Clicking a spot fills the call programmatically (no blur
// on the call field), so start the QSO recording here too.
if (s.dx_call.trim()) QSOAudioBegin().then(setRecording).catch(() => {});
}}
/>
);
@@ -2750,6 +2753,7 @@ export default function App() {
if (m) setMode(m);
}
onCallsignInput(s.dx_call);
if (s.dx_call.trim()) QSOAudioBegin().then(setRecording).catch(() => {});
}}
onClose={() => setShowBandMap(false)}
/>
+22 -2
View File
@@ -370,8 +370,8 @@ export function SettingsModal({ onClose, onSaved, initialSection }: Props) {
const [rotatorTest, setRotatorTest] = useState<{ ok: boolean; msg: string } | null>(null);
// Ultrabeam antenna (TCP) settings.
const [ultrabeam, setUltrabeam] = useState<{ enabled: boolean; host: string; port: number }>({
enabled: false, host: '', port: 23,
const [ultrabeam, setUltrabeam] = useState<{ enabled: boolean; host: string; port: number; follow: boolean; step_khz: number }>({
enabled: false, host: '', port: 23, follow: false, step_khz: 50,
});
const [ubTesting, setUbTesting] = useState(false);
const [ubTest, setUbTest] = useState<{ ok: boolean; msg: string } | null>(null);
@@ -1554,6 +1554,26 @@ export function SettingsModal({ onClose, onSaved, initialSection }: Props) {
/>
</div>
</div>
<div className="border-t border-border/60 pt-3 space-y-2">
<label className="flex items-center gap-2 text-sm cursor-pointer">
<Checkbox checked={ultrabeam.follow} onCheckedChange={(c) => setUltrabeam((s) => ({ ...s, follow: !!c }))} />
Follow rig frequency (auto-tune the antenna)
</label>
{ultrabeam.follow && (
<div className="flex items-center gap-3 pl-6">
<Label className="text-sm">Re-tune step</Label>
<Select value={String(ultrabeam.step_khz)} onValueChange={(v) => setUltrabeam((s) => ({ ...s, step_khz: parseInt(v, 10) || 50 }))}>
<SelectTrigger className="h-8 w-32"><SelectValue /></SelectTrigger>
<SelectContent>
<SelectItem value="25">25 kHz</SelectItem>
<SelectItem value="50">50 kHz</SelectItem>
<SelectItem value="100">100 kHz</SelectItem>
</SelectContent>
</Select>
<span className="text-xs text-muted-foreground">re-tune only when the frequency moves this far</span>
</div>
)}
</div>
<div className="flex items-center gap-2 pt-2">
<Button variant="outline" size="sm" onClick={testUltrabeam} disabled={ubTesting || !ultrabeam.host.trim()}>
{ubTesting ? 'Connecting…' : 'Test connection'}
+4
View File
@@ -1286,6 +1286,8 @@ export namespace main {
enabled: boolean;
host: string;
port: number;
follow: boolean;
step_khz: number;
static createFrom(source: any = {}) {
return new UltrabeamSettings(source);
@@ -1296,6 +1298,8 @@ export namespace main {
this.enabled = source["enabled"];
this.host = source["host"];
this.port = source["port"];
this.follow = source["follow"];
this.step_khz = source["step_khz"];
}
}
export class UltrabeamStatusInfo {