Phase 3 (batch 21): route web Mode/Filter through controller commands

SyncWebMode now delegates to FController.SetMode (default filter + DSP +
band cache; render via rfMode), and SyncWebFilter to FController.SetFilterBW,
whose stub is filled in: it applies the requested bandwidth and highlights
the nearest preset (render via rfFilter). The JS client only ever sends a
bandwidth in Hz ({cmd:"filter",bw:N}), so the old negative-index branch
was dead code and is removed. Both web handlers now use the same controller
commands as the desktop; the duplicated inline mode/filter logic is gone.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-05 17:06:18 +03:00
co-authored by Claude Opus 4.8
parent c7d93c2e46
commit 33c433ce5e
2 changed files with 32 additions and 61 deletions
+4 -60
View File
@@ -5628,16 +5628,9 @@ begin
end;
procedure TMainForm.SyncWebMode;
var i: Integer;
begin
if (FWebSyncInt < 0) or (FWebSyncInt >= MODE_COUNT) then Exit;
FController.FMode := FWebSyncInt;
for i := 0 to MODE_COUNT - 1 do StyleButton(BtnMode[i], i = FController.FMode);
if FController.FWDSPReady then FController.FDSPEngine.SetMode(FController.FMode);
UpdateFilterButtons;
FController.ApplyModeFilter;
SyncSpecViewFreq;
FController.FBandCache[FController.FCurrentBand].Mode := FController.FMode;
FController.SetMode(FWebSyncInt); // дефолт фильтра + DSP + cache; рендер через rfMode
end;
procedure TMainForm.WebOnFilter(BW: Integer);
@@ -5648,59 +5641,10 @@ begin
end;
procedure TMainForm.SyncWebFilter;
var
best, dist, i, j: Integer;
BW_arr: array[0..FILT_COUNT-1] of Integer;
Idx: Integer;
begin
// Negative value = -(idx+1) means filter index was passed directly
if FWebSyncInt < 0 then
begin
Idx := (-FWebSyncInt) - 1;
if (Idx >= 0) and (Idx < FILT_COUNT) then
begin
FController.FFilter := Idx;
case FController.FMode of
0,1: FController.FFilterBW := FILT_SSB_BW[Idx];
2: FController.FFilterBW := FILT_DSB_BW[Idx];
3,4: FController.FFilterBW := FILT_CW_BW[Idx];
5: if Idx < FILT_FM_COUNT then
begin
FController.FFilterBW := FILT_FM_BW[Idx];
FController.FFMDeviation := FILT_FM_DEV[Idx];
end;
else FController.FFilterBW := FILT_AM_BW[Idx];
end;
for j := 0 to FILT_COUNT-1 do StyleButton(BtnFilter[j], j = FController.FFilter);
FController.ApplyModeFilter;
SyncSpecViewFreq;
FController.FBandCache[FController.FCurrentBand].FilterBW := FController.FFilterBW;
end;
Exit;
end;
// Positive value = bandwidth in Hz, find closest filter
FController.FFilterBW := FWebSyncInt;
for i := 0 to FILT_COUNT-1 do BW_arr[i] := MaxInt;
case FController.FMode of
0,1: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_SSB_BW[i];
2: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_DSB_BW[i];
3,4: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_CW_BW[i];
5: for i := 0 to FILT_FM_COUNT-1 do BW_arr[i] := FILT_FM_BW[i];
else for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_AM_BW[i];
end;
best := 0; dist := MaxInt;
for i := 0 to FILT_COUNT-1 do
if Abs(BW_arr[i] - FWebSyncInt) < dist then
begin
dist := Abs(BW_arr[i] - FWebSyncInt);
best := i;
end;
FController.FFilter := best;
if FController.FMode = 5 then FController.FFMDeviation := FILT_FM_DEV[best];
for j := 0 to FILT_COUNT-1 do StyleButton(BtnFilter[j], j = FController.FFilter);
FController.ApplyModeFilter;
SyncSpecViewFreq;
FController.FBandCache[FController.FCurrentBand].FilterBW := FController.FFilterBW;
// Web-клиент шлёт полосу в Гц (кнопки панели фильтров = пресетные значения);
// команда применяет её и подсвечивает ближайший пресет (рендер — rfFilter).
FController.SetFilterBW(FWebSyncInt);
end;
procedure TMainForm.WebOnAGC(Mode: Integer);