mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +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;
|
PanelTX: TPanel;
|
||||||
LblDrv: TLabel;
|
LblDrv: TLabel;
|
||||||
|
LblDrvVal: TLabel; // значение drive: % (openHPSDR) или дБ (Pluto)
|
||||||
TrkDrive: TFlatSlider;
|
TrkDrive: TFlatSlider;
|
||||||
BtnMOX: TFlatButton;
|
BtnMOX: TFlatButton;
|
||||||
BtnTUN: TFlatButton;
|
BtnTUN: TFlatButton;
|
||||||
@@ -492,6 +493,7 @@ type
|
|||||||
procedure OnVfoOverlayInvalidate(Sender: TObject);
|
procedure OnVfoOverlayInvalidate(Sender: TObject);
|
||||||
procedure PbSpectrumDblClick(Sender: TObject);
|
procedure PbSpectrumDblClick(Sender: TObject);
|
||||||
procedure TrkDriveChange(Sender: TObject);
|
procedure TrkDriveChange(Sender: TObject);
|
||||||
|
procedure UpdateDriveLabel; // % (openHPSDR) / дБ (Pluto) рядом с ползунком drive
|
||||||
procedure TrkVolumeChange(Sender: TObject);
|
procedure TrkVolumeChange(Sender: TObject);
|
||||||
function CalcDriveByte: Byte;
|
function CalcDriveByte: Byte;
|
||||||
function ActiveTXFreqHz: Double;
|
function ActiveTXFreqHz: Double;
|
||||||
@@ -1257,6 +1259,7 @@ begin
|
|||||||
rfDrive:
|
rfDrive:
|
||||||
begin
|
begin
|
||||||
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
||||||
|
UpdateDriveLabel; // % / дБ рядом с ползунком
|
||||||
FChannelController.OnDriveChanged; // внешнее изменение снимает память канала
|
FChannelController.OnDriveChanged; // внешнее изменение снимает память канала
|
||||||
end;
|
end;
|
||||||
rfAGCTop:
|
rfAGCTop:
|
||||||
@@ -1353,6 +1356,7 @@ begin
|
|||||||
RebuildXvtrButtons;
|
RebuildXvtrButtons;
|
||||||
PushXvtrToWeb;
|
PushXvtrToWeb;
|
||||||
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
TrkDrive.Position := FController.FDrivePercent; // слайдер ← drive%
|
||||||
|
UpdateDriveLabel; // переключаем единицу %/дБ под бэкенд
|
||||||
if Assigned(FSampleRateOverlay) then
|
if Assigned(FSampleRateOverlay) then
|
||||||
FSampleRateOverlay.SetCurrentRate(FController.FSampleRate);
|
FSampleRateOverlay.SetCurrentRate(FController.FSampleRate);
|
||||||
UpdateNRButton; UpdateNBButton; UpdateSNBButton; UpdateANFButton;
|
UpdateNRButton; UpdateNBButton; UpdateSNBButton; UpdateANFButton;
|
||||||
@@ -1680,10 +1684,17 @@ begin
|
|||||||
|
|
||||||
TrkDrive := TFlatSlider.Create(Self);
|
TrkDrive := TFlatSlider.Create(Self);
|
||||||
TrkDrive.Parent := PanelTX; TrkDrive.Left := 34; TrkDrive.Top := 74;
|
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.Min := 0; TrkDrive.Max := 100; TrkDrive.Position := 50;
|
||||||
TrkDrive.OnChange := TrkDriveChange;
|
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);
|
Inc(Y, 100);
|
||||||
|
|
||||||
// RX block: CTUN + VOL + NR/NB/SNB/ANF/MUTE
|
// RX block: CTUN + VOL + NR/NB/SNB/ANF/MUTE
|
||||||
@@ -5029,6 +5040,17 @@ begin
|
|||||||
FController.SetDrive(TrkDrive.Position); // rfDrive-рендер снимет память канала (OnDriveChanged)
|
FController.SetDrive(TrkDrive.Position); // rfDrive-рендер снимет память канала (OnDriveChanged)
|
||||||
end;
|
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;
|
function TMainForm.CalcDriveByte: Byte;
|
||||||
begin
|
begin
|
||||||
// Формула — в контроллере (чистая над состоянием). Делегат для существующих
|
// Формула — в контроллере (чистая над состоянием). Делегат для существующих
|
||||||
@@ -5058,6 +5080,7 @@ procedure TMainForm.OnPlutoTxMaxAttChange(MaxAttDb: Double);
|
|||||||
begin
|
begin
|
||||||
// Логика (clamp/apply/persist) — в контроллере; UI лишь передаёт значение.
|
// Логика (clamp/apply/persist) — в контроллере; UI лишь передаёт значение.
|
||||||
FController.SetPlutoTxMaxAtt(MaxAttDb);
|
FController.SetPlutoTxMaxAtt(MaxAttDb);
|
||||||
|
UpdateDriveLabel; // изменился потолок → пересчитать дБ-подпись drive
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainForm.OnVHFCalSettingsChange(const VHFCal: array of Double);
|
procedure TMainForm.OnVHFCalSettingsChange(const VHFCal: array of Double);
|
||||||
|
|||||||
Reference in New Issue
Block a user