mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
Improve settings layout and TX equalizer
This commit is contained in:
+72
-76
@@ -27,7 +27,7 @@ uses
|
||||
Classes, SysUtils, Math,
|
||||
Forms, Controls, Graphics, Dialogs,
|
||||
StdCtrls, ExtCtrls, Spin,
|
||||
FlatButton, AudioOutput, AudioInput, AppTheme, Settings;
|
||||
FlatButton, EqualizerControl, AudioOutput, AudioInput, AppTheme, Settings;
|
||||
|
||||
type
|
||||
// PA: MaxPower в Вт, BandCal[0..10] — калибровка 38.8..100.0 на диапазон
|
||||
@@ -164,10 +164,7 @@ type
|
||||
FEdTXPHRStages: TSpinEdit;
|
||||
FEdTXPHRFreq: TFloatSpinEdit;
|
||||
// EQ
|
||||
FChkTXEQOn: TCheckBox;
|
||||
FCmbTXEQBands: TComboBox;
|
||||
FEdTXEQGain: array[0..10] of TFloatSpinEdit;
|
||||
FEdTXEQFreq: array[0..10] of TFloatSpinEdit;
|
||||
FTXEQControl: TEqualizerControl;
|
||||
// AM
|
||||
FEdTXAMCarrier: TFloatSpinEdit;
|
||||
// FM
|
||||
@@ -1007,10 +1004,10 @@ const
|
||||
PAD = 18;
|
||||
LW = 150;
|
||||
CX = PAD + LW + 12;
|
||||
STEP = 32;
|
||||
STEP = 42;
|
||||
R1 = 42;
|
||||
SPW = 96;
|
||||
CMB_W = 200;
|
||||
GRP_W = 760;
|
||||
|
||||
var
|
||||
Grp: TPanel;
|
||||
@@ -1090,7 +1087,7 @@ begin
|
||||
// ---- Mic options ----
|
||||
// Mic source (Radio vs SoundCard) определяется автоматически по источнику PTT.
|
||||
Y := 86;
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Microphone', MARGIN, Y, 700, 188);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Microphone', MARGIN, Y, GRP_W, 188);
|
||||
|
||||
// Row 0: Mic jack selector | Boost (Mic In) или LineInGain (Line In) | Bias | PTT
|
||||
MakeLbl(Grp, 'Mic jack', PAD, R1 + 5, 65);
|
||||
@@ -1124,7 +1121,7 @@ begin
|
||||
|
||||
// ---- Tune (TUN button) ----
|
||||
Inc(Y, 188 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Tune (TUN)', MARGIN, Y, 700, 100);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Tune (TUN)', MARGIN, Y, GRP_W, 100);
|
||||
|
||||
MakeLbl(Grp, 'Tune level (%)', PAD, R1 + 5, LW);
|
||||
FEdTUNLevel := MkSpin(Grp, CX, R1, 0, 100, 10);
|
||||
@@ -1133,7 +1130,7 @@ begin
|
||||
|
||||
// ---- TX bandpass filter ----
|
||||
Inc(Y, 100 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Filter (bandpass)', MARGIN, Y, 700, 200);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Filter (bandpass)', MARGIN, Y, GRP_W, 220);
|
||||
|
||||
MakeLbl(Grp, 'Low cut (Hz)', PAD, R1 + 5, LW);
|
||||
FEdTXFiltLow := MkSpin(Grp, CX, R1, 0, 8000, 100);
|
||||
@@ -1157,8 +1154,8 @@ begin
|
||||
FCmbTXFiltWindow.ItemIndex := 1;
|
||||
|
||||
// ---- Compressor / Leveler / ALC / Phase Rotator ----
|
||||
Inc(Y, 200 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Dynamic processing', MARGIN, Y, 700, 220);
|
||||
Inc(Y, 220 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Dynamic processing', MARGIN, Y, GRP_W, 220);
|
||||
|
||||
FChkTXCompOn := MkChk(Grp, PAD, R1, 220, 'Compressor');
|
||||
MakeLbl(Grp, 'Gain (dB)', PAD + 230, R1 + 5, 80);
|
||||
@@ -1184,31 +1181,20 @@ begin
|
||||
|
||||
// ---- TX EQ ----
|
||||
Inc(Y, 220 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Equalizer', MARGIN, Y, 700, 320);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Equalizer', MARGIN, Y, GRP_W, 390);
|
||||
|
||||
FChkTXEQOn := MkChk(Grp, PAD, R1, 200, 'Enable EQ');
|
||||
MakeLbl(Grp, 'Bands', PAD + 230, R1 + 5, 60);
|
||||
FCmbTXEQBands := MkCmb(Grp, PAD + 290, R1, 80);
|
||||
FCmbTXEQBands.Items.AddStrings(['3','10']);
|
||||
FCmbTXEQBands.ItemIndex := 1;
|
||||
|
||||
// 11 строк: [0]=Preamp, [1..10]=полосы. Freq+Gain в одной строке.
|
||||
for i := 0 to 10 do
|
||||
begin
|
||||
if i = 0 then
|
||||
MakeLbl(Grp, 'Preamp (dB)', PAD, R1 + STEP + i * 22 + 3, 100)
|
||||
else
|
||||
MakeLbl(Grp, Format('Band %d', [i]), PAD, R1 + STEP + i * 22 + 3, 80);
|
||||
FEdTXEQFreq[i] := MkFloat(Grp, PAD + 90, R1 + STEP + i * 22, 0.0, 0.0, 20000.0, 10.0);
|
||||
FEdTXEQFreq[i].Width := 100;
|
||||
MakeLbl(Grp, 'gain', PAD + 200, R1 + STEP + i * 22 + 3, 30);
|
||||
FEdTXEQGain[i] := MkFloat(Grp, PAD + 230, R1 + STEP + i * 22, 0.0, -15.0, 15.0, 0.5);
|
||||
FEdTXEQGain[i].Width := 80;
|
||||
end;
|
||||
FTXEQControl := TEqualizerControl.Create(Self);
|
||||
FTXEQControl.Parent := Grp;
|
||||
FTXEQControl.SetBounds(PAD, R1, GRP_W - 2 * PAD, 326);
|
||||
FTXEQControl.Font.Name := UI_FONT;
|
||||
FTXEQControl.Font.Size := 9;
|
||||
FTXEQControl.SetThemeColors(CLR_PANEL, TColor($00202020), CLR_BORDER,
|
||||
TColor($00383838), CLR_TEXT, CLR_TEXTDIM, CLR_ACCENT, TColor($0055DDEE));
|
||||
FTXEQControl.OnChange := OnTXAnyChange;
|
||||
|
||||
// ---- AM / FM / CTCSS ----
|
||||
Inc(Y, 320 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'AM / FM / CTCSS', MARGIN, Y, 700, 220);
|
||||
Inc(Y, 390 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'AM / FM / CTCSS', MARGIN, Y, GRP_W, 260);
|
||||
|
||||
MakeLbl(Grp, 'AM carrier level', PAD, R1 + 5, LW);
|
||||
FEdTXAMCarrier := MkFloat(Grp, CX, R1, 0.5, 0.0, 1.0, 0.05);
|
||||
@@ -1231,8 +1217,8 @@ begin
|
||||
FEdTXCTCSSFreq := MkFloat(Grp, PAD + 320, R1 + 4 * STEP, 100.0, 50.0, 300.0, 0.1);
|
||||
|
||||
// ---- TX Display (отдельный analyzer для TX-спектра/водопада) ----
|
||||
Inc(Y, 220 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Display (Analyzer)', MARGIN, Y, 700, 290);
|
||||
Inc(Y, 260 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Display (Analyzer)', MARGIN, Y, GRP_W, 318);
|
||||
|
||||
MakeLbl(Grp, 'FFT size', PAD, R1 + 5, LW);
|
||||
FCmbTXFFT := MkCmb(Grp, CX, R1, 140);
|
||||
@@ -1269,8 +1255,8 @@ begin
|
||||
FEdTXWfAvgTime := MkFloat(Grp, PAD + 540, R1 + 5 * STEP, 120.0, 1.0, 5000.0, 1.0);
|
||||
|
||||
// ---- TX Grid (RefLevel / Range / GridStep — отдельные от RX) ----
|
||||
Inc(Y, 290 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Grid', MARGIN, Y, 700, 170);
|
||||
Inc(Y, 318 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'TX Grid', MARGIN, Y, GRP_W, 170);
|
||||
|
||||
MakeLbl(Grp, 'Reference level', PAD, R1 + 5, LW);
|
||||
FEdTXRefLevel := TEdit.Create(Self);
|
||||
@@ -1330,13 +1316,16 @@ begin
|
||||
if FChkTXPHROn <> nil then FTX.PhaseRotOn := FChkTXPHROn.Checked;
|
||||
if FEdTXPHRStages <> nil then FTX.PhaseRotStages := FEdTXPHRStages.Value;
|
||||
if FEdTXPHRFreq <> nil then FTX.PhaseRotFreq := FEdTXPHRFreq.Value;
|
||||
if FChkTXEQOn <> nil then FTX.EQOn := FChkTXEQOn.Checked;
|
||||
if FCmbTXEQBands <> nil then
|
||||
if FCmbTXEQBands.ItemIndex = 0 then FTX.EQNumBands := 3 else FTX.EQNumBands := 10;
|
||||
for i := 0 to 10 do
|
||||
if FTXEQControl <> nil then
|
||||
begin
|
||||
if FEdTXEQGain[i] <> nil then FTX.EQGains[i] := FEdTXEQGain[i].Value;
|
||||
if FEdTXEQFreq[i] <> nil then FTX.EQFreqs[i] := FEdTXEQFreq[i].Value;
|
||||
FTX.EQOn := FTXEQControl.EQEnabled;
|
||||
FTX.EQNumBands := FTXEQControl.BandCount;
|
||||
FTX.EQGains[0] := FTXEQControl.PreampGain;
|
||||
for i := 1 to 10 do
|
||||
begin
|
||||
FTX.EQGains[i] := FTXEQControl.BandGain[i];
|
||||
FTX.EQFreqs[i] := FTXEQControl.BandFreq[i];
|
||||
end;
|
||||
end;
|
||||
if FEdTXAMCarrier <> nil then FTX.AMCarrierLevel := FEdTXAMCarrier.Value;
|
||||
if FEdTXFMDev <> nil then FTX.FMDeviation := FEdTXFMDev.Value;
|
||||
@@ -1443,14 +1432,13 @@ begin
|
||||
if FChkTXPHROn <> nil then FChkTXPHROn.Checked := T.PhaseRotOn;
|
||||
if FEdTXPHRStages <> nil then FEdTXPHRStages.Value := T.PhaseRotStages;
|
||||
if FEdTXPHRFreq <> nil then FEdTXPHRFreq.Value := T.PhaseRotFreq;
|
||||
if FChkTXEQOn <> nil then FChkTXEQOn.Checked := T.EQOn;
|
||||
if FCmbTXEQBands <> nil then
|
||||
if T.EQNumBands <= 3 then FCmbTXEQBands.ItemIndex := 0
|
||||
else FCmbTXEQBands.ItemIndex := 1;
|
||||
for i := 0 to 10 do
|
||||
if FTXEQControl <> nil then
|
||||
begin
|
||||
if FEdTXEQGain[i] <> nil then FEdTXEQGain[i].Value := T.EQGains[i];
|
||||
if FEdTXEQFreq[i] <> nil then FEdTXEQFreq[i].Value := T.EQFreqs[i];
|
||||
FTXEQControl.EQEnabled := T.EQOn;
|
||||
FTXEQControl.BandCount := T.EQNumBands;
|
||||
FTXEQControl.PreampGain := T.EQGains[0];
|
||||
for i := 1 to 10 do
|
||||
FTXEQControl.SetBand(i, T.EQFreqs[i], T.EQGains[i]);
|
||||
end;
|
||||
if FEdTXAMCarrier <> nil then FEdTXAMCarrier.Value := T.AMCarrierLevel;
|
||||
if FEdTXFMDev <> nil then FEdTXFMDev.Value := T.FMDeviation;
|
||||
@@ -1523,10 +1511,13 @@ end;
|
||||
procedure TSettingsForm.BuildPATab;
|
||||
const
|
||||
MARGIN = 22;
|
||||
LBL_W = 46;
|
||||
LBL_W = 54;
|
||||
ED_W = 72;
|
||||
COL_W = LBL_W + ED_W + 8;
|
||||
COL_W = LBL_W + ED_W + 14;
|
||||
COLS = 4;
|
||||
VHF_LBL_W = 170;
|
||||
VHF_COL_W = VHF_LBL_W + ED_W + 48;
|
||||
VHF_COLS = 2;
|
||||
ROW_H = 32;
|
||||
GRP_PAD = 18;
|
||||
R1 = 42;
|
||||
@@ -1579,7 +1570,7 @@ begin
|
||||
Font.Color := CLR_TEXTDIM;
|
||||
end;
|
||||
|
||||
Grp := MakeGroupPanel(FPagePA, 'Power && Calibration', MARGIN, 86, 650, GRP_H);
|
||||
Grp := MakeGroupPanel(FPagePA, 'Power && Calibration', MARGIN, 86, 700, GRP_H);
|
||||
|
||||
// Max Power
|
||||
Lbl := TLabel.Create(Self);
|
||||
@@ -1635,33 +1626,35 @@ begin
|
||||
|
||||
// ── VHF Calibration (Transverters) ──────────────────────────────────────
|
||||
Grp := MakeGroupPanel(FPagePA, 'VHF Calibration (Transverters)',
|
||||
MARGIN, 86 + GRP_H + 14, 650, 2 * ROW_H + 62);
|
||||
MARGIN, 86 + GRP_H + 14, 700, R1 + 4 * ROW_H + 44);
|
||||
|
||||
Lbl := TLabel.Create(Self);
|
||||
Lbl.Parent := Grp;
|
||||
Lbl.Caption := 'Calibration per transverter slot, 38.8 ... 100.0';
|
||||
Lbl.SetBounds(GRP_PAD, 16, 400, 18);
|
||||
Lbl.SetBounds(GRP_PAD, R1, 420, 18);
|
||||
Lbl.Font.Color := CLR_TEXTDIM;
|
||||
Lbl.Font.Name := UI_FONT;
|
||||
Lbl.Font.Size := 9;
|
||||
|
||||
for i := 0 to CFG_XVTR_COUNT - 1 do
|
||||
begin
|
||||
r := i div COLS;
|
||||
c := i mod COLS;
|
||||
X := GRP_PAD + c * (COL_W + 4);
|
||||
Y := 38 + r * ROW_H;
|
||||
r := i div VHF_COLS;
|
||||
c := i mod VHF_COLS;
|
||||
X := GRP_PAD + c * VHF_COL_W;
|
||||
Y := R1 + 24 + r * ROW_H;
|
||||
|
||||
Lbl := TLabel.Create(Self);
|
||||
Lbl.Parent := Grp;
|
||||
Lbl.Caption := 'VHF' + IntToStr(i) + ':';
|
||||
Lbl.SetBounds(X, Y + 5, LBL_W, 18);
|
||||
Lbl.AutoSize := False;
|
||||
Lbl.SetBounds(X, Y + 5, VHF_LBL_W, 18);
|
||||
Lbl.Font.Color := CLR_TEXTDIM;
|
||||
Lbl.Font.Name := UI_FONT;
|
||||
Lbl.Font.Size := 9;
|
||||
Lbl.ShowHint := True;
|
||||
FVHFCalLabels[i] := Lbl;
|
||||
|
||||
FEdVHFCal[i] := MakeFloatSpin(Grp, X + LBL_W, Y, OnVHFCalEdit);
|
||||
FEdVHFCal[i] := MakeFloatSpin(Grp, X + VHF_LBL_W + 8, Y, OnVHFCalEdit);
|
||||
FEdVHFCal[i].Tag := i;
|
||||
end;
|
||||
|
||||
@@ -1673,8 +1666,8 @@ const
|
||||
GRP_PAD = 18;
|
||||
LBL_W = 110;
|
||||
ED_W = 200;
|
||||
BTN_H = 22;
|
||||
ROW_H = 28;
|
||||
ROW_H = 42;
|
||||
R1 = 42;
|
||||
var
|
||||
Grp: TPanel;
|
||||
Chk: TCheckBox;
|
||||
@@ -1694,12 +1687,12 @@ begin
|
||||
end;
|
||||
|
||||
// ── ADC ───────────────────────────────────────────────────────────────────
|
||||
Grp := MakeGroupPanel(FPageAdvanced, 'ADC', MARGIN, 62, 420, 82);
|
||||
Grp := MakeGroupPanel(FPageAdvanced, 'ADC', MARGIN, 86, 420, 128);
|
||||
|
||||
Chk := TCheckBox.Create(Self);
|
||||
Chk.Parent := Grp;
|
||||
Chk.Caption := 'Dither Enabled';
|
||||
Chk.SetBounds(GRP_PAD, 24, 260, BTN_H);
|
||||
Chk.SetBounds(GRP_PAD, R1, 260, 22);
|
||||
Chk.Font.Name := UI_FONT;
|
||||
Chk.Font.Size := 9;
|
||||
Chk.Font.Color := CLR_TEXT;
|
||||
@@ -1710,7 +1703,7 @@ begin
|
||||
Chk := TCheckBox.Create(Self);
|
||||
Chk.Parent := Grp;
|
||||
Chk.Caption := 'Random Enabled';
|
||||
Chk.SetBounds(GRP_PAD, 50, 260, BTN_H);
|
||||
Chk.SetBounds(GRP_PAD, R1 + ROW_H, 260, 22);
|
||||
Chk.Font.Name := UI_FONT;
|
||||
Chk.Font.Size := 9;
|
||||
Chk.Font.Color := CLR_TEXT;
|
||||
@@ -1719,13 +1712,13 @@ begin
|
||||
FChkRandom := Chk;
|
||||
|
||||
// ── Web Server ────────────────────────────────────────────────────────────
|
||||
Grp := MakeGroupPanel(FPageAdvanced, 'Web Server', MARGIN, 160, 420, 196);
|
||||
Grp := MakeGroupPanel(FPageAdvanced, 'Web Server', MARGIN, 230, 500, 252);
|
||||
|
||||
Y := 24;
|
||||
Y := R1;
|
||||
Chk := TCheckBox.Create(Self);
|
||||
Chk.Parent := Grp;
|
||||
Chk.Caption := 'Enabled';
|
||||
Chk.SetBounds(GRP_PAD, Y, 260, BTN_H);
|
||||
Chk.SetBounds(GRP_PAD, Y, 260, 22);
|
||||
Chk.Font.Name := UI_FONT;
|
||||
Chk.Font.Size := 9;
|
||||
Chk.Font.Color := CLR_TEXT;
|
||||
@@ -1733,11 +1726,11 @@ begin
|
||||
Chk.OnChange := OnWebAnyChange;
|
||||
FChkWebEnabled := Chk;
|
||||
|
||||
Y := Y + ROW_H + 4;
|
||||
Y := Y + ROW_H;
|
||||
MakeLbl(Grp, 'Port:', GRP_PAD, Y + 4, LBL_W);
|
||||
Spin := TSpinEdit.Create(Self);
|
||||
Spin.Parent := Grp;
|
||||
Spin.SetBounds(GRP_PAD + LBL_W, Y, 90, BTN_H + 2);
|
||||
Spin.SetBounds(GRP_PAD + LBL_W + 12, Y, 90, BTN_H);
|
||||
Spin.Color := CLR_INPUT;
|
||||
Spin.Font.Color := CLR_INPUT_TEXT;
|
||||
Spin.Font.Name := UI_FONT;
|
||||
@@ -1752,7 +1745,7 @@ begin
|
||||
MakeLbl(Grp, 'Interface:', GRP_PAD, Y + 4, LBL_W);
|
||||
Ed := TEdit.Create(Self);
|
||||
Ed.Parent := Grp;
|
||||
Ed.SetBounds(GRP_PAD + LBL_W, Y, ED_W, BTN_H + 2);
|
||||
Ed.SetBounds(GRP_PAD + LBL_W + 12, Y, ED_W, BTN_H);
|
||||
Ed.Color := CLR_INPUT;
|
||||
Ed.Font.Color := CLR_INPUT_TEXT;
|
||||
Ed.Font.Name := UI_FONT;
|
||||
@@ -1765,7 +1758,7 @@ begin
|
||||
MakeLbl(Grp, 'Username:', GRP_PAD, Y + 4, LBL_W);
|
||||
Ed := TEdit.Create(Self);
|
||||
Ed.Parent := Grp;
|
||||
Ed.SetBounds(GRP_PAD + LBL_W, Y, ED_W, BTN_H + 2);
|
||||
Ed.SetBounds(GRP_PAD + LBL_W + 12, Y, ED_W, BTN_H);
|
||||
Ed.Color := CLR_INPUT;
|
||||
Ed.Font.Color := CLR_INPUT_TEXT;
|
||||
Ed.Font.Name := UI_FONT;
|
||||
@@ -1778,7 +1771,7 @@ begin
|
||||
MakeLbl(Grp, 'Password:', GRP_PAD, Y + 4, LBL_W);
|
||||
Ed := TEdit.Create(Self);
|
||||
Ed.Parent := Grp;
|
||||
Ed.SetBounds(GRP_PAD + LBL_W, Y, ED_W, BTN_H + 2);
|
||||
Ed.SetBounds(GRP_PAD + LBL_W + 12, Y, ED_W, BTN_H);
|
||||
Ed.Color := CLR_INPUT;
|
||||
Ed.Font.Color := CLR_INPUT_TEXT;
|
||||
Ed.Font.Name := UI_FONT;
|
||||
@@ -1853,7 +1846,9 @@ procedure TSettingsForm.ApplyTheme(const T: TAppTheme);
|
||||
for i := 0 to C.ControlCount - 1 do
|
||||
begin
|
||||
Ctrl := C.Controls[i];
|
||||
if Ctrl is TFlatButton then
|
||||
if Ctrl is TEqualizerControl then
|
||||
TEqualizerControl(Ctrl).SetAppTheme(T)
|
||||
else if Ctrl is TFlatButton then
|
||||
StyleBtn(TFlatButton(Ctrl))
|
||||
else if Ctrl is TScrollBox then
|
||||
begin
|
||||
@@ -3219,6 +3214,7 @@ begin
|
||||
FVHFCalLabels[i].Caption := 'VHF' + IntToStr(i) + ' (' + X.Entries[i].ButtonText + '):'
|
||||
else
|
||||
FVHFCalLabels[i].Caption := 'VHF' + IntToStr(i) + ':';
|
||||
FVHFCalLabels[i].Hint := FVHFCalLabels[i].Caption;
|
||||
end;
|
||||
end;
|
||||
if FChkXvtrTunPwr <> nil then FChkXvtrTunPwr.Checked := X.UseXVTRTunePower;
|
||||
|
||||
Reference in New Issue
Block a user