From 88ceee824dd4c35f9236ea7ac032dd5ed3d16ec8 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Fri, 15 May 2026 14:59:10 +0300 Subject: [PATCH] =?UTF-8?q?Move=20WF=20AGC/NF=20from=20main=20form=20butto?= =?UTF-8?q?ns=20to=20Settings=20=E2=86=92=20Waterfall=20checkboxes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- MainForm.pas | 35 +++++++++++------------------------ SettingsForm.pas | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 6a67da3..d02a3f8 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -342,8 +342,6 @@ type BtnSNB: TFlatButton; BtnANF: TFlatButton; BtnMute: TFlatButton; - BtnWfAGC: TFlatButton; - BtnWfNF: TFlatButton; PanelSMeterRight: TPanel; PbSMeterRight: TPaintBox; @@ -577,8 +575,6 @@ type procedure ActivateXvtrBand(Idx: Integer); procedure DeactivateXvtr; // ------------------------------------------------------------------------- - procedure BtnWfAGCClick(Sender: TObject); - procedure BtnWfNFClick(Sender: TObject); procedure BtnHidePanelClick(Sender: TObject); procedure BtnSettingsClick(Sender: TObject); procedure PositionVfoOverlay; @@ -612,6 +608,7 @@ type SpecAvgTimeMS: Double); procedure ApplyWaterfallParams(WfDet, WfAvgMode: Integer; WfAvgTimeMS, WfHigh, WfLow, WfAGCOffset: Double); + procedure ApplyWfAGCNF(WfAGC, WfNF: Boolean); procedure ApplyGridParams(RefLevel, Range, GridStep: Double); // Пушит активные grid-параметры (RX или TX в зависимости от FTransmitting) // в FSpecView и сбрасывает кэш сетки. Вызывается при смене RX↔TX и при @@ -1646,7 +1643,7 @@ begin // RX controls PanelRX := TPanel.Create(Self); PanelRX.Parent := PanelLeft; - PanelRX.SetBounds(0, Y, LEFT_W, 150); + PanelRX.SetBounds(0, Y, LEFT_W, 122); PanelRX.BevelOuter := bvNone; // AGC mode — 5 кнопок в ряд @@ -1692,10 +1689,8 @@ begin BtnSNB := MakeBtn(PanelRX, 'SNB', 2*W+6, 96, W, BTN_SM, BtnSNBClick); BtnANF := MakeBtn(PanelRX, 'ANF', 3*W+8, 96, W, BTN_SM, BtnANFClick); 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 @@ -2294,8 +2289,6 @@ begin StyleButton(BtnSNB, BtnSNB.Active); StyleButton(BtnANF, BtnANF.Active); StyleButton(BtnMute, BtnMute.Active); - StyleButton(BtnWfAGC, BtnWfAGC.Active); - StyleButton(BtnWfNF, BtnWfNF.Active); StyleButton(BtnMOX, BtnMOX.Active); StyleButton(BtnTUN, BtnTUN.Active); @@ -3519,8 +3512,8 @@ begin BtnNB.Tag := EnsureRange(G_Settings.NBMode, 0, 2); UpdateNBButton; BtnSNB.Tag := Ord(G_Settings.SNBEnabled); UpdateSNBButton; BtnANF.Tag := Ord(G_Settings.ANFEnabled); UpdateANFButton; - FWfAGCEnabled := G_Settings.WfAGCEnabled; StyleButton(BtnWfAGC, FWfAGCEnabled); - FWfNFEnabled := G_Settings.WfNFEnabled; StyleButton(BtnWfNF, FWfNFEnabled); + FWfAGCEnabled := G_Settings.WfAGCEnabled; + FWfNFEnabled := G_Settings.WfNFEnabled; FWfManualHigh := G_Settings.WfManualHigh; FWfManualLow := G_Settings.WfManualLow; FWfAGCOffset := G_Settings.WfAGCOffset; @@ -4728,18 +4721,12 @@ begin end; -procedure TMainForm.BtnWfAGCClick(Sender: TObject); +procedure TMainForm.ApplyWfAGCNF(WfAGC, WfNF: Boolean); begin - FWfAGCEnabled := not FWfAGCEnabled; - StyleButton(BtnWfAGC, FWfAGCEnabled); + FWfAGCEnabled := WfAGC; + FWfNFEnabled := WfNF; FSpecView.WfAGCEnabled := FWfAGCEnabled; -end; - -procedure TMainForm.BtnWfNFClick(Sender: TObject); -begin - FWfNFEnabled := not FWfNFEnabled; - StyleButton(BtnWfNF, FWfNFEnabled); - FSpecView.WfNFEnabled := FWfNFEnabled; + FSpecView.WfNFEnabled := FWfNFEnabled; end; procedure TMainForm.BtnHidePanelClick(Sender: TObject); @@ -5116,7 +5103,6 @@ end; procedure TMainForm.SyncWebWfAGC; begin FWfAGCEnabled := FWebSyncBool; - StyleButton(BtnWfAGC, FWfAGCEnabled); FSpecView.WfAGCEnabled := FWfAGCEnabled; end; @@ -5130,7 +5116,6 @@ end; procedure TMainForm.SyncWebWfNF; begin FWfNFEnabled := FWebSyncBool; - StyleButton(BtnWfNF, FWfNFEnabled); FSpecView.WfNFEnabled := FWfNFEnabled; end; @@ -6123,6 +6108,7 @@ begin SF.OnTXChange := OnTXSettingsChange; SF.OnAlexChange := OnAlexSettingsChange; SF.OnXvtrChange := OnXvtrSettingsChange; + SF.OnWfAGCNFChange := ApplyWfAGCNF; end; SF := TSettingsForm(FSettingsForm); SF.LoadTXSettings(FTXSettings); @@ -6142,6 +6128,7 @@ begin // Перечисляем PA устройства SF.RefreshAudioDevices(FAudioOut, FAudioIn); SF.LoadVisibility(FShowSpectrum, FShowWaterfall); + SF.LoadWfAGCNF(FWfAGCEnabled, FWfNFEnabled); SF.LoadFPS(FDisplayFPS); SF.LoadLightTheme(FLightTheme); SF.LoadFreqMhzDigits(FFreqMhzDigits); diff --git a/SettingsForm.pas b/SettingsForm.pas index 501b341..1ce5d47 100644 --- a/SettingsForm.pas +++ b/SettingsForm.pas @@ -47,6 +47,7 @@ type TOnVisibilityChange = procedure(ShowSpectrum, ShowWaterfall: Boolean) of object; TOnFPSChange = procedure(FPS: Integer) of object; TOnThemeChange = procedure(LightTheme: Boolean) of object; + TOnWfAGCNFChange = procedure(WfAGC, WfNF: Boolean) of object; TOnCATChange = procedure( const SerEnabled: array of Boolean; const SerPort: array of string; @@ -101,6 +102,8 @@ type FWfHigh: TFloatSpinEdit; FWfLow: TFloatSpinEdit; FWfAGCOffset: TFloatSpinEdit; + FChkWfAGC: TCheckBox; + FChkWfNF: TCheckBox; FEdRefLevel: TEdit; FEdRange: TEdit; FCmbGridStep: TComboBox; @@ -246,6 +249,7 @@ type FOnVisibilityChange: TOnVisibilityChange; FOnFPSChange: TOnFPSChange; FOnThemeChange: TOnThemeChange; + FOnWfAGCNFChange: TOnWfAGCNFChange; FOnFreqMhzDigitsChange: TOnFreqMhzDigitsChange; FOnTXChange: TOnTXSettingsChange; @@ -293,6 +297,7 @@ type procedure OnWfAvgModeChange(Sender: TObject); procedure OnWfAvgTimeChange(Sender: TObject); procedure OnWfThresholdChange(Sender: TObject); + procedure OnWfAGCNFChkChange(Sender: TObject); procedure OnRefLevelChange(Sender: TObject); procedure OnRangeChange(Sender: TObject); procedure OnGridStepChange(Sender: TObject); @@ -349,6 +354,7 @@ type procedure LoadTXSettings(const T: TTXSettings); procedure LoadAlexSettings(const A: TAlexSettings; BoardType: Integer); procedure LoadXvtrSettings(const X: TXvtrSettings); + procedure LoadWfAGCNF(AGC, NF: Boolean); property OnCATChange: TOnCATChange read FOnCATChange write FOnCATChange; property OnAlexChange: TOnAlexChange read FOnAlexChange write FOnAlexChange; @@ -364,6 +370,7 @@ type property OnThemeChange: TOnThemeChange read FOnThemeChange write FOnThemeChange; property OnFreqMhzDigitsChange: TOnFreqMhzDigitsChange read FOnFreqMhzDigitsChange write FOnFreqMhzDigitsChange; property OnTXChange: TOnTXSettingsChange read FOnTXChange write FOnTXChange; + property OnWfAGCNFChange: TOnWfAGCNFChange read FOnWfAGCNFChange write FOnWfAGCNFChange; end; implementation @@ -934,6 +941,26 @@ begin 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); 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; // --------------------------------------------------------------------------- @@ -1911,6 +1938,13 @@ begin FireWaterfallChange; end; procedure TSettingsForm.OnWfThresholdChange(Sender: TObject); 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); begin FireGridChange; end; @@ -1975,6 +2009,17 @@ begin 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); begin if FLoading then Exit;