mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 21:37:32 +00:00
ui(settings): align cards and spacing
This commit is contained in:
+87
-30
@@ -42,6 +42,7 @@ const
|
|||||||
TAG_RESPONSIVE_HALF_LEFT = 912;
|
TAG_RESPONSIVE_HALF_LEFT = 912;
|
||||||
TAG_RESPONSIVE_HALF_RIGHT = 913;
|
TAG_RESPONSIVE_HALF_RIGHT = 913;
|
||||||
TAG_RESPONSIVE_INSET = 914;
|
TAG_RESPONSIVE_INSET = 914;
|
||||||
|
TAG_BOTTOM_SPACER = 915;
|
||||||
|
|
||||||
type
|
type
|
||||||
// PA: MaxPower в Вт, BandCal[0..10] — калибровка 38.8..100.0 на диапазон
|
// PA: MaxPower в Вт, BandCal[0..10] — калибровка 38.8..100.0 на диапазон
|
||||||
@@ -522,6 +523,8 @@ type
|
|||||||
function MakeGroupPanel(AParent: TWinControl; const Cap: string;
|
function MakeGroupPanel(AParent: TWinControl; const Cap: string;
|
||||||
ALeft, ATop, AW, AH: Integer): TPanel;
|
ALeft, ATop, AW, AH: Integer): TPanel;
|
||||||
function MakeScrollPage: TScrollBox;
|
function MakeScrollPage: TScrollBox;
|
||||||
|
procedure AddPageBottomSpace(APage: TScrollBox);
|
||||||
|
procedure UpdatePageBottomSpace(APage: TScrollBox);
|
||||||
procedure MakeNavSection(const Cap: string; ATop: Integer);
|
procedure MakeNavSection(const Cap: string; ATop: Integer);
|
||||||
function MakeNavButton(const Cap: string; ATop: Integer): TFlatButton;
|
function MakeNavButton(const Cap: string; ATop: Integer): TFlatButton;
|
||||||
|
|
||||||
@@ -694,6 +697,7 @@ const
|
|||||||
SETTINGS_CARD_W = 760;
|
SETTINGS_CARD_W = 760;
|
||||||
SETTINGS_CARD_MAX_W = 934;
|
SETTINGS_CARD_MAX_W = 934;
|
||||||
SETTINGS_FOOTER_H = 52;
|
SETTINGS_FOOTER_H = 52;
|
||||||
|
SETTINGS_BOTTOM_SPACE = 24;
|
||||||
|
|
||||||
// Первый пункт комбо аудио слайса = «как у приложения» (пустое имя в конфиге).
|
// Первый пункт комбо аудио слайса = «как у приложения» (пустое имя в конфиге).
|
||||||
SLICE_DEV_DEFAULT = 'Default (app output)';
|
SLICE_DEV_DEFAULT = 'Default (app output)';
|
||||||
@@ -920,6 +924,42 @@ begin
|
|||||||
Result.Visible := False;
|
Result.Visible := False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSettingsForm.AddPageBottomSpace(APage: TScrollBox);
|
||||||
|
var
|
||||||
|
Spacer: TPanel;
|
||||||
|
begin
|
||||||
|
if APage = nil then Exit;
|
||||||
|
Spacer := TPanel.Create(Self);
|
||||||
|
Spacer.Parent := APage;
|
||||||
|
Spacer.Tag := TAG_BOTTOM_SPACER;
|
||||||
|
Spacer.BevelOuter := bvNone;
|
||||||
|
Spacer.Color := CLR_BG;
|
||||||
|
Spacer.Height := DpiScale(SETTINGS_BOTTOM_SPACE);
|
||||||
|
UpdatePageBottomSpace(APage);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSettingsForm.UpdatePageBottomSpace(APage: TScrollBox);
|
||||||
|
var
|
||||||
|
i, ContentBottom: Integer;
|
||||||
|
Ctrl: TControl;
|
||||||
|
Spacer: TPanel;
|
||||||
|
begin
|
||||||
|
if APage = nil then Exit;
|
||||||
|
Spacer := nil;
|
||||||
|
ContentBottom := 0;
|
||||||
|
for i := 0 to APage.ControlCount - 1 do
|
||||||
|
begin
|
||||||
|
Ctrl := APage.Controls[i];
|
||||||
|
if Ctrl.Tag = TAG_BOTTOM_SPACER then
|
||||||
|
Spacer := TPanel(Ctrl)
|
||||||
|
else if Ctrl.Visible then
|
||||||
|
ContentBottom := Max(ContentBottom, Ctrl.Top + Ctrl.Height);
|
||||||
|
end;
|
||||||
|
if Spacer = nil then Exit;
|
||||||
|
Spacer.SetBounds(0, ContentBottom, Max(APage.ClientWidth, DpiScale(804)),
|
||||||
|
DpiScale(SETTINGS_BOTTOM_SPACE));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSettingsForm.MakeNavSection(const Cap: string; ATop: Integer);
|
procedure TSettingsForm.MakeNavSection(const Cap: string; ATop: Integer);
|
||||||
begin
|
begin
|
||||||
with TLabel.Create(Self) do
|
with TLabel.Create(Self) do
|
||||||
@@ -1056,6 +1096,15 @@ begin
|
|||||||
BuildOCTab;
|
BuildOCTab;
|
||||||
BuildQOTab;
|
BuildQOTab;
|
||||||
|
|
||||||
|
// Страницы, заканчивающиеся карточкой, получают небольшой участок фона
|
||||||
|
// после последнего блока. Иначе при прокрутке блок визуально слипается
|
||||||
|
// с закреплённой нижней панелью Close.
|
||||||
|
AddPageBottomSpace(FPageSpectrum);
|
||||||
|
AddPageBottomSpace(FPageWaterfall);
|
||||||
|
AddPageBottomSpace(FPageCalib);
|
||||||
|
AddPageBottomSpace(FPageCAT);
|
||||||
|
AddPageBottomSpace(FPageOC);
|
||||||
|
|
||||||
FBtnClose := TFlatButton.Create(Self);
|
FBtnClose := TFlatButton.Create(Self);
|
||||||
FBtnClose.Parent := FFooterPanel;
|
FBtnClose.Parent := FFooterPanel;
|
||||||
FBtnClose.Caption := 'Close';
|
FBtnClose.Caption := 'Close';
|
||||||
@@ -1180,38 +1229,42 @@ procedure TSettingsForm.RelayoutResponsiveCards;
|
|||||||
AsideWidth, FOCXvtrActGrp.Height);
|
AsideWidth, FOCXvtrActGrp.Height);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure ResizePage(APage: TScrollBox);
|
procedure ResizePage(APage: TScrollBox; ACardWidth: Integer);
|
||||||
|
begin
|
||||||
|
if (APage = nil) or (APage.ClientWidth <= 0) then Exit;
|
||||||
|
ResizeTree(APage, ACardWidth);
|
||||||
|
if APage = FPageTransmit then
|
||||||
|
ResizeTransmit(ACardWidth);
|
||||||
|
if APage = FPageOC then
|
||||||
|
ResizeOC(ACardWidth);
|
||||||
|
UpdatePageBottomSpace(APage);
|
||||||
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
CardWidth: Integer;
|
CardWidth: Integer;
|
||||||
begin
|
begin
|
||||||
if (APage = nil) or (APage.ClientWidth <= 0) then Exit;
|
if FContentPanel = nil then Exit;
|
||||||
CardWidth := APage.ClientWidth
|
// Ширина берётся от общего контейнера, а не от отдельной страницы:
|
||||||
|
// появившийся на длинной вкладке scrollbar не должен сужать её карточки.
|
||||||
|
CardWidth := FContentPanel.ClientWidth
|
||||||
- DpiScale(2 * SETTINGS_MARGIN) - DpiScale(20);
|
- DpiScale(2 * SETTINGS_MARGIN) - DpiScale(20);
|
||||||
CardWidth := EnsureRange(CardWidth, DpiScale(SETTINGS_CARD_W),
|
CardWidth := EnsureRange(CardWidth, DpiScale(SETTINGS_CARD_W),
|
||||||
DpiScale(SETTINGS_CARD_MAX_W));
|
DpiScale(SETTINGS_CARD_MAX_W));
|
||||||
ResizeTree(APage, CardWidth);
|
|
||||||
if APage = FPageTransmit then
|
|
||||||
ResizeTransmit(CardWidth);
|
|
||||||
if APage = FPageOC then
|
|
||||||
ResizeOC(CardWidth);
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
ResizePage(FPageAudio, CardWidth);
|
||||||
if FContentPanel = nil then Exit;
|
ResizePage(FPageDisplay, CardWidth);
|
||||||
ResizePage(FPageAudio);
|
ResizePage(FPageSpectrum, CardWidth);
|
||||||
ResizePage(FPageDisplay);
|
ResizePage(FPageWaterfall, CardWidth);
|
||||||
ResizePage(FPageSpectrum);
|
ResizePage(FPageTransmit, CardWidth);
|
||||||
ResizePage(FPageWaterfall);
|
ResizePage(FPagePA, CardWidth);
|
||||||
ResizePage(FPageTransmit);
|
ResizePage(FPageCalib, CardWidth);
|
||||||
ResizePage(FPagePA);
|
ResizePage(FPageAdvanced, CardWidth);
|
||||||
ResizePage(FPageCalib);
|
ResizePage(FPageCAT, CardWidth);
|
||||||
ResizePage(FPageAdvanced);
|
ResizePage(FPageSlices, CardWidth);
|
||||||
ResizePage(FPageCAT);
|
ResizePage(FPageAlex, CardWidth);
|
||||||
ResizePage(FPageSlices);
|
ResizePage(FPageXvtr, CardWidth);
|
||||||
ResizePage(FPageAlex);
|
ResizePage(FPageOC, CardWidth);
|
||||||
ResizePage(FPageXvtr);
|
ResizePage(FPageQO, CardWidth);
|
||||||
ResizePage(FPageOC);
|
|
||||||
ResizePage(FPageQO);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSettingsForm.NavClick(Sender: TObject);
|
procedure TSettingsForm.NavClick(Sender: TObject);
|
||||||
@@ -2582,8 +2635,9 @@ begin
|
|||||||
|
|
||||||
FBtnDispFromSM := TFlatButton.Create(Self);
|
FBtnDispFromSM := TFlatButton.Create(Self);
|
||||||
FBtnDispFromSM.Parent := Grp;
|
FBtnDispFromSM.Parent := Grp;
|
||||||
FBtnDispFromSM.Caption := '= S-meter';
|
FBtnDispFromSM.Caption := 'Copy all from S-meter';
|
||||||
FBtnDispFromSM.SetBounds(DpiScale(CAL_GRP_W - 130), DpiScale(24), DpiScale(112), DpiScale(BTN_H));
|
FBtnDispFromSM.SetBounds(DpiScale(CAL_PAD), DpiScale(54),
|
||||||
|
DpiScale(190), DpiScale(BTN_H));
|
||||||
FBtnDispFromSM.OnClick := OnCalDispFromSMClick;
|
FBtnDispFromSM.OnClick := OnCalDispFromSMClick;
|
||||||
FBtnDispFromSM.ClrNorm := CLR_PANEL;
|
FBtnDispFromSM.ClrNorm := CLR_PANEL;
|
||||||
FBtnDispFromSM.ClrBorder := TColor($00404040);
|
FBtnDispFromSM.ClrBorder := TColor($00404040);
|
||||||
@@ -2592,7 +2646,8 @@ begin
|
|||||||
FBtnDispFromSM.ClrText := CLR_TEXT;
|
FBtnDispFromSM.ClrText := CLR_TEXT;
|
||||||
FBtnDispFromSM.ClrTextAct := CLR_ACCENT;
|
FBtnDispFromSM.ClrTextAct := CLR_ACCENT;
|
||||||
FBtnDispFromSM.Font.Size := 9;
|
FBtnDispFromSM.Font.Size := 9;
|
||||||
FBtnDispFromSM.Hint := 'Copy the S-meter offsets into this table';
|
FBtnDispFromSM.Hint :=
|
||||||
|
'Copy all band and transverter offsets from the S-meter table above';
|
||||||
FBtnDispFromSM.ShowHint := True;
|
FBtnDispFromSM.ShowHint := True;
|
||||||
|
|
||||||
for i := 0 to CFG_BAND_COUNT - 1 do
|
for i := 0 to CFG_BAND_COUNT - 1 do
|
||||||
@@ -2686,7 +2741,7 @@ begin
|
|||||||
HSM := LayoutCalOffsets(FLblSMBand, FEdSMBand, FLblSMXvtrHdr,
|
HSM := LayoutCalOffsets(FLblSMBand, FEdSMBand, FLblSMXvtrHdr,
|
||||||
FLblSMXvtr, FEdSMXvtr, 52);
|
FLblSMXvtr, FEdSMXvtr, 52);
|
||||||
HDisp := LayoutCalOffsets(FLblDispBand, FEdDispBand, FLblDispXvtrHdr,
|
HDisp := LayoutCalOffsets(FLblDispBand, FEdDispBand, FLblDispXvtrHdr,
|
||||||
FLblDispXvtr, FEdDispXvtr, 52);
|
FLblDispXvtr, FEdDispXvtr, 90);
|
||||||
|
|
||||||
// ---- вертикальная укладка групп ----
|
// ---- вертикальная укладка групп ----
|
||||||
GTop := 86;
|
GTop := 86;
|
||||||
@@ -2704,6 +2759,7 @@ begin
|
|||||||
FCalGrpDisp.SetBounds(DpiScale(CAL_MARGIN), DpiScale(GTop), DpiScale(CAL_GRP_W), DpiScale(HDisp));
|
FCalGrpDisp.SetBounds(DpiScale(CAL_MARGIN), DpiScale(GTop), DpiScale(CAL_GRP_W), DpiScale(HDisp));
|
||||||
GTop := GTop + HDisp + 14;
|
GTop := GTop + HDisp + 14;
|
||||||
FCalGrpFreq.SetBounds(DpiScale(CAL_MARGIN), DpiScale(GTop), DpiScale(CAL_GRP_W), DpiScale(CAL_GRP2_H));
|
FCalGrpFreq.SetBounds(DpiScale(CAL_MARGIN), DpiScale(GTop), DpiScale(CAL_GRP_W), DpiScale(CAL_GRP2_H));
|
||||||
|
UpdatePageBottomSpace(FPageCalib);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSettingsForm.LayoutCalOffsets(const BandLbl: array of TLabel;
|
function TSettingsForm.LayoutCalOffsets(const BandLbl: array of TLabel;
|
||||||
@@ -3087,7 +3143,8 @@ procedure TSettingsForm.ApplyTheme(const T: TAppTheme);
|
|||||||
begin
|
begin
|
||||||
if TPanel(Ctrl).Height = 1 then
|
if TPanel(Ctrl).Height = 1 then
|
||||||
TPanel(Ctrl).Color := T.Border
|
TPanel(Ctrl).Color := T.Border
|
||||||
else if TPanel(Ctrl).Tag = TAG_PAGE_BG then
|
else if (TPanel(Ctrl).Tag = TAG_PAGE_BG) or
|
||||||
|
(TPanel(Ctrl).Tag = TAG_BOTTOM_SPACER) then
|
||||||
TPanel(Ctrl).Color := T.BG // подложка подвкладки, не группа
|
TPanel(Ctrl).Color := T.BG // подложка подвкладки, не группа
|
||||||
else
|
else
|
||||||
TPanel(Ctrl).Color := T.Panel;
|
TPanel(Ctrl).Color := T.Panel;
|
||||||
|
|||||||
Reference in New Issue
Block a user