mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
Align left panel button margins
This commit is contained in:
+123
-49
@@ -126,6 +126,8 @@ const
|
||||
SMETER_MARGIN = 3;
|
||||
TOP_SMETER_GAP = 8;
|
||||
TOP_VFO_FONT = 25;
|
||||
LEFT_PANEL_BTN_PAD = 3;
|
||||
LEFT_PANEL_BTN_GAP = 2;
|
||||
|
||||
type
|
||||
TDeviceItem = record
|
||||
@@ -434,6 +436,8 @@ type
|
||||
|
||||
// ---- Helpers ----
|
||||
procedure BuildUI;
|
||||
function LeftPanelButtonLeft(PanelWidth, ColCount, ColIndex: Integer): Integer;
|
||||
function LeftPanelButtonWidth(PanelWidth, ColCount, ColIndex: Integer): Integer;
|
||||
procedure ApplyDarkTheme;
|
||||
procedure SetLightTheme(V: Boolean);
|
||||
procedure StyleButton(B: TFlatButton; Active: Boolean = False);
|
||||
@@ -762,6 +766,31 @@ uses SettingsForm;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
function TMainForm.LeftPanelButtonWidth(PanelWidth, ColCount,
|
||||
ColIndex: Integer): Integer;
|
||||
var
|
||||
InnerW, BaseW, Extra: Integer;
|
||||
begin
|
||||
if ColCount <= 0 then Exit(0);
|
||||
InnerW := PanelWidth - 2 * LEFT_PANEL_BTN_PAD -
|
||||
(ColCount - 1) * LEFT_PANEL_BTN_GAP;
|
||||
BaseW := InnerW div ColCount;
|
||||
Extra := InnerW mod ColCount;
|
||||
Result := BaseW;
|
||||
if ColIndex < Extra then Inc(Result);
|
||||
end;
|
||||
|
||||
function TMainForm.LeftPanelButtonLeft(PanelWidth, ColCount,
|
||||
ColIndex: Integer): Integer;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Result := LEFT_PANEL_BTN_PAD;
|
||||
for i := 0 to ColIndex - 1 do
|
||||
Inc(Result, LeftPanelButtonWidth(PanelWidth, ColCount, i) +
|
||||
LEFT_PANEL_BTN_GAP);
|
||||
end;
|
||||
|
||||
constructor TWisdomBuildThread.Create(const ADirectory: string);
|
||||
begin
|
||||
inherited Create(False);
|
||||
@@ -1807,9 +1836,12 @@ begin
|
||||
PanelTX.BevelOuter := bvNone;
|
||||
MakeLbl(PanelTX, 'TX', 4, 2);
|
||||
|
||||
W := (LEFT_W - 6) div 4;
|
||||
BtnMOX := MakeBtn(PanelTX, 'MOX', 2, 16, W - 2, BTN_SM, BtnMOXClick);
|
||||
BtnTUN := MakeBtn(PanelTX, 'TUN', W + 2, 16, W - 2, BTN_SM, BtnTUNClick);
|
||||
BtnMOX := MakeBtn(PanelTX, 'MOX',
|
||||
LeftPanelButtonLeft(LEFT_W, 4, 0), 16,
|
||||
LeftPanelButtonWidth(LEFT_W, 4, 0), BTN_SM, BtnMOXClick);
|
||||
BtnTUN := MakeBtn(PanelTX, 'TUN',
|
||||
LeftPanelButtonLeft(LEFT_W, 4, 1), 16,
|
||||
LeftPanelButtonWidth(LEFT_W, 4, 1), BTN_SM, BtnTUNClick);
|
||||
|
||||
LblDrv := TLabel.Create(Self);
|
||||
LblDrv.Parent := PanelTX; LblDrv.Left := 4; LblDrv.Top := 53;
|
||||
@@ -1832,13 +1864,13 @@ begin
|
||||
PanelBands.SetBounds(0, Y, LEFT_W, 74);
|
||||
PanelBands.BevelOuter := bvNone;
|
||||
MakeLbl(PanelBands, 'BAND', 4, 2);
|
||||
W := (LEFT_W - 6) div 6;
|
||||
for i := 0 to BAND_COUNT - 1 do
|
||||
begin
|
||||
B := MakeBtn(PanelBands, BAND_NAMES[i],
|
||||
2 + (i mod 6) * W,
|
||||
LeftPanelButtonLeft(LEFT_W, 6, i mod 6),
|
||||
16 + (i div 6) * 27,
|
||||
W - 2, BTN_SM, BtnBandClick);
|
||||
LeftPanelButtonWidth(LEFT_W, 6, i mod 6),
|
||||
BTN_SM, BtnBandClick);
|
||||
B.Tag := i;
|
||||
BtnBand[i] := B;
|
||||
end;
|
||||
@@ -1854,13 +1886,13 @@ begin
|
||||
PanelMode.SetBounds(0, Y, LEFT_W, 74);
|
||||
PanelMode.BevelOuter := bvNone;
|
||||
MakeLbl(PanelMode, 'MODE', 4, 2);
|
||||
W := (LEFT_W - 6) div 4;
|
||||
for i := 0 to MODE_COUNT - 1 do
|
||||
begin
|
||||
B := MakeBtn(PanelMode, MODE_NAMES[i],
|
||||
2 + (i mod 4) * W,
|
||||
LeftPanelButtonLeft(LEFT_W, 4, i mod 4),
|
||||
16 + (i div 4) * 27,
|
||||
W - 2, BTN_SM, BtnModeClick);
|
||||
LeftPanelButtonWidth(LEFT_W, 4, i mod 4),
|
||||
BTN_SM, BtnModeClick);
|
||||
B.Tag := i;
|
||||
BtnMode[i] := B;
|
||||
StyleButton(B, i = FMode);
|
||||
@@ -1874,13 +1906,13 @@ begin
|
||||
PanelFilter.SetBounds(0, Y, LEFT_W, 74);
|
||||
PanelFilter.BevelOuter := bvNone;
|
||||
MakeLbl(PanelFilter, 'FILTER', 4, 2);
|
||||
W := (LEFT_W - 6) div 5;
|
||||
for i := 0 to FILT_COUNT - 1 do
|
||||
begin
|
||||
B := MakeBtn(PanelFilter, '---',
|
||||
2 + (i mod 5) * W,
|
||||
LeftPanelButtonLeft(LEFT_W, 5, i mod 5),
|
||||
16 + (i div 5) * 27,
|
||||
W - 2, BTN_SM, BtnFilterClick);
|
||||
LeftPanelButtonWidth(LEFT_W, 5, i mod 5),
|
||||
BTN_SM, BtnFilterClick);
|
||||
B.Tag := i;
|
||||
BtnFilter[i] := B;
|
||||
end;
|
||||
@@ -1894,16 +1926,18 @@ begin
|
||||
PanelFMSQ.BevelOuter := bvNone;
|
||||
PanelFMSQ.Visible := False;
|
||||
MakeLbl(PanelFMSQ, 'SQL', 4, 4);
|
||||
W := LEFT_W div 4 - 2; // button width ~56px
|
||||
BtnFMSQ := MakeBtn(PanelFMSQ, 'SQL', 2, 20, W, BTN_SM, BtnFMSQClick);
|
||||
W := LeftPanelButtonWidth(LEFT_W, 4, 0);
|
||||
BtnFMSQ := MakeBtn(PanelFMSQ, 'SQL',
|
||||
LeftPanelButtonLeft(LEFT_W, 4, 0), 20,
|
||||
W, BTN_SM, BtnFMSQClick);
|
||||
StyleButton(BtnFMSQ, False);
|
||||
// Slider: vertically centred with button text (button top=20, h=24 → center=32)
|
||||
// Reserve 28px on the right for the numeric label
|
||||
TrkFMSQ := TFlatSlider.Create(Self);
|
||||
TrkFMSQ.Parent := PanelFMSQ;
|
||||
TrkFMSQ.Left := W + 6;
|
||||
TrkFMSQ.Left := BtnFMSQ.Left + BtnFMSQ.Width + 3;
|
||||
TrkFMSQ.Top := 25; // 32 - 14/2 = 25
|
||||
TrkFMSQ.Width := LEFT_W - W - 6 - 30 - 4; // leave 30px for label + margins
|
||||
TrkFMSQ.Width := LEFT_W - TrkFMSQ.Left - 30 - 4; // leave 30px for label + margins
|
||||
TrkFMSQ.Height := 14;
|
||||
TrkFMSQ.Min := 0; TrkFMSQ.Max := 100;
|
||||
TrkFMSQ.Position := FFMSQLevel;
|
||||
@@ -1926,10 +1960,16 @@ begin
|
||||
PanelFMCTCSS.BevelOuter := bvNone;
|
||||
PanelFMCTCSS.Visible := False;
|
||||
MakeLbl(PanelFMCTCSS, 'CTCSS', 4, 4);
|
||||
W := LEFT_W div 3 - 2;
|
||||
BtnFMCTCSS := MakeBtn(PanelFMCTCSS, 'CTCSS', 2, 20, W, BTN_H, BtnFMCTCSSClick);
|
||||
BtnFMCTCSS := MakeBtn(PanelFMCTCSS, 'CTCSS',
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 0), 20,
|
||||
LeftPanelButtonWidth(LEFT_W, 3, 0),
|
||||
BTN_H, BtnFMCTCSSClick);
|
||||
StyleButton(BtnFMCTCSS, False);
|
||||
BtnFMCTCSSTone := MakeBtn(PanelFMCTCSS, CTCSS_NAMES[0], W + 4, 20, LEFT_W - W - 8, BTN_H, BtnFMCTCSSToneClick);
|
||||
BtnFMCTCSSTone := MakeBtn(PanelFMCTCSS, CTCSS_NAMES[0],
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 1), 20,
|
||||
LEFT_W - LEFT_PANEL_BTN_PAD -
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 1),
|
||||
BTN_H, BtnFMCTCSSToneClick);
|
||||
StyleButton(BtnFMCTCSSTone, False);
|
||||
|
||||
FCTCSSDropDown := TFlatDropDown.Create(BtnFMCTCSSTone, PanelLeft, 4, BTN_SM);
|
||||
@@ -1944,11 +1984,16 @@ begin
|
||||
PanelFMStep.BevelOuter := bvNone;
|
||||
PanelFMStep.Visible := False;
|
||||
MakeLbl(PanelFMStep, 'STEP', 4, 4);
|
||||
W := LEFT_W div 3 - 2;
|
||||
BtnFMStep := MakeBtn(PanelFMStep, 'STEP', 2, 20, W, BTN_H, BtnFMStepClick);
|
||||
BtnFMStep := MakeBtn(PanelFMStep, 'STEP',
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 0), 20,
|
||||
LeftPanelButtonWidth(LEFT_W, 3, 0),
|
||||
BTN_H, BtnFMStepClick);
|
||||
StyleButton(BtnFMStep, FFMStepOn);
|
||||
BtnFMStepSel := MakeBtn(PanelFMStep, FM_STEP_NAMES[FFMStepIdx],
|
||||
W + 4, 20, LEFT_W - W - 8, BTN_H, BtnFMStepSelClick);
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 1), 20,
|
||||
LEFT_W - LEFT_PANEL_BTN_PAD -
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 1),
|
||||
BTN_H, BtnFMStepSelClick);
|
||||
StyleButton(BtnFMStepSel, False);
|
||||
|
||||
FStepDropDown := TFlatDropDown.Create(BtnFMStepSel, PanelLeft, FM_STEP_COUNT, BTN_SM);
|
||||
@@ -1957,12 +2002,17 @@ begin
|
||||
FStepDropDown.OnSelect := OnStepDropDownSelect;
|
||||
|
||||
// CTUN / DUP buttons (display-related)
|
||||
BtnCTun := MakeBtn(PanelLeft, 'CTUN', 2, Y, LEFT_W div 3 - 2, BTN_H, BtnCTunClick);
|
||||
BtnCTun := MakeBtn(PanelLeft, 'CTUN',
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 0), Y,
|
||||
LeftPanelButtonWidth(LEFT_W, 3, 0),
|
||||
BTN_H, BtnCTunClick);
|
||||
BtnCTun.Tag := 0;
|
||||
StyleButton(BtnCTun, FCTun);
|
||||
|
||||
BtnDUP := MakeBtn(PanelLeft, 'DUP',
|
||||
2 + (LEFT_W div 3) + 0, Y, LEFT_W div 3 - 2, BTN_H, BtnDUPClick);
|
||||
LeftPanelButtonLeft(LEFT_W, 3, 1), Y,
|
||||
LeftPanelButtonWidth(LEFT_W, 3, 1),
|
||||
BTN_H, BtnDUPClick);
|
||||
BtnDUP.Tag := 0;
|
||||
StyleButton(BtnDUP, FDisplayDuplex);
|
||||
|
||||
@@ -1976,12 +2026,31 @@ begin
|
||||
|
||||
// AGC mode — 5 кнопок в ряд
|
||||
MakeLbl(PanelRX, 'AGC', 4, 4);
|
||||
W := (LEFT_W - 10) div 5;
|
||||
BtnAGCMode[0] := MakeBtn(PanelRX,'FAST', 2, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[0].Tag:=0;
|
||||
BtnAGCMode[1] := MakeBtn(PanelRX,'MED', W+4, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[1].Tag:=1;
|
||||
BtnAGCMode[2] := MakeBtn(PanelRX,'SLOW', 2*W+6, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[2].Tag:=2;
|
||||
BtnAGCMode[3] := MakeBtn(PanelRX,'LONG', 3*W+8, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[3].Tag:=3;
|
||||
BtnAGCMode[4] := MakeBtn(PanelRX,'OFF', 4*W+10, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[4].Tag:=4;
|
||||
BtnAGCMode[0] := MakeBtn(PanelRX, 'FAST',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 0), 22,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 0),
|
||||
BTN_SM, BtnAGCModeClick);
|
||||
BtnAGCMode[0].Tag := 0;
|
||||
BtnAGCMode[1] := MakeBtn(PanelRX, 'MED',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 1), 22,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 1),
|
||||
BTN_SM, BtnAGCModeClick);
|
||||
BtnAGCMode[1].Tag := 1;
|
||||
BtnAGCMode[2] := MakeBtn(PanelRX, 'SLOW',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 2), 22,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 2),
|
||||
BTN_SM, BtnAGCModeClick);
|
||||
BtnAGCMode[2].Tag := 2;
|
||||
BtnAGCMode[3] := MakeBtn(PanelRX, 'LONG',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 3), 22,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 3),
|
||||
BTN_SM, BtnAGCModeClick);
|
||||
BtnAGCMode[3].Tag := 3;
|
||||
BtnAGCMode[4] := MakeBtn(PanelRX, 'OFF',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 4), 22,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 4),
|
||||
BTN_SM, BtnAGCModeClick);
|
||||
BtnAGCMode[4].Tag := 4;
|
||||
for i := 0 to 4 do StyleButton(BtnAGCMode[i], i = FAGCMode);
|
||||
|
||||
// AGC level slider
|
||||
@@ -2011,12 +2080,21 @@ begin
|
||||
TrkVolume.OnChange := TrkVolumeChange;
|
||||
|
||||
// NR NB SNB ANF MUTE
|
||||
W := (LEFT_W - 10) div 5;
|
||||
BtnNR := MakeBtn(PanelRX, 'NR', 2, 96, W, BTN_SM, BtnNRClick);
|
||||
BtnNB := MakeBtn(PanelRX, 'NB', W+4, 96, W, BTN_SM, BtnNBClick);
|
||||
BtnSNB := MakeBtn(PanelRX, 'SNB', 2*W+6, 96, W, BTN_SM, BtnSNBClick);
|
||||
BtnANF := MakeBtn(PanelRX, 'ANF', 3*W+8, 96, W, BTN_SM, BtnANFClick);
|
||||
BtnMute:= MakeBtn(PanelRX, 'MUTE', 4*W+10, 96, W, BTN_SM, BtnMuteClick);
|
||||
BtnNR := MakeBtn(PanelRX, 'NR',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 0), 96,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 0), BTN_SM, BtnNRClick);
|
||||
BtnNB := MakeBtn(PanelRX, 'NB',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 1), 96,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 1), BTN_SM, BtnNBClick);
|
||||
BtnSNB := MakeBtn(PanelRX, 'SNB',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 2), 96,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 2), BTN_SM, BtnSNBClick);
|
||||
BtnANF := MakeBtn(PanelRX, 'ANF',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 3), 96,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 3), BTN_SM, BtnANFClick);
|
||||
BtnMute := MakeBtn(PanelRX, 'MUTE',
|
||||
LeftPanelButtonLeft(LEFT_W, 5, 4), 96,
|
||||
LeftPanelButtonWidth(LEFT_W, 5, 4), BTN_SM, BtnMuteClick);
|
||||
|
||||
Inc(Y, 126);
|
||||
|
||||
@@ -4329,7 +4407,6 @@ var
|
||||
i: Integer;
|
||||
Names: array[0..FILT_COUNT-1] of string;
|
||||
DefIdx: Integer;
|
||||
W: Integer;
|
||||
begin
|
||||
if FMode = MODE_FM then
|
||||
begin
|
||||
@@ -4338,16 +4415,15 @@ begin
|
||||
if FFilter > 1 then FFilter := FILT_FM_DEF; // sanitize, keep NFM/WFM as-is
|
||||
FFilterBW := FILT_FM_BW[FFilter];
|
||||
FFMDeviation := FILT_FM_DEV[FFilter];
|
||||
W := (PanelFilter.Width - 6) div 2;
|
||||
BtnFilter[0].Caption := FILT_FM_NAMES[0];
|
||||
BtnFilter[0].Left := 2;
|
||||
BtnFilter[0].Width := W - 2;
|
||||
BtnFilter[0].Left := LeftPanelButtonLeft(PanelFilter.Width, 2, 0);
|
||||
BtnFilter[0].Width := LeftPanelButtonWidth(PanelFilter.Width, 2, 0);
|
||||
BtnFilter[0].Top := 16;
|
||||
BtnFilter[0].Visible := True;
|
||||
StyleButton(BtnFilter[0], FFilter = 0);
|
||||
BtnFilter[1].Caption := FILT_FM_NAMES[1];
|
||||
BtnFilter[1].Left := W + 2;
|
||||
BtnFilter[1].Width := W - 2;
|
||||
BtnFilter[1].Left := LeftPanelButtonLeft(PanelFilter.Width, 2, 1);
|
||||
BtnFilter[1].Width := LeftPanelButtonWidth(PanelFilter.Width, 2, 1);
|
||||
BtnFilter[1].Top := 16;
|
||||
BtnFilter[1].Visible := True;
|
||||
StyleButton(BtnFilter[1], FFilter = 1);
|
||||
@@ -4377,12 +4453,11 @@ begin
|
||||
if PanelFMSQ <> nil then PanelFMSQ.Visible := False;
|
||||
if PanelFMCTCSS <> nil then PanelFMCTCSS.Visible := False;
|
||||
if PanelFMStep <> nil then begin CloseFMStepPopup; PanelFMStep.Visible := False; end;
|
||||
W := (PanelFilter.Width - 6) div 5;
|
||||
for i := 0 to FILT_COUNT - 1 do
|
||||
begin
|
||||
BtnFilter[i].Left := 2 + (i mod 5) * W;
|
||||
BtnFilter[i].Left := LeftPanelButtonLeft(PanelFilter.Width, 5, i mod 5);
|
||||
BtnFilter[i].Top := 16 + (i div 5) * 27;
|
||||
BtnFilter[i].Width := W - 2;
|
||||
BtnFilter[i].Width := LeftPanelButtonWidth(PanelFilter.Width, 5, i mod 5);
|
||||
BtnFilter[i].Visible := True;
|
||||
end;
|
||||
|
||||
@@ -6420,7 +6495,7 @@ end;
|
||||
procedure TMainForm.RebuildXvtrButtons;
|
||||
var
|
||||
i, Pos, XvtrRows: Integer;
|
||||
W, BtnH, RowH, MaxBottom: Integer;
|
||||
BtnH, RowH, MaxBottom: Integer;
|
||||
B: TFlatButton;
|
||||
Cap: string;
|
||||
begin
|
||||
@@ -6447,7 +6522,6 @@ begin
|
||||
if BtnH = 0 then BtnH := MulDiv(24, Screen.PixelsPerInch, 96);
|
||||
RowH := BtnH + 3; // шаг ряда: высота кнопки + 3px зазор (как 27=24+3 при 1x)
|
||||
|
||||
W := (PanelBands.Width - 6) div 6;
|
||||
Pos := 0; // позиция среди enabled слотов
|
||||
for i := 0 to CFG_XVTR_COUNT - 1 do
|
||||
if FXvtrSettings.Entries[i].Enabled then
|
||||
@@ -6458,9 +6532,9 @@ begin
|
||||
B := TFlatButton.Create(Self);
|
||||
B.Parent := PanelBands;
|
||||
B.Caption := Cap;
|
||||
B.Left := 2 + (Pos mod 6) * W;
|
||||
B.Left := LeftPanelButtonLeft(PanelBands.Width, 6, Pos mod 6);
|
||||
B.Top := MaxBottom + 4 + (Pos div 6) * RowH;
|
||||
B.Width := W - 2;
|
||||
B.Width := LeftPanelButtonWidth(PanelBands.Width, 6, Pos mod 6);
|
||||
B.Height := BtnH;
|
||||
B.OnClick := BtnXvtrBandClick;
|
||||
B.Tag := -(i + 1); // отрицательное значение = XVTR индекс
|
||||
|
||||
Reference in New Issue
Block a user