Phase 3 (batch 7): route CTun toggle through controller command

Первая команда тяжёлого класса. TRadioController.SetCTun несёт логику
движка/сети (band cache, при выключении — центрирование на VFO + SetShift(0)
+ UpdateState/SendFullHP); все нужные поля и хелперы XvtrTranslate/
ActiveTXFreqHz уже в контроллере. BtnCTunClick — тонкая обёртка
(SetCTun(not FCTun)); рендер (StyleButton/SyncSpecViewFreq/перерисовка
спектра+водопада) ушёл в OnControllerState(rfCTun).

Прямые записи FController.FCTun в путях band restore / ActivateVfo
оставлены — мигрируют со своими командами (Band/VFO).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-04 15:49:18 +03:00
co-authored by Claude Opus 4.8
parent d895800f62
commit 2e4cd3cc65
2 changed files with 30 additions and 26 deletions
+12 -25
View File
@@ -1444,6 +1444,15 @@ begin
FSpecView.DrawSpectrum;
PbSpectrum.Invalidate;
end;
rfCTun:
begin
StyleButton(BtnCTun, FController.FCTun);
SyncSpecViewFreq;
FSpecView.DrawSpectrum;
FSpecView.DrawWaterfall;
PbSpectrum.Invalidate;
PbWaterfall.Invalidate;
end;
rfWfAGC:
FSpecView.WfAGCEnabled := FController.FWfAGCEnabled;
rfWfNF:
@@ -4733,31 +4742,9 @@ end;
// ---------------------------------------------------------------------------
procedure TMainForm.BtnCTunClick(Sender: TObject);
begin
FController.FCTun := not FController.FCTun;
StyleButton(BtnCTun, FController.FCTun);
FController.FBandCache[FController.FCurrentBand].CTun := FController.FCTun;
if not FController.FCTun then
begin
// Выключили CTUN: центрируемся на VFO, shift=0
FController.FCenterFreq := FController.FVfoA;
if FController.FWDSPReady then
FController.FDSPEngine.SetShift(0.0);
if FController.FNetwork.Connected and FController.FNetwork.Running then
begin
FController.FNetwork.UpdateState(XvtrTranslate(FController.FCenterFreq), XvtrTranslate(ActiveTXFreqHz), FController.FDriveLevel, FController.FTransmitting, True, True);
FController.FNetwork.SendFullHP;
end;
end
else
begin
// Включили CTUN: фиксируем текущее положение дисплея
// FController.FCenterFreq остаётся как есть — спектр не прыгает
end;
SyncSpecViewFreq;
FSpecView.DrawSpectrum;
FSpecView.DrawWaterfall;
PbSpectrum.Invalidate;
PbWaterfall.Invalidate;
// Логика (band cache, center/shift, сеть) — в контроллере; рендер — в
// OnControllerState(rfCTun).
FController.SetCTun(not FController.FCTun);
end;
// ---------------------------------------------------------------------------