mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
start work tx
This commit is contained in:
@@ -30,6 +30,10 @@ uses
|
||||
FlatButton, AudioOutput, AudioInput;
|
||||
|
||||
type
|
||||
// PA: MaxPower в Вт, BandCal[0..10] — калибровка 38.8..100.0 на диапазон
|
||||
TOnPASettingsChange = procedure(MaxPower: Double;
|
||||
const BandCal: array of Double) of object;
|
||||
|
||||
TOnDisplayParamChange = procedure(FFTSize, WindowType, SpecDetector,
|
||||
SpecAvgMode, SpecAvgCount: Integer; SpecBackmult: Double) of object;
|
||||
TOnWaterfallParamChange = procedure(WfDetector, WfAvgMode, WfAvgCount: Integer;
|
||||
@@ -92,10 +96,15 @@ type
|
||||
FChkShowWaterfall: TCheckBox;
|
||||
FCmbFPS: TComboBox;
|
||||
|
||||
// ---- PA Settings tab controls ----
|
||||
FEdMaxPower: TSpinEdit;
|
||||
FEdBandCal: array[0..10] of TFloatSpinEdit;
|
||||
|
||||
// ---- Close button ----
|
||||
FBtnClose: TFlatButton;
|
||||
|
||||
// ---- Callbacks ----
|
||||
FOnPAChange: TOnPASettingsChange;
|
||||
FOnDisplayChange: TOnDisplayParamChange;
|
||||
FOnWaterfallChange: TOnWaterfallParamChange;
|
||||
FOnGridChange: TOnGridParamChange;
|
||||
@@ -111,6 +120,7 @@ type
|
||||
procedure BuildAudioTab;
|
||||
procedure BuildDisplayTab;
|
||||
procedure BuildRX1Tab;
|
||||
procedure BuildPATab;
|
||||
procedure ApplyTheme;
|
||||
|
||||
// Helpers
|
||||
@@ -139,6 +149,8 @@ type
|
||||
procedure OnTXDevChange(Sender: TObject);
|
||||
procedure OnVisibilityChkChange(Sender: TObject);
|
||||
procedure OnFPSCmbChange(Sender: TObject);
|
||||
procedure OnMaxPowerChange(Sender: TObject);
|
||||
procedure OnBandCalChange(Sender: TObject);
|
||||
procedure BtnCloseClick(Sender: TObject);
|
||||
|
||||
procedure FireDisplayChange;
|
||||
@@ -171,7 +183,10 @@ type
|
||||
procedure LoadVisibility(ShowSpectrum, ShowWaterfall: Boolean);
|
||||
// Загрузить текущий FPS (без fire события)
|
||||
procedure LoadFPS(FPS: Integer);
|
||||
// Загрузить PA настройки (без fire событий)
|
||||
procedure LoadPASettings(MaxPower: Double; const BandCal: array of Double);
|
||||
|
||||
property OnPAChange: TOnPASettingsChange read FOnPAChange write FOnPAChange;
|
||||
property OnDisplayChange: TOnDisplayParamChange read FOnDisplayChange write FOnDisplayChange;
|
||||
property OnWaterfallChange: TOnWaterfallParamChange read FOnWaterfallChange write FOnWaterfallChange;
|
||||
property OnGridChange: TOnGridParamChange read FOnGridChange write FOnGridChange;
|
||||
@@ -216,6 +231,9 @@ const
|
||||
FPS_VALUES: array[0..5] of Integer = (5, 10, 15, 20, 25, 30);
|
||||
FPS_NAMES: array[0..5] of string = ('5 fps','10 fps','15 fps','20 fps','25 fps','30 fps');
|
||||
|
||||
PA_BAND_NAMES: array[0..10] of string =
|
||||
('160m','80m','60m','40m','30m','20m','17m','15m','12m','10m','6m');
|
||||
|
||||
{ TSettingsForm }
|
||||
|
||||
constructor TSettingsForm.Create(AOwner: TComponent);
|
||||
@@ -312,6 +330,7 @@ begin
|
||||
|
||||
BuildAudioTab;
|
||||
BuildDisplayTab;
|
||||
BuildPATab;
|
||||
|
||||
// Close button
|
||||
FBtnClose := TFlatButton.Create(Self);
|
||||
@@ -1030,6 +1049,160 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// BuildPATab — вкладка PA Settings: MaxPower + per-band calibration
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
procedure TSettingsForm.BuildPATab;
|
||||
const
|
||||
LBL_W = 46; // ширина метки диапазона
|
||||
ED_W = 72; // ширина SpinEdit (с кнопками)
|
||||
COL_W = LBL_W + ED_W + 8; // ширина одной пары
|
||||
COLS = 4; // колонок на строку
|
||||
ROW_H = 32; // высота строки (spin edits чуть выше plain edit)
|
||||
GRP_PAD = 12; // отступ внутри группы
|
||||
GRP_TOP = 24; // высота caption группы
|
||||
ROWS = 3; // строк для 11 диапазонов (ceil(11/4))
|
||||
|
||||
function MakeFloatSpin(AParent: TWinControl; ALeft, ATop: Integer;
|
||||
AChange: TNotifyEvent): TFloatSpinEdit;
|
||||
var E: TFloatSpinEdit;
|
||||
begin
|
||||
E := TFloatSpinEdit.Create(Self);
|
||||
E.Parent := AParent;
|
||||
E.SetBounds(ALeft, ATop, ED_W, BTN_H + 2);
|
||||
E.Color := CLR_PANEL;
|
||||
E.Font.Color := CLR_TEXT;
|
||||
E.Font.Name := 'Courier New';
|
||||
E.Font.Size := 8;
|
||||
E.MinValue := 38.8;
|
||||
E.MaxValue := 100.0;
|
||||
E.Increment := 0.1;
|
||||
E.DecimalPlaces := 1;
|
||||
E.Value := 100.0;
|
||||
E.OnChange := AChange;
|
||||
Result := E;
|
||||
end;
|
||||
|
||||
var
|
||||
Grp: TGroupBox;
|
||||
Sep: TPanel;
|
||||
Lbl: TLabel;
|
||||
Spin: TSpinEdit;
|
||||
i, r, c, X, Y: Integer;
|
||||
begin
|
||||
// ── Top padding ───────────────────────────────────────────────────────────
|
||||
Sep := TPanel.Create(Self);
|
||||
Sep.Parent := FTabPA;
|
||||
Sep.BevelOuter := bvNone;
|
||||
Sep.Color := CLR_BG;
|
||||
Sep.Align := alTop;
|
||||
Sep.Height := 10;
|
||||
|
||||
// ── Group Power & Calibration ─────────────────────────────────────────────
|
||||
Grp := TGroupBox.Create(Self);
|
||||
Grp.Parent := FTabPA;
|
||||
Grp.Caption := 'Power & Calibration';
|
||||
Grp.Color := CLR_GROUP;
|
||||
Grp.Font.Color := CLR_ACCENT;
|
||||
Grp.Font.Name := 'Courier New';
|
||||
Grp.Font.Size := 8;
|
||||
Grp.Align := alTop;
|
||||
Grp.Height := GRP_TOP + ROW_H + 20 + ROWS * ROW_H + GRP_PAD + 16;
|
||||
Grp.AutoSize := False;
|
||||
|
||||
// Max Power строка
|
||||
Lbl := TLabel.Create(Self);
|
||||
Lbl.Parent := Grp;
|
||||
Lbl.Caption := 'Max Power (W):';
|
||||
Lbl.SetBounds(GRP_PAD, GRP_TOP + 6, 120, 18);
|
||||
Lbl.Font.Color := CLR_TEXTDIM;
|
||||
Lbl.Font.Name := 'Courier New';
|
||||
Lbl.Font.Size := 8;
|
||||
|
||||
Spin := TSpinEdit.Create(Self);
|
||||
Spin.Parent := Grp;
|
||||
Spin.SetBounds(GRP_PAD + 124, GRP_TOP, ED_W, BTN_H + 2);
|
||||
Spin.Color := CLR_PANEL;
|
||||
Spin.Font.Color := CLR_TEXT;
|
||||
Spin.Font.Name := 'Courier New';
|
||||
Spin.Font.Size := 8;
|
||||
Spin.MinValue := 5;
|
||||
Spin.MaxValue := 200;
|
||||
Spin.Increment := 1;
|
||||
Spin.Value := 100;
|
||||
Spin.OnChange := OnMaxPowerChange;
|
||||
FEdMaxPower := Spin;
|
||||
|
||||
// Метка для калибровки
|
||||
Lbl := TLabel.Create(Self);
|
||||
Lbl.Parent := Grp;
|
||||
Lbl.Caption := 'Calibration per band (38.8 ... 100.0):';
|
||||
Lbl.SetBounds(GRP_PAD, GRP_TOP + ROW_H + 8, 280, 18);
|
||||
Lbl.Font.Color := CLR_TEXTDIM;
|
||||
Lbl.Font.Name := 'Courier New';
|
||||
Lbl.Font.Size := 8;
|
||||
|
||||
// Grid 4 columns × 3 rows for 11 bands
|
||||
for i := 0 to 10 do
|
||||
begin
|
||||
r := i div COLS;
|
||||
c := i mod COLS;
|
||||
X := GRP_PAD + c * (COL_W + 4);
|
||||
Y := GRP_TOP + ROW_H + 26 + r * ROW_H;
|
||||
|
||||
Lbl := TLabel.Create(Self);
|
||||
Lbl.Parent := Grp;
|
||||
Lbl.Caption := PA_BAND_NAMES[i] + ':';
|
||||
Lbl.SetBounds(X, Y + 5, LBL_W, 18);
|
||||
Lbl.Font.Color := CLR_TEXTDIM;
|
||||
Lbl.Font.Name := 'Courier New';
|
||||
Lbl.Font.Size := 8;
|
||||
|
||||
FEdBandCal[i] := MakeFloatSpin(Grp, X + LBL_W, Y, OnBandCalChange);
|
||||
FEdBandCal[i].Tag := i;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.LoadPASettings(MaxPower: Double;
|
||||
const BandCal: array of Double);
|
||||
var i, n: Integer;
|
||||
begin
|
||||
FLoading := True;
|
||||
try
|
||||
FEdMaxPower.Value := Round(EnsureRange(MaxPower, 5.0, 200.0));
|
||||
n := Min(10, High(BandCal));
|
||||
for i := 0 to n do
|
||||
FEdBandCal[i].Value := EnsureRange(BandCal[i], 38.8, 100.0);
|
||||
finally
|
||||
FLoading := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.OnMaxPowerChange(Sender: TObject);
|
||||
var
|
||||
BandCal: array[0..10] of Double;
|
||||
i: Integer;
|
||||
begin
|
||||
if FLoading then Exit;
|
||||
if not Assigned(FOnPAChange) then Exit;
|
||||
for i := 0 to 10 do
|
||||
BandCal[i] := FEdBandCal[i].Value;
|
||||
FOnPAChange(FEdMaxPower.Value, BandCal);
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.OnBandCalChange(Sender: TObject);
|
||||
var
|
||||
BandCal: array[0..10] of Double;
|
||||
i: Integer;
|
||||
begin
|
||||
if FLoading then Exit;
|
||||
if not Assigned(FOnPAChange) then Exit;
|
||||
for i := 0 to 10 do
|
||||
BandCal[i] := FEdBandCal[i].Value;
|
||||
FOnPAChange(FEdMaxPower.Value, BandCal);
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.BtnCloseClick(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
|
||||
Reference in New Issue
Block a user