mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
feat: drive slider value label — % (openHPSDR) / dB (Pluto)
Show current drive value next to the slider: percent for openHPSDR, TX attenuation in dB for Pluto (via controller PlutoTxAttForDrive; unit flips on backend connect). Refreshed on drive change, device render, and TX max-att change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+24
-1
@@ -278,6 +278,7 @@ type
|
||||
|
||||
PanelTX: TPanel;
|
||||
LblDrv: TLabel;
|
||||
LblDrvVal: TLabel; // значение drive: % (openHPSDR) или дБ (Pluto)
|
||||
TrkDrive: TFlatSlider;
|
||||
BtnMOX: TFlatButton;
|
||||
BtnTUN: TFlatButton;
|
||||
@@ -492,6 +493,7 @@ type
|
||||
procedure OnVfoOverlayInvalidate(Sender: TObject);
|
||||
procedure PbSpectrumDblClick(Sender: TObject);
|
||||
procedure TrkDriveChange(Sender: TObject);
|
||||
procedure UpdateDriveLabel; // % (openHPSDR) / дБ (Pluto) рядом с ползунком drive
|
||||
procedure TrkVolumeChange(Sender: TObject);
|
||||
function CalcDriveByte: Byte;
|
||||
function ActiveTXFreqHz: Double;
|
||||
@@ -1257,6 +1259,7 @@ begin
|
||||
rfDrive:
|
||||
begin
|
||||
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
||||
UpdateDriveLabel; // % / дБ рядом с ползунком
|
||||
FChannelController.OnDriveChanged; // внешнее изменение снимает память канала
|
||||
end;
|
||||
rfAGCTop:
|
||||
@@ -1353,6 +1356,7 @@ begin
|
||||
RebuildXvtrButtons;
|
||||
PushXvtrToWeb;
|
||||
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
||||
UpdateDriveLabel; // переключаем единицу %/дБ под бэкенд
|
||||
if Assigned(FSampleRateOverlay) then
|
||||
FSampleRateOverlay.SetCurrentRate(FController.FSampleRate);
|
||||
UpdateNRButton; UpdateNBButton; UpdateSNBButton; UpdateANFButton;
|
||||
@@ -1680,10 +1684,17 @@ begin
|
||||
|
||||
TrkDrive := TFlatSlider.Create(Self);
|
||||
TrkDrive.Parent := PanelTX; TrkDrive.Left := 34; TrkDrive.Top := 74;
|
||||
TrkDrive.Width := 150; TrkDrive.Height := 16;
|
||||
TrkDrive.Width := 120; TrkDrive.Height := 16;
|
||||
TrkDrive.Min := 0; TrkDrive.Max := 100; TrkDrive.Position := 50;
|
||||
TrkDrive.OnChange := TrkDriveChange;
|
||||
|
||||
LblDrvVal := TLabel.Create(Self);
|
||||
LblDrvVal.Parent := PanelTX;
|
||||
LblDrvVal.Left := 158; LblDrvVal.Top := 77;
|
||||
LblDrvVal.Font.Color := CLR_TEXT; LblDrvVal.Font.Name := 'Courier New';
|
||||
LblDrvVal.Font.Size := 7;
|
||||
UpdateDriveLabel;
|
||||
|
||||
Inc(Y, 100);
|
||||
|
||||
// RX block: CTUN + VOL + NR/NB/SNB/ANF/MUTE
|
||||
@@ -5029,6 +5040,17 @@ begin
|
||||
FController.SetDrive(TrkDrive.Position); // rfDrive-рендер снимет память канала (OnDriveChanged)
|
||||
end;
|
||||
|
||||
procedure TMainForm.UpdateDriveLabel;
|
||||
// Значение рядом с ползунком drive: openHPSDR — проценты, Pluto — TX-аттенюация
|
||||
// в дБ (берём из контроллера; маппинг drive%→дБ — там же).
|
||||
begin
|
||||
if LblDrvVal = nil then Exit;
|
||||
if FController.IsPluto then
|
||||
LblDrvVal.Caption := Format('%.0fdB', [FController.PlutoTxAttForDrive])
|
||||
else
|
||||
LblDrvVal.Caption := Format('%d%%', [FController.FDrivePercent]);
|
||||
end;
|
||||
|
||||
function TMainForm.CalcDriveByte: Byte;
|
||||
begin
|
||||
// Формула — в контроллере (чистая над состоянием). Делегат для существующих
|
||||
@@ -5058,6 +5080,7 @@ procedure TMainForm.OnPlutoTxMaxAttChange(MaxAttDb: Double);
|
||||
begin
|
||||
// Логика (clamp/apply/persist) — в контроллере; UI лишь передаёт значение.
|
||||
FController.SetPlutoTxMaxAtt(MaxAttDb);
|
||||
UpdateDriveLabel; // изменился потолок → пересчитать дБ-подпись drive
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnVHFCalSettingsChange(const VHFCal: array of Double);
|
||||
|
||||
Reference in New Issue
Block a user