Fix TX following active RX VFO instead of the TX selector

The TX VFO is chosen independently of the RX VFO via the TX-A/TX-B buttons
(FSplitTxB: False=A, True=B); UI highlights TX-A when not split. But the TX
frequency and TX overlay used FActiveVfo in the non-split branch, coupling
TX to the active RX VFO. Result: with RX on B and TX-A selected, the radio
still transmitted on B (TX overlay also drew on B).

Make the TX VFO depend solely on FSplitTxB in all three spots:
ActiveTXFreqHz and both TXVfoIndex assignments (live update + ApplyMOX).
Now RX=B / TX=A works as the UI indicates. Pre-existing bug, not a refactor
regression. Builds clean, links.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-04 20:40:40 +03:00
co-authored by Claude Opus 4.8
parent 8f0ba64d67
commit af85ddece6
2 changed files with 9 additions and 5 deletions
+5 -3
View File
@@ -3017,9 +3017,10 @@ begin
// TX overlay следует за активной TX-частотой (учитывает split). При CTUN
// спектр TX будет отрисован на VFO, а не в центре дисплея.
FSpecView.TXFreq := ActiveTXFreqHz;
// Какой VFO привязан к TX (для split-полос фильтра): 1=B при FController.FSplitTxB, иначе FController.FActiveVfo.
// Какой VFO привязан к TX (для split-полос фильтра): задаётся селектором
// FSplitTxB (TX-A/TX-B), независимо от активного RX-VFO.
if FController.FSplitTxB then FSpecView.TXVfoIndex := 1
else FSpecView.TXVfoIndex := FController.FActiveVfo;
else FSpecView.TXVfoIndex := 0;
if UpdateWidebandFrequencyView and FShowWideband and (PbWideband <> nil) then
PbWideband.Invalidate;
end;
@@ -5559,8 +5560,9 @@ begin
StyleButton(BtnMOX, False);
// TX-overlay в SpectrumView: фиксируем актуальную TX-частоту/VFO-индекс и режим
FSpecView.TXFreq := ActiveTXFreqHz;
// TX-VFO задаётся селектором FSplitTxB, независимо от активного RX-VFO.
if FController.FSplitTxB then FSpecView.TXVfoIndex := 1
else FSpecView.TXVfoIndex := FController.FActiveVfo;
else FSpecView.TXVfoIndex := 0;
// DUP: данные остаются от RX-анализатора (TXMode=False), но TX-полоса
// фильтра рисуется поверх через TXOverlay. Без DUP при TX оба флага True.
FSpecView.TXMode := FController.FTransmitting and not FController.FDisplayDuplex;