Move WF AGC/NF from main form buttons to Settings → Waterfall checkboxes

Replaced the WF AGC and WF NF toggle buttons in the main panel with
"Waterfall AGC" and "Waterfall NF" checkboxes in the Settings form
Waterfall tab (AGC & Noise Floor group). Settings are global, defaults
remain AGC=on, NF=off.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 14:59:10 +03:00
co-authored by Claude Sonnet 4.6
parent e8561dcc18
commit 88ceee824d
2 changed files with 56 additions and 24 deletions
+11 -24
View File
@@ -342,8 +342,6 @@ type
BtnSNB: TFlatButton; BtnSNB: TFlatButton;
BtnANF: TFlatButton; BtnANF: TFlatButton;
BtnMute: TFlatButton; BtnMute: TFlatButton;
BtnWfAGC: TFlatButton;
BtnWfNF: TFlatButton;
PanelSMeterRight: TPanel; PanelSMeterRight: TPanel;
PbSMeterRight: TPaintBox; PbSMeterRight: TPaintBox;
@@ -577,8 +575,6 @@ type
procedure ActivateXvtrBand(Idx: Integer); procedure ActivateXvtrBand(Idx: Integer);
procedure DeactivateXvtr; procedure DeactivateXvtr;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
procedure BtnWfAGCClick(Sender: TObject);
procedure BtnWfNFClick(Sender: TObject);
procedure BtnHidePanelClick(Sender: TObject); procedure BtnHidePanelClick(Sender: TObject);
procedure BtnSettingsClick(Sender: TObject); procedure BtnSettingsClick(Sender: TObject);
procedure PositionVfoOverlay; procedure PositionVfoOverlay;
@@ -612,6 +608,7 @@ type
SpecAvgTimeMS: Double); SpecAvgTimeMS: Double);
procedure ApplyWaterfallParams(WfDet, WfAvgMode: Integer; procedure ApplyWaterfallParams(WfDet, WfAvgMode: Integer;
WfAvgTimeMS, WfHigh, WfLow, WfAGCOffset: Double); WfAvgTimeMS, WfHigh, WfLow, WfAGCOffset: Double);
procedure ApplyWfAGCNF(WfAGC, WfNF: Boolean);
procedure ApplyGridParams(RefLevel, Range, GridStep: Double); procedure ApplyGridParams(RefLevel, Range, GridStep: Double);
// Пушит активные grid-параметры (RX или TX в зависимости от FTransmitting) // Пушит активные grid-параметры (RX или TX в зависимости от FTransmitting)
// в FSpecView и сбрасывает кэш сетки. Вызывается при смене RX↔TX и при // в FSpecView и сбрасывает кэш сетки. Вызывается при смене RX↔TX и при
@@ -1646,7 +1643,7 @@ begin
// RX controls // RX controls
PanelRX := TPanel.Create(Self); PanelRX := TPanel.Create(Self);
PanelRX.Parent := PanelLeft; PanelRX.Parent := PanelLeft;
PanelRX.SetBounds(0, Y, LEFT_W, 150); PanelRX.SetBounds(0, Y, LEFT_W, 122);
PanelRX.BevelOuter := bvNone; PanelRX.BevelOuter := bvNone;
// AGC mode — 5 кнопок в ряд // AGC mode — 5 кнопок в ряд
@@ -1692,10 +1689,8 @@ begin
BtnSNB := MakeBtn(PanelRX, 'SNB', 2*W+6, 96, W, BTN_SM, BtnSNBClick); BtnSNB := MakeBtn(PanelRX, 'SNB', 2*W+6, 96, W, BTN_SM, BtnSNBClick);
BtnANF := MakeBtn(PanelRX, 'ANF', 3*W+8, 96, W, BTN_SM, BtnANFClick); BtnANF := MakeBtn(PanelRX, 'ANF', 3*W+8, 96, W, BTN_SM, BtnANFClick);
BtnMute:= MakeBtn(PanelRX, 'MUTE', 4*W+10, 96, W, BTN_SM, BtnMuteClick); BtnMute:= MakeBtn(PanelRX, 'MUTE', 4*W+10, 96, W, BTN_SM, BtnMuteClick);
BtnWfAGC := MakeBtn(PanelRX, 'WF AGC', 2, 122, (LEFT_W - 6) div 2, BTN_SM, BtnWfAGCClick);
BtnWfNF := MakeBtn(PanelRX, 'WF NF', 4 + (LEFT_W - 6) div 2, 122, (LEFT_W - 6) div 2, BTN_SM, BtnWfNFClick);
Inc(Y, 154); Inc(Y, 126);
// S-Meter // S-Meter
@@ -2294,8 +2289,6 @@ begin
StyleButton(BtnSNB, BtnSNB.Active); StyleButton(BtnSNB, BtnSNB.Active);
StyleButton(BtnANF, BtnANF.Active); StyleButton(BtnANF, BtnANF.Active);
StyleButton(BtnMute, BtnMute.Active); StyleButton(BtnMute, BtnMute.Active);
StyleButton(BtnWfAGC, BtnWfAGC.Active);
StyleButton(BtnWfNF, BtnWfNF.Active);
StyleButton(BtnMOX, BtnMOX.Active); StyleButton(BtnMOX, BtnMOX.Active);
StyleButton(BtnTUN, BtnTUN.Active); StyleButton(BtnTUN, BtnTUN.Active);
@@ -3519,8 +3512,8 @@ begin
BtnNB.Tag := EnsureRange(G_Settings.NBMode, 0, 2); UpdateNBButton; BtnNB.Tag := EnsureRange(G_Settings.NBMode, 0, 2); UpdateNBButton;
BtnSNB.Tag := Ord(G_Settings.SNBEnabled); UpdateSNBButton; BtnSNB.Tag := Ord(G_Settings.SNBEnabled); UpdateSNBButton;
BtnANF.Tag := Ord(G_Settings.ANFEnabled); UpdateANFButton; BtnANF.Tag := Ord(G_Settings.ANFEnabled); UpdateANFButton;
FWfAGCEnabled := G_Settings.WfAGCEnabled; StyleButton(BtnWfAGC, FWfAGCEnabled); FWfAGCEnabled := G_Settings.WfAGCEnabled;
FWfNFEnabled := G_Settings.WfNFEnabled; StyleButton(BtnWfNF, FWfNFEnabled); FWfNFEnabled := G_Settings.WfNFEnabled;
FWfManualHigh := G_Settings.WfManualHigh; FWfManualHigh := G_Settings.WfManualHigh;
FWfManualLow := G_Settings.WfManualLow; FWfManualLow := G_Settings.WfManualLow;
FWfAGCOffset := G_Settings.WfAGCOffset; FWfAGCOffset := G_Settings.WfAGCOffset;
@@ -4728,18 +4721,12 @@ begin
end; end;
procedure TMainForm.BtnWfAGCClick(Sender: TObject); procedure TMainForm.ApplyWfAGCNF(WfAGC, WfNF: Boolean);
begin begin
FWfAGCEnabled := not FWfAGCEnabled; FWfAGCEnabled := WfAGC;
StyleButton(BtnWfAGC, FWfAGCEnabled); FWfNFEnabled := WfNF;
FSpecView.WfAGCEnabled := FWfAGCEnabled; FSpecView.WfAGCEnabled := FWfAGCEnabled;
end; FSpecView.WfNFEnabled := FWfNFEnabled;
procedure TMainForm.BtnWfNFClick(Sender: TObject);
begin
FWfNFEnabled := not FWfNFEnabled;
StyleButton(BtnWfNF, FWfNFEnabled);
FSpecView.WfNFEnabled := FWfNFEnabled;
end; end;
procedure TMainForm.BtnHidePanelClick(Sender: TObject); procedure TMainForm.BtnHidePanelClick(Sender: TObject);
@@ -5116,7 +5103,6 @@ end;
procedure TMainForm.SyncWebWfAGC; procedure TMainForm.SyncWebWfAGC;
begin begin
FWfAGCEnabled := FWebSyncBool; FWfAGCEnabled := FWebSyncBool;
StyleButton(BtnWfAGC, FWfAGCEnabled);
FSpecView.WfAGCEnabled := FWfAGCEnabled; FSpecView.WfAGCEnabled := FWfAGCEnabled;
end; end;
@@ -5130,7 +5116,6 @@ end;
procedure TMainForm.SyncWebWfNF; procedure TMainForm.SyncWebWfNF;
begin begin
FWfNFEnabled := FWebSyncBool; FWfNFEnabled := FWebSyncBool;
StyleButton(BtnWfNF, FWfNFEnabled);
FSpecView.WfNFEnabled := FWfNFEnabled; FSpecView.WfNFEnabled := FWfNFEnabled;
end; end;
@@ -6123,6 +6108,7 @@ begin
SF.OnTXChange := OnTXSettingsChange; SF.OnTXChange := OnTXSettingsChange;
SF.OnAlexChange := OnAlexSettingsChange; SF.OnAlexChange := OnAlexSettingsChange;
SF.OnXvtrChange := OnXvtrSettingsChange; SF.OnXvtrChange := OnXvtrSettingsChange;
SF.OnWfAGCNFChange := ApplyWfAGCNF;
end; end;
SF := TSettingsForm(FSettingsForm); SF := TSettingsForm(FSettingsForm);
SF.LoadTXSettings(FTXSettings); SF.LoadTXSettings(FTXSettings);
@@ -6142,6 +6128,7 @@ begin
// Перечисляем PA устройства // Перечисляем PA устройства
SF.RefreshAudioDevices(FAudioOut, FAudioIn); SF.RefreshAudioDevices(FAudioOut, FAudioIn);
SF.LoadVisibility(FShowSpectrum, FShowWaterfall); SF.LoadVisibility(FShowSpectrum, FShowWaterfall);
SF.LoadWfAGCNF(FWfAGCEnabled, FWfNFEnabled);
SF.LoadFPS(FDisplayFPS); SF.LoadFPS(FDisplayFPS);
SF.LoadLightTheme(FLightTheme); SF.LoadLightTheme(FLightTheme);
SF.LoadFreqMhzDigits(FFreqMhzDigits); SF.LoadFreqMhzDigits(FFreqMhzDigits);
+45
View File
@@ -47,6 +47,7 @@ type
TOnVisibilityChange = procedure(ShowSpectrum, ShowWaterfall: Boolean) of object; TOnVisibilityChange = procedure(ShowSpectrum, ShowWaterfall: Boolean) of object;
TOnFPSChange = procedure(FPS: Integer) of object; TOnFPSChange = procedure(FPS: Integer) of object;
TOnThemeChange = procedure(LightTheme: Boolean) of object; TOnThemeChange = procedure(LightTheme: Boolean) of object;
TOnWfAGCNFChange = procedure(WfAGC, WfNF: Boolean) of object;
TOnCATChange = procedure( TOnCATChange = procedure(
const SerEnabled: array of Boolean; const SerEnabled: array of Boolean;
const SerPort: array of string; const SerPort: array of string;
@@ -101,6 +102,8 @@ type
FWfHigh: TFloatSpinEdit; FWfHigh: TFloatSpinEdit;
FWfLow: TFloatSpinEdit; FWfLow: TFloatSpinEdit;
FWfAGCOffset: TFloatSpinEdit; FWfAGCOffset: TFloatSpinEdit;
FChkWfAGC: TCheckBox;
FChkWfNF: TCheckBox;
FEdRefLevel: TEdit; FEdRefLevel: TEdit;
FEdRange: TEdit; FEdRange: TEdit;
FCmbGridStep: TComboBox; FCmbGridStep: TComboBox;
@@ -246,6 +249,7 @@ type
FOnVisibilityChange: TOnVisibilityChange; FOnVisibilityChange: TOnVisibilityChange;
FOnFPSChange: TOnFPSChange; FOnFPSChange: TOnFPSChange;
FOnThemeChange: TOnThemeChange; FOnThemeChange: TOnThemeChange;
FOnWfAGCNFChange: TOnWfAGCNFChange;
FOnFreqMhzDigitsChange: TOnFreqMhzDigitsChange; FOnFreqMhzDigitsChange: TOnFreqMhzDigitsChange;
FOnTXChange: TOnTXSettingsChange; FOnTXChange: TOnTXSettingsChange;
@@ -293,6 +297,7 @@ type
procedure OnWfAvgModeChange(Sender: TObject); procedure OnWfAvgModeChange(Sender: TObject);
procedure OnWfAvgTimeChange(Sender: TObject); procedure OnWfAvgTimeChange(Sender: TObject);
procedure OnWfThresholdChange(Sender: TObject); procedure OnWfThresholdChange(Sender: TObject);
procedure OnWfAGCNFChkChange(Sender: TObject);
procedure OnRefLevelChange(Sender: TObject); procedure OnRefLevelChange(Sender: TObject);
procedure OnRangeChange(Sender: TObject); procedure OnRangeChange(Sender: TObject);
procedure OnGridStepChange(Sender: TObject); procedure OnGridStepChange(Sender: TObject);
@@ -349,6 +354,7 @@ type
procedure LoadTXSettings(const T: TTXSettings); procedure LoadTXSettings(const T: TTXSettings);
procedure LoadAlexSettings(const A: TAlexSettings; BoardType: Integer); procedure LoadAlexSettings(const A: TAlexSettings; BoardType: Integer);
procedure LoadXvtrSettings(const X: TXvtrSettings); procedure LoadXvtrSettings(const X: TXvtrSettings);
procedure LoadWfAGCNF(AGC, NF: Boolean);
property OnCATChange: TOnCATChange read FOnCATChange write FOnCATChange; property OnCATChange: TOnCATChange read FOnCATChange write FOnCATChange;
property OnAlexChange: TOnAlexChange read FOnAlexChange write FOnAlexChange; property OnAlexChange: TOnAlexChange read FOnAlexChange write FOnAlexChange;
@@ -364,6 +370,7 @@ type
property OnThemeChange: TOnThemeChange read FOnThemeChange write FOnThemeChange; property OnThemeChange: TOnThemeChange read FOnThemeChange write FOnThemeChange;
property OnFreqMhzDigitsChange: TOnFreqMhzDigitsChange read FOnFreqMhzDigitsChange write FOnFreqMhzDigitsChange; property OnFreqMhzDigitsChange: TOnFreqMhzDigitsChange read FOnFreqMhzDigitsChange write FOnFreqMhzDigitsChange;
property OnTXChange: TOnTXSettingsChange read FOnTXChange write FOnTXChange; property OnTXChange: TOnTXSettingsChange read FOnTXChange write FOnTXChange;
property OnWfAGCNFChange: TOnWfAGCNFChange read FOnWfAGCNFChange write FOnWfAGCNFChange;
end; end;
implementation implementation
@@ -934,6 +941,26 @@ begin
FWfLow := MkFloat(CX, R1 + STEP, SPW, -130.0, -180.0, 0.0, 1.0, OnWfThresholdChange); FWfLow := MkFloat(CX, R1 + STEP, SPW, -130.0, -180.0, 0.0, 1.0, OnWfThresholdChange);
MakeLbl(Grp, 'AGC Offset (dB):', PAD, R1 + 2 * STEP + 5, LW); MakeLbl(Grp, 'AGC Offset (dB):', PAD, R1 + 2 * STEP + 5, LW);
FWfAGCOffset := MkFloat(CX, R1 + 2 * STEP, SPW, 0.0, -40.0, 40.0, 0.5, OnWfThresholdChange); FWfAGCOffset := MkFloat(CX, R1 + 2 * STEP, SPW, 0.0, -40.0, 40.0, 0.5, OnWfThresholdChange);
Grp := MakeGroupPanel(FPageWaterfall, 'AGC && Noise Floor', MARGIN, 458, 650, 140);
FChkWfAGC := TCheckBox.Create(Self);
FChkWfAGC.Parent := Grp;
FChkWfAGC.Caption := 'Waterfall AGC';
FChkWfAGC.SetBounds(PAD, R1, 200, 22);
FChkWfAGC.Checked := True;
FChkWfAGC.Font.Color := CLR_TEXT;
FChkWfAGC.Font.Name := UI_FONT;
FChkWfAGC.Font.Size := 9;
FChkWfAGC.OnChange := OnWfAGCNFChkChange;
FChkWfNF := TCheckBox.Create(Self);
FChkWfNF.Parent := Grp;
FChkWfNF.Caption := 'Waterfall NF';
FChkWfNF.SetBounds(PAD, R1 + STEP, 200, 22);
FChkWfNF.Checked := False;
FChkWfNF.Font.Color := CLR_TEXT;
FChkWfNF.Font.Name := UI_FONT;
FChkWfNF.Font.Size := 9;
FChkWfNF.OnChange := OnWfAGCNFChkChange;
end; end;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -1911,6 +1938,13 @@ begin FireWaterfallChange; end;
procedure TSettingsForm.OnWfThresholdChange(Sender: TObject); procedure TSettingsForm.OnWfThresholdChange(Sender: TObject);
begin FireWaterfallChange; end; begin FireWaterfallChange; end;
procedure TSettingsForm.OnWfAGCNFChkChange(Sender: TObject);
begin
if FLoading then Exit;
if not Assigned(FOnWfAGCNFChange) then Exit;
FOnWfAGCNFChange(FChkWfAGC.Checked, FChkWfNF.Checked);
end;
procedure TSettingsForm.OnRefLevelChange(Sender: TObject); procedure TSettingsForm.OnRefLevelChange(Sender: TObject);
begin FireGridChange; end; begin FireGridChange; end;
@@ -1975,6 +2009,17 @@ begin
end; end;
end; end;
procedure TSettingsForm.LoadWfAGCNF(AGC, NF: Boolean);
begin
FLoading := True;
try
FChkWfAGC.Checked := AGC;
FChkWfNF.Checked := NF;
finally
FLoading := False;
end;
end;
procedure TSettingsForm.OnVisibilityChkChange(Sender: TObject); procedure TSettingsForm.OnVisibilityChkChange(Sender: TObject);
begin begin
if FLoading then Exit; if FLoading then Exit;