Add AGC picker to VfoOverlay DSP row

AGC button in DSP row shows current mode (FAST/MED/SLOW/LONG/OFF).
Click toggles a picker row below; selecting a mode closes it, fires
OnAGCChange, and syncs MainForm BtnAGCMode buttons and DSP engine.
Overlay height expands 136→159 px while picker is open.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 13:16:21 +03:00
co-authored by Claude Sonnet 4.6
parent 8193a2b598
commit 24ff61cb05
2 changed files with 127 additions and 29 deletions
+18 -3
View File
@@ -665,6 +665,7 @@ type
procedure PositionVfoOverlay;
procedure OnModeFilterSelect(Mode: Integer; FilterBW: Integer);
procedure OnVfoOverlayDSPChange(NRMode, NBMode: Integer; SNBOn, ANFOn: Boolean);
procedure OnVfoOverlayAGCChange(AGCMode: Integer);
procedure PbSpectrumDblClick(Sender: TObject);
procedure TrkDriveChange(Sender: TObject);
procedure TrkVolumeChange(Sender: TObject);
@@ -1330,6 +1331,7 @@ begin
FVfoOverlay := TVfoOverlay.Create(Self);
FVfoOverlay.OnSelect := OnModeFilterSelect;
FVfoOverlay.OnDSPChange := OnVfoOverlayDSPChange;
FVfoOverlay.OnAGCChange := OnVfoOverlayAGCChange;
FVfoOverlay.Visible := False;
FPanelHidden := False;
FShowSpectrum := True;
@@ -5397,9 +5399,9 @@ begin
BtnHidePanel.Caption := '▶';
FVfoOverlay.Parent := PanelRight;
FVfoOverlay.Width := 260;
FVfoOverlay.Height := 136;
FVfoOverlay.Height := 136; // OVL_H_NORM — расширяется сам при открытии AGC-пикера
FVfoOverlay.SetState(FMode, FFilterBW, FVfoA, FLastSMeter);
FVfoOverlay.SetDSPState(BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0);
FVfoOverlay.SetDSPState(BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0, FAGCMode);
FVfoOverlay.Visible := True;
FVfoOverlay.BringToFront;
PositionVfoOverlay;
@@ -5463,7 +5465,7 @@ begin
if Assigned(FVfoOverlay) and FVfoOverlay.Visible then
begin
FVfoOverlay.SetState(FMode, FFilterBW, FVfoA, FLastSMeter);
FVfoOverlay.SetDSPState(BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0);
FVfoOverlay.SetDSPState(BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0, FAGCMode);
PositionVfoOverlay; // перепозиционируем при смене LSB↔USB
end;
end;
@@ -5477,6 +5479,19 @@ begin
ApplyNoiseFilterButtonsToDSP;
end;
procedure TMainForm.OnVfoOverlayAGCChange(AGCMode: Integer);
const
AGCModes: array[0..4] of TWDSPAGCMode = (agcFast, agcMedium, agcSlow, agcLong, agcOff);
var
I: Integer;
begin
FAGCMode := AGCMode;
for I := 0 to 4 do StyleButton(BtnAGCMode[I], I = AGCMode);
if FWDSPReady then
FDSPEngine.SetAGC(AGCModes[AGCMode], 50.0);
FBandCache[FCurrentBand].AGCMode := FAGCMode;
end;
procedure TMainForm.BtnSpanClick(Sender: TObject);
var
NewRate: Integer;