diff --git a/changelog.json b/changelog.json index c8505b5..fd0f0d6 100644 --- a/changelog.json +++ b/changelog.json @@ -12,7 +12,8 @@ "Awards: 'county' joins the searchable QSO fields — the CNTY field as it stands. The existing 'us_county' keys the county to its state, which is right for the United States and wrong everywhere else: an RDA district or a Japanese city code is already unique.", "FlexRadio: a split pile-up chaser. When a CW skimmer (SDC) marks a report on the panadapter, OpsLog moves the TRANSMIT slice there — where the DX was listening a second ago — with a signed offset in Hz. The receive slice never moves. The marker text is yours to set (599 by default, whatever SDC is configured to write), and the button lives on the FlexRadio panel next to SPLIT, not in a settings page.", "The radio's spot feed is now subscribed to even when OpsLog draws no spots of its own — that feed is how another program's spots arrive. Clearing the panadapter at connect still only happens when the overlay is OpsLog's: 'spot clear' removes every spot on the radio, a skimmer's included.", - "Fixed the split chaser reading its own switch from the wrong key, so it stayed off however many times it was turned on. A recognised marker that is nonetheless ignored now says why in the log." + "Fixed the split chaser reading its own switch from the wrong key, so it stayed off however many times it was turned on. A recognised marker that is nonetheless ignored now says why in the log.", + "The split chaser's marker text is editable on the panel, beside the offset. It has to match what SDC is set to write, and several can be listed — add the old-report marker to chase those too." ], "fr": [ "Édition de QSO : HAMLOG.online rejoint l'onglet QSL Info — son propre canal dans la liste, avec envoyé/reçu et les deux dates, et une ligne dans le tableau de statut. Ses quatre colonnes passent aussi du groupe QSL au groupe Uploads, à côté de Club Log et QRZ.com.", @@ -24,7 +25,8 @@ "Diplômes : « county » rejoint les champs de QSO interrogeables — le champ CNTY tel quel. Le « us_county » existant associe le comté à son État, ce qui est juste aux États-Unis et faux ailleurs : un district RDA ou un code de ville japonais est déjà unique.", "FlexRadio : chasseur de pile-up en split. Quand un skimmer CW (SDC) marque un report sur le panadapter, OpsLog déplace la slice d'ÉMISSION dessus — là où le DX écoutait une seconde plus tôt — avec un décalage signé en Hz. La slice de réception ne bouge jamais. Le texte du marqueur se règle (599 par défaut, ce que SDC est configuré à écrire), et le bouton est sur le panneau FlexRadio à côté de SPLIT, pas dans les réglages.", "Le flux de spots de la radio est désormais suivi même si OpsLog n'affiche aucun spot : c'est par lui qu'arrivent les spots des autres programmes. Le nettoyage du panadapter à la connexion reste réservé au cas où l'affichage est celui d'OpsLog : « spot clear » efface tous les spots de la radio, y compris ceux d'un skimmer.", - "Correction : le chasseur de pile-up lisait son propre interrupteur sous une mauvaise clé et restait donc éteint quel que soit le nombre de fois où on l'allumait. Un marqueur reconnu mais ignoré indique désormais pourquoi dans le journal." + "Correction : le chasseur de pile-up lisait son propre interrupteur sous une mauvaise clé et restait donc éteint quel que soit le nombre de fois où on l'allumait. Un marqueur reconnu mais ignoré indique désormais pourquoi dans le journal.", + "Le texte du marqueur du chasseur de pile-up se modifie sur le panneau, à côté du décalage. Il doit correspondre à ce que SDC est réglé à écrire, et on peut en lister plusieurs — ajoute le marqueur des reports anciens pour les chasser aussi." ] }, { diff --git a/frontend/src/components/FlexPanel.tsx b/frontend/src/components/FlexPanel.tsx index bfcdc7d..c5d0be2 100644 --- a/frontend/src/components/FlexPanel.tsx +++ b/frontend/src/components/FlexPanel.tsx @@ -310,10 +310,14 @@ export function FlexPanel({ onCWSpeed, onReportRST }: { onCWSpeed?: (wpm: number const [rstChase, setRstChase] = useState<{ enabled: boolean; markers: string; offset_hz: number; split_only: boolean }>( { enabled: false, markers: '599', offset_hz: 0, split_only: true }); const [rstChaseOffsetText, setRstChaseOffsetText] = useState('0'); + // The marker text is edited as raw text and only parsed on blur: it is a + // comma-separated list, and normalising it on every keystroke would eat the + // comma the moment it is typed. + const [rstChaseMarkersText, setRstChaseMarkersText] = useState('599'); useEffect(() => { GetFlexRSTChase().then((c: any) => { if (!c) return; - setRstChase(c); setRstChaseOffsetText(String(c.offset_hz ?? 0)); + setRstChase(c); setRstChaseOffsetText(String(c.offset_hz ?? 0)); setRstChaseMarkersText(String(c.markers ?? '599')); }).catch(() => {}); }, []); const [st, setSt] = useState(ZERO); @@ -676,6 +680,25 @@ export function FlexPanel({ onCWSpeed, onReportRST }: { onCWSpeed?: (wpm: number rstChase.enabled ? 'bg-success text-success-foreground border-success shadow-[0_0_12px] shadow-success/50' : 'bg-card text-success border-success hover:bg-success-muted')}> {rstChase.markers.split(',')[0].trim() || '599'} + {rstChase.enabled && ( + + )} {rstChase.enabled && (