fix(slice-cat): перестройка слайса внутри полосы захвата обновляет флаг

TuneSliceInBand в быстрой ветке (цель уже внутри захваченной полосы) звал
только SetSliceTarget и не слал ни одного Changed. Позицию флага UI держит
сам (TickFlags -> LayoutFlags читает живой TargetHz), а частота и кромки
фильтра живут в собственных полях оверлея и заливаются только из
PushSliceFlagState. Итог: флаг уезжал на новую частоту, показывая старые
цифры и старую полосу фильтра. Дальний QSY выглядел исправным лишь потому,
что там двигалось окно DDC и приходил rfPanFreq с PushAllSliceFlagStates.

Новое поле rfSliceFreq (+ FSliceFreqId как полезная нагрузка) и хелпер
SliceFreqChanged: шлётся из быстрой ветки и из ветки пана 0 (rfCenterFreq
флаги не перезаливает). MainForm обновляет только тронутый слайс.

Тракт передачи не менялся: ActiveTXFreqHz и так берёт TargetHz слайса-
источника, а SetSliceTarget сразу пушит сетевое состояние (DUC).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 23:46:05 +03:00
co-authored by Claude Opus 5
parent b02b68aa6a
commit 00860e5154
2 changed files with 33 additions and 1 deletions
+11
View File
@@ -1822,6 +1822,17 @@ begin
end;
end;
rfSliceFreq:
begin
// Слайс перестроен по своему CAT-порту в пределах захваченной полосы:
// окно DDC не двигалось (rfPanFreq не придёт), но цифры и полоса
// фильтра во флаге — его собственные поля, их надо перезалить.
PushFlagStateAllPans(FController.FSliceFreqId);
LayoutFlagsAllPans;
for i := 0 to MAX_PANS - 1 do
if FPans[i] <> nil then MarkPanDirty(FPans[i]);
end;
rfPanFreq:
begin
// Центр доп. пана переехал не из UI (CAT слайса перестроил его за