mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
samplerate button
This commit is contained in:
+96
-13
@@ -355,6 +355,8 @@ type
|
|||||||
procedure BuildUI;
|
procedure BuildUI;
|
||||||
procedure ApplyDarkTheme;
|
procedure ApplyDarkTheme;
|
||||||
procedure StyleButton(B: TFlatButton; Active: Boolean = False);
|
procedure StyleButton(B: TFlatButton; Active: Boolean = False);
|
||||||
|
procedure StyleSpanButton(B: TFlatButton; Active: Boolean = False);
|
||||||
|
procedure PositionSpanOverlayButtons;
|
||||||
procedure UpdateVfoDisplay;
|
procedure UpdateVfoDisplay;
|
||||||
function FormatFreq(Hz: Double): string;
|
function FormatFreq(Hz: Double): string;
|
||||||
function ScaleX(X, Total, Width: Integer): Integer;
|
function ScaleX(X, Total, Width: Integer): Integer;
|
||||||
@@ -687,12 +689,12 @@ begin
|
|||||||
// SampleRate — глобальный, не per-band. Не восстанавливаем из диапазона.
|
// SampleRate — глобальный, не per-band. Не восстанавливаем из диапазона.
|
||||||
// Обновляем только FSpanHz для отображения (берём текущий FSampleRate)
|
// Обновляем только FSpanHz для отображения (берём текущий FSampleRate)
|
||||||
FSpanHz := FSampleRate;
|
FSpanHz := FSampleRate;
|
||||||
StyleButton(BtnSpan48k, FSampleRate = 48000);
|
StyleSpanButton(BtnSpan48k, FSampleRate = 48000);
|
||||||
StyleButton(BtnSpan96k, FSampleRate = 96000);
|
StyleSpanButton(BtnSpan96k, FSampleRate = 96000);
|
||||||
StyleButton(BtnSpan192k, FSampleRate = 192000);
|
StyleSpanButton(BtnSpan192k, FSampleRate = 192000);
|
||||||
StyleButton(BtnSpan384k, FSampleRate = 384000);
|
StyleSpanButton(BtnSpan384k, FSampleRate = 384000);
|
||||||
StyleButton(BtnSpan768k, FSampleRate = 768000);
|
StyleSpanButton(BtnSpan768k, FSampleRate = 768000);
|
||||||
StyleButton(BtnSpan1536k, FSampleRate = 1536000);
|
StyleSpanButton(BtnSpan1536k, FSampleRate = 1536000);
|
||||||
|
|
||||||
// --- VFO A: центрируем на новой частоте, сбрасываем shift ---
|
// --- VFO A: центрируем на новой частоте, сбрасываем shift ---
|
||||||
FCenterFreq := B.VfoA; // DDC = центр диапазона
|
FCenterFreq := B.VfoA; // DDC = центр диапазона
|
||||||
@@ -1255,7 +1257,12 @@ begin
|
|||||||
BtnSpan384k.Tag := 384000;
|
BtnSpan384k.Tag := 384000;
|
||||||
BtnSpan768k.Tag := 768000;
|
BtnSpan768k.Tag := 768000;
|
||||||
BtnSpan1536k.Tag := 1536000;
|
BtnSpan1536k.Tag := 1536000;
|
||||||
StyleButton(BtnSpan192k, True);
|
StyleSpanButton(BtnSpan48k, False);
|
||||||
|
StyleSpanButton(BtnSpan96k, False);
|
||||||
|
StyleSpanButton(BtnSpan192k, True);
|
||||||
|
StyleSpanButton(BtnSpan384k, False);
|
||||||
|
StyleSpanButton(BtnSpan768k, False);
|
||||||
|
StyleSpanButton(BtnSpan1536k, False);
|
||||||
|
|
||||||
// Waterfall AGC + Noise Floor кнопки справа в той же панели
|
// Waterfall AGC + Noise Floor кнопки справа в той же панели
|
||||||
BtnWfAGC := MakeBtn(PanelSpanButtons, 'WF AGC', 379, 3, 62, BTN_SM, BtnWfAGCClick);
|
BtnWfAGC := MakeBtn(PanelSpanButtons, 'WF AGC', 379, 3, 62, BTN_SM, BtnWfAGCClick);
|
||||||
@@ -1294,6 +1301,16 @@ begin
|
|||||||
PbWaterfall.OnMouseMove := PbWaterfallMouseMove;
|
PbWaterfall.OnMouseMove := PbWaterfallMouseMove;
|
||||||
PbWaterfall.OnMouseUp := PbWaterfallMouseUp;
|
PbWaterfall.OnMouseUp := PbWaterfallMouseUp;
|
||||||
|
|
||||||
|
// SPAN кнопки как оверлей на спектре (в стиле web)
|
||||||
|
BtnSpan48k.Parent := PanelRight;
|
||||||
|
BtnSpan96k.Parent := PanelRight;
|
||||||
|
BtnSpan192k.Parent := PanelRight;
|
||||||
|
BtnSpan384k.Parent := PanelRight;
|
||||||
|
BtnSpan768k.Parent := PanelRight;
|
||||||
|
BtnSpan1536k.Parent := PanelRight;
|
||||||
|
LblSpan.Visible := False;
|
||||||
|
PositionSpanOverlayButtons;
|
||||||
|
|
||||||
// Initial layout
|
// Initial layout
|
||||||
ResizeSpectrumPanels;
|
ResizeSpectrumPanels;
|
||||||
end;
|
end;
|
||||||
@@ -1364,6 +1381,7 @@ begin
|
|||||||
PbSpectrum.SetBounds(0, TopOff, RW, SH);
|
PbSpectrum.SetBounds(0, TopOff, RW, SH);
|
||||||
PbRuler.SetBounds (0, TopOff + SH, RW, 18);
|
PbRuler.SetBounds (0, TopOff + SH, RW, 18);
|
||||||
PbWaterfall.SetBounds(0, TopOff + SH + 18, RW, WH);
|
PbWaterfall.SetBounds(0, TopOff + SH + 18, RW, WH);
|
||||||
|
PositionSpanOverlayButtons;
|
||||||
|
|
||||||
// Обновляем переменные размеров
|
// Обновляем переменные размеров
|
||||||
FSpectrumWidth := RW;
|
FSpectrumWidth := RW;
|
||||||
@@ -1448,6 +1466,71 @@ begin
|
|||||||
B.Font.Size := 8;
|
B.Font.Size := 8;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.StyleSpanButton(B: TFlatButton; Active: Boolean);
|
||||||
|
begin
|
||||||
|
B.Active := Active;
|
||||||
|
B.ClrNorm := TColor($0013191B);
|
||||||
|
B.ClrActive := TColor($001E3C1E);
|
||||||
|
B.ClrHot := TColor($001E2D1E);
|
||||||
|
B.ClrBorder := TColor($005A7A5A);
|
||||||
|
B.ClrText := TColor($0090B890);
|
||||||
|
B.ClrTextAct := TColor($00AAFFAA);
|
||||||
|
B.Font.Name := 'Courier New';
|
||||||
|
B.Font.Size := 7;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.PositionSpanOverlayButtons;
|
||||||
|
const
|
||||||
|
BTN_TOP = 6;
|
||||||
|
GAP = 3;
|
||||||
|
W48 = 40;
|
||||||
|
W96 = 40;
|
||||||
|
W192 = 44;
|
||||||
|
W384 = 44;
|
||||||
|
W768 = 44;
|
||||||
|
W1536 = 50;
|
||||||
|
HBTN = 18;
|
||||||
|
var
|
||||||
|
X, NeedW, BaseX, BaseY: Integer;
|
||||||
|
begin
|
||||||
|
if (PbSpectrum = nil) or (BtnSpan48k = nil) then Exit;
|
||||||
|
NeedW := W48 + W96 + W192 + W384 + W768 + W1536 + GAP * 5 + 8;
|
||||||
|
if PbSpectrum.Width < NeedW then
|
||||||
|
begin
|
||||||
|
BtnSpan48k.Visible := False;
|
||||||
|
BtnSpan96k.Visible := False;
|
||||||
|
BtnSpan192k.Visible := False;
|
||||||
|
BtnSpan384k.Visible := False;
|
||||||
|
BtnSpan768k.Visible := False;
|
||||||
|
BtnSpan1536k.Visible := False;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
BaseX := PbSpectrum.Left;
|
||||||
|
BaseY := PbSpectrum.Top;
|
||||||
|
X := BaseX + 56;
|
||||||
|
BtnSpan48k.SetBounds(X, BaseY + BTN_TOP, W48, HBTN); Inc(X, W48 + GAP);
|
||||||
|
BtnSpan96k.SetBounds(X, BaseY + BTN_TOP, W96, HBTN); Inc(X, W96 + GAP);
|
||||||
|
BtnSpan192k.SetBounds(X, BaseY + BTN_TOP, W192, HBTN); Inc(X, W192 + GAP);
|
||||||
|
BtnSpan384k.SetBounds(X, BaseY + BTN_TOP, W384, HBTN); Inc(X, W384 + GAP);
|
||||||
|
BtnSpan768k.SetBounds(X, BaseY + BTN_TOP, W768, HBTN); Inc(X, W768 + GAP);
|
||||||
|
BtnSpan1536k.SetBounds(X, BaseY + BTN_TOP, W1536, HBTN);
|
||||||
|
|
||||||
|
BtnSpan48k.Visible := True;
|
||||||
|
BtnSpan96k.Visible := True;
|
||||||
|
BtnSpan192k.Visible := True;
|
||||||
|
BtnSpan384k.Visible := True;
|
||||||
|
BtnSpan768k.Visible := True;
|
||||||
|
BtnSpan1536k.Visible := True;
|
||||||
|
|
||||||
|
BtnSpan48k.BringToFront;
|
||||||
|
BtnSpan96k.BringToFront;
|
||||||
|
BtnSpan192k.BringToFront;
|
||||||
|
BtnSpan384k.BringToFront;
|
||||||
|
BtnSpan768k.BringToFront;
|
||||||
|
BtnSpan1536k.BringToFront;
|
||||||
|
end;
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// VFO
|
// VFO
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -3651,12 +3734,12 @@ begin
|
|||||||
DDCRate := NewRate div 1000;
|
DDCRate := NewRate div 1000;
|
||||||
|
|
||||||
// Обновляем кнопки сразу — UI отзывчив
|
// Обновляем кнопки сразу — UI отзывчив
|
||||||
StyleButton(BtnSpan48k, FSampleRate = 48000);
|
StyleSpanButton(BtnSpan48k, FSampleRate = 48000);
|
||||||
StyleButton(BtnSpan96k, FSampleRate = 96000);
|
StyleSpanButton(BtnSpan96k, FSampleRate = 96000);
|
||||||
StyleButton(BtnSpan192k, FSampleRate = 192000);
|
StyleSpanButton(BtnSpan192k, FSampleRate = 192000);
|
||||||
StyleButton(BtnSpan384k, FSampleRate = 384000);
|
StyleSpanButton(BtnSpan384k, FSampleRate = 384000);
|
||||||
StyleButton(BtnSpan768k, FSampleRate = 768000);
|
StyleSpanButton(BtnSpan768k, FSampleRate = 768000);
|
||||||
StyleButton(BtnSpan1536k, FSampleRate = 1536000);
|
StyleSpanButton(BtnSpan1536k, FSampleRate = 1536000);
|
||||||
Application.ProcessMessages;
|
Application.ProcessMessages;
|
||||||
|
|
||||||
FBandCache[FCurrentBand].SpanHz := FSpanHz; // для обратной совместимости
|
FBandCache[FCurrentBand].SpanHz := FSpanHz; // для обратной совместимости
|
||||||
|
|||||||
+1
-1
@@ -307,7 +307,7 @@
|
|||||||
"span_hz" : 1.9200000000000000E+005
|
"span_hz" : 1.9200000000000000E+005
|
||||||
},
|
},
|
||||||
"3" : {
|
"3" : {
|
||||||
"vfo_a" : 7.1100000000000000E+006,
|
"vfo_a" : 7.1250000000000000E+006,
|
||||||
"vfo_b" : 7.1000000000000000E+006,
|
"vfo_b" : 7.1000000000000000E+006,
|
||||||
"mode" : 0,
|
"mode" : 0,
|
||||||
"filter_idx" : 5,
|
"filter_idx" : 5,
|
||||||
|
|||||||
Reference in New Issue
Block a user