mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Redesign left panel layout: TX block on top, dynamic Band panel height
- Move PanelTX above PanelBands; DRV slider now below MOX/TUN buttons - MOX/TUN resized to match standard button style (54×24, BTN_SM) - PanelBands default height reduced to 74 (no reserved XVTR space) - RebuildXvtrButtons dynamically resizes PanelBands (+27px per XVTR row) and calls RelayoutBelowBands to reposition Mode/Filter/CTUN/RX panels Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+46
-32
@@ -571,6 +571,7 @@ type
|
|||||||
function XvtrTranslate(VisibleHz: Double): Double;
|
function XvtrTranslate(VisibleHz: Double): Double;
|
||||||
procedure ApplyXvtrToNetwork;
|
procedure ApplyXvtrToNetwork;
|
||||||
procedure RebuildXvtrButtons;
|
procedure RebuildXvtrButtons;
|
||||||
|
procedure RelayoutBelowBands;
|
||||||
procedure BtnXvtrBandClick(Sender: TObject);
|
procedure BtnXvtrBandClick(Sender: TObject);
|
||||||
procedure ActivateXvtrBand(Idx: Integer);
|
procedure ActivateXvtrBand(Idx: Integer);
|
||||||
procedure DeactivateXvtr;
|
procedure DeactivateXvtr;
|
||||||
@@ -1565,12 +1566,36 @@ begin
|
|||||||
|
|
||||||
LayoutTopVfoBlock;
|
LayoutTopVfoBlock;
|
||||||
|
|
||||||
|
// TX controls
|
||||||
|
PanelTX := TPanel.Create(Self);
|
||||||
|
PanelTX.Parent := PanelLeft;
|
||||||
|
PanelTX.SetBounds(0, Y, LEFT_W, 72);
|
||||||
|
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);
|
||||||
|
|
||||||
|
LblDrv := TLabel.Create(Self);
|
||||||
|
LblDrv.Parent := PanelTX; LblDrv.Left := 4; LblDrv.Top := 53;
|
||||||
|
LblDrv.Caption := 'DRV'; LblDrv.Font.Color := CLR_TEXTDIM;
|
||||||
|
LblDrv.Font.Name := 'Courier New'; LblDrv.Font.Size := 7;
|
||||||
|
|
||||||
|
TrkDrive := TFlatSlider.Create(Self);
|
||||||
|
TrkDrive.Parent := PanelTX; TrkDrive.Left := 34; TrkDrive.Top := 50;
|
||||||
|
TrkDrive.Width := 150; TrkDrive.Height := 16;
|
||||||
|
TrkDrive.Min := 0; TrkDrive.Max := 100; TrkDrive.Position := 50;
|
||||||
|
TrkDrive.OnChange := TrkDriveChange;
|
||||||
|
|
||||||
|
Inc(Y, 76);
|
||||||
|
|
||||||
// Band selector. Высота резервирует 2 дополнительных ряда под XVTR-кнопки
|
// Band selector. Высота резервирует 2 дополнительных ряда под XVTR-кнопки
|
||||||
// (создаются динамически в RebuildXvtrButtons). В каждом ряду до 6 кнопок,
|
// (создаются динамически в RebuildXvtrButtons). В каждом ряду до 6 кнопок,
|
||||||
// итого до 12 XVTR-кнопок (наш CFG_XVTR_COUNT = 8 умещается с запасом).
|
// итого до 12 XVTR-кнопок (наш CFG_XVTR_COUNT = 8 умещается с запасом).
|
||||||
PanelBands := TPanel.Create(Self);
|
PanelBands := TPanel.Create(Self);
|
||||||
PanelBands.Parent := PanelLeft;
|
PanelBands.Parent := PanelLeft;
|
||||||
PanelBands.SetBounds(0, Y, LEFT_W, 74 + 54);
|
PanelBands.SetBounds(0, Y, LEFT_W, 74);
|
||||||
PanelBands.BevelOuter := bvNone;
|
PanelBands.BevelOuter := bvNone;
|
||||||
MakeLbl(PanelBands, 'BAND', 4, 2);
|
MakeLbl(PanelBands, 'BAND', 4, 2);
|
||||||
W := (LEFT_W - 6) div 6;
|
W := (LEFT_W - 6) div 6;
|
||||||
@@ -1587,7 +1612,7 @@ begin
|
|||||||
for i := 0 to CFG_XVTR_COUNT - 1 do
|
for i := 0 to CFG_XVTR_COUNT - 1 do
|
||||||
BtnXvtrBand[i] := nil;
|
BtnXvtrBand[i] := nil;
|
||||||
|
|
||||||
Inc(Y, 76 + 54);
|
Inc(Y, 76);
|
||||||
|
|
||||||
// Mode selector
|
// Mode selector
|
||||||
PanelMode := TPanel.Create(Self);
|
PanelMode := TPanel.Create(Self);
|
||||||
@@ -1692,35 +1717,6 @@ begin
|
|||||||
|
|
||||||
Inc(Y, 126);
|
Inc(Y, 126);
|
||||||
|
|
||||||
// S-Meter
|
|
||||||
|
|
||||||
Inc(Y, 52);
|
|
||||||
|
|
||||||
// TX controls
|
|
||||||
PanelTX := TPanel.Create(Self);
|
|
||||||
PanelTX.Parent := PanelLeft;
|
|
||||||
PanelTX.SetBounds(0, Y, LEFT_W, 74);
|
|
||||||
PanelTX.BevelOuter := bvNone;
|
|
||||||
MakeLbl(PanelTX, 'TX', 4, 2);
|
|
||||||
|
|
||||||
LblDrv := TLabel.Create(Self);
|
|
||||||
LblDrv.Parent := PanelTX; LblDrv.Left := 4; LblDrv.Top := 17;
|
|
||||||
LblDrv.Caption := 'DRV'; LblDrv.Font.Color := CLR_TEXTDIM;
|
|
||||||
LblDrv.Font.Name := 'Courier New'; LblDrv.Font.Size := 7;
|
|
||||||
|
|
||||||
TrkDrive := TFlatSlider.Create(Self);
|
|
||||||
TrkDrive.Parent := PanelTX; TrkDrive.Left := 34; TrkDrive.Top := 16;
|
|
||||||
TrkDrive.Width := 150; TrkDrive.Height := 16;
|
|
||||||
TrkDrive.Min := 0; TrkDrive.Max := 100; TrkDrive.Position := 50;
|
|
||||||
TrkDrive.OnChange := TrkDriveChange;
|
|
||||||
|
|
||||||
BtnMOX := MakeBtn(PanelTX, 'MOX', 2, 38, 50, 32, BtnMOXClick);
|
|
||||||
BtnMOX.Font.Size := 12; BtnMOX.Font.Bold := True;
|
|
||||||
|
|
||||||
BtnTUN := MakeBtn(PanelTX, 'TUN', 56, 38, 50, 32, BtnTUNClick);
|
|
||||||
BtnTUN.Font.Size := 12; BtnTUN.Font.Bold := True;
|
|
||||||
|
|
||||||
|
|
||||||
// ---- Right panel ----
|
// ---- Right panel ----
|
||||||
PanelRight := TPanel.Create(Self);
|
PanelRight := TPanel.Create(Self);
|
||||||
PanelRight.Parent := Self;
|
PanelRight.Parent := Self;
|
||||||
@@ -5620,11 +5616,23 @@ end;
|
|||||||
|
|
||||||
// Перестраивает динамические XVTR-кнопки в PanelBands. Удаляет старые,
|
// Перестраивает динамические XVTR-кнопки в PanelBands. Удаляет старые,
|
||||||
// создаёт новые для enabled слотов в 3-м и 4-м ряду PanelBands.
|
// создаёт новые для enabled слотов в 3-м и 4-м ряду PanelBands.
|
||||||
|
procedure TMainForm.RelayoutBelowBands;
|
||||||
|
var
|
||||||
|
Y: Integer;
|
||||||
|
begin
|
||||||
|
if PanelBands = nil then Exit;
|
||||||
|
Y := PanelBands.Top + PanelBands.Height + 2;
|
||||||
|
PanelMode.Top := Y; Inc(Y, 76);
|
||||||
|
PanelFilter.Top := Y; Inc(Y, 76);
|
||||||
|
BtnCTun.Top := Y; BtnDUP.Top := Y; Inc(Y, 30); // BTN_H(26) + 4
|
||||||
|
PanelRX.Top := Y;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMainForm.RebuildXvtrButtons;
|
procedure TMainForm.RebuildXvtrButtons;
|
||||||
const
|
const
|
||||||
BTN_H_LOC = 24;
|
BTN_H_LOC = 24;
|
||||||
var
|
var
|
||||||
i, Pos: Integer;
|
i, Pos, XvtrRows: Integer;
|
||||||
W: Integer;
|
W: Integer;
|
||||||
B: TFlatButton;
|
B: TFlatButton;
|
||||||
Cap: string;
|
Cap: string;
|
||||||
@@ -5658,6 +5666,12 @@ begin
|
|||||||
StyleButton(B, i = FCurrentXvtr);
|
StyleButton(B, i = FCurrentXvtr);
|
||||||
Inc(Pos);
|
Inc(Pos);
|
||||||
end;
|
end;
|
||||||
|
// Динамически подгоняем высоту PanelBands под реальное число XVTR-рядов
|
||||||
|
if Pos = 0 then XvtrRows := 0
|
||||||
|
else if Pos <= 6 then XvtrRows := 1
|
||||||
|
else XvtrRows := 2;
|
||||||
|
PanelBands.Height := 74 + XvtrRows * 27;
|
||||||
|
RelayoutBelowBands;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Обработчик клика по XVTR-кнопке. Tag = -(idx+1).
|
// Обработчик клика по XVTR-кнопке. Tag = -(idx+1).
|
||||||
|
|||||||
Reference in New Issue
Block a user