diff --git a/SettingsForm.pas b/SettingsForm.pas index effcf52..ecafc40 100644 --- a/SettingsForm.pas +++ b/SettingsForm.pas @@ -24,7 +24,7 @@ unit SettingsForm; interface uses - Classes, SysUtils, Math, + Classes, SysUtils, Math, Types, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, LCLType, FlatButton, FlatCheckBox, FlatComboBox, FlatEdit, FlatSpinEdit, FlatFloatSpinEdit, @@ -104,6 +104,7 @@ type // ---- Layout ---- FNavPanel: TPanel; FContentPanel: TPanel; + FFooterPanel: TPanel; FPageAudio: TScrollBox; FPageDisplay: TScrollBox; FPageSpectrum: TScrollBox; @@ -510,6 +511,7 @@ type function MakeGroupPanel(AParent: TWinControl; const Cap: string; ALeft, ATop, AW, AH: Integer): TPanel; function MakeScrollPage: TScrollBox; + procedure MakeNavSection(const Cap: string; ATop: Integer); function MakeNavButton(const Cap: string; ATop: Integer): TFlatButton; procedure OnFFTSizeChange(Sender: TObject); @@ -675,13 +677,10 @@ const CLR_ACCENT = TColor($0040FF80); CLR_INPUT = TColor($00FFFFFF); CLR_INPUT_TEXT = TColor($00202020); - {$IFDEF MSWINDOWS} - UI_FONT = 'Segoe UI'; - {$ELSE} - UI_FONT = 'Sans'; - {$ENDIF} BTN_H = 24; GRP_TITLE_H = 22; // высота заголовка в group-панелях (title label + divider) + SETTINGS_CARD_W = 760; + SETTINGS_FOOTER_H = 52; // Первый пункт комбо аудио слайса = «как у приложения» (пустое имя в конфиге). SLICE_DEV_DEFAULT = 'Default (app output)'; @@ -738,7 +737,7 @@ const CAL_LBL_W = 54; CAL_SM_LBL_W = 68; // подписи трансвертеров длиннее ('70cm', 'QO-100') CAL_COLS = 4; - CAL_GRP_W = 700; + CAL_GRP_W = SETTINGS_CARD_W; CAL_GRP1_H = 236; // Power / SWR detector CAL_GRP2_H = 156; // Supply voltage / current CAL_VA_LBL_W = 220; @@ -746,16 +745,31 @@ const { TSettingsForm } constructor TSettingsForm.Create(AOwner: TComponent); +var + WorkArea: TRect; + MaxW, MaxH: Integer; begin inherited CreateNew(AOwner); Caption := 'Settings'; - Width := DpiScale(1180); - Height := DpiScale(720); - Position := poScreenCenter; + if AOwner is TCustomForm then + begin + WorkArea := TCustomForm(AOwner).BoundsRect; + WorkArea := Screen.MonitorFromRect(WorkArea).WorkareaRect; + Position := poOwnerFormCenter; + end + else + begin + WorkArea := Screen.PrimaryMonitor.WorkareaRect; + Position := poScreenCenter; + end; + MaxW := WorkArea.Right - WorkArea.Left - DpiScale(48); + MaxH := WorkArea.Bottom - WorkArea.Top - DpiScale(48); + Width := Min(DpiScale(1180), MaxW); + Height := Min(DpiScale(720), MaxH); + Constraints.MinWidth := Min(DpiScale(760), Width); + Constraints.MinHeight := Min(DpiScale(620), Height); BorderStyle := bsSizeable; Color := CLR_BG; - Font.Name := UI_FONT; - Font.Size := 9; Font.Color := CLR_TEXT; FLoading := False; FRXDevCount := 0; @@ -773,11 +787,19 @@ begin Result := TLabel.Create(Self); Result.Parent := AParent; Result.Caption := Cap; - Result.Left := DpiScale(ALeft); - Result.Top := DpiScale(ATop); - if AW > 0 then Result.Width := DpiScale(AW); + Result.AutoSize := AW <= 0; + if AW > 0 then + begin + Result.SetBounds(DpiScale(ALeft), DpiScale(ATop), + DpiScale(AW), DpiScale(18)); + Result.Layout := tlCenter; + end + else + begin + Result.Left := DpiScale(ALeft); + Result.Top := DpiScale(ATop); + end; Result.Font.Color := CLR_TEXTDIM; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; end; @@ -792,7 +814,6 @@ begin Result.Height := DpiScale(BTN_H); Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnChange; end; @@ -816,15 +837,17 @@ begin TitleLbl := TLabel.Create(Self); TitleLbl.Parent := Result; TitleLbl.Caption := Cap; - TitleLbl.SetBounds(DpiScale(8), DpiScale(5), SAW - DpiScale(16), DpiScale(14)); + TitleLbl.AutoSize := False; + TitleLbl.SetBounds(DpiScale(10), DpiScale(2), + SAW - DpiScale(20), DpiScale(GRP_TITLE_H - 3)); + TitleLbl.Layout := tlCenter; TitleLbl.Font.Color := CLR_ACCENT; - TitleLbl.Font.Name := UI_FONT; TitleLbl.Font.Size := 9; TitleLbl.Font.Style := [fsBold]; Divider := TPanel.Create(Self); Divider.Parent := Result; - Divider.SetBounds(0, DpiScale(GRP_TITLE_H), SAW + DpiScale(200), 1); + Divider.SetBounds(0, DpiScale(GRP_TITLE_H), SAW, 1); Divider.BevelOuter := bvNone; Divider.Color := CLR_BORDER; end; @@ -840,12 +863,27 @@ begin Result.Visible := False; end; +procedure TSettingsForm.MakeNavSection(const Cap: string; ATop: Integer); +begin + with TLabel.Create(Self) do + begin + Parent := FNavPanel; + Caption := UpperCase(Cap); + AutoSize := False; + SetBounds(DpiScale(14), DpiScale(ATop), DpiScale(160), DpiScale(18)); + Layout := tlCenter; + Font.Size := 8; + Font.Style := [fsBold]; + Font.Color := CLR_TEXTDIM; + end; +end; + function TSettingsForm.MakeNavButton(const Cap: string; ATop: Integer): TFlatButton; begin Result := TFlatButton.Create(Self); Result.Parent := FNavPanel; Result.Caption := Cap; - Result.SetBounds(DpiScale(10), DpiScale(ATop), DpiScale(166), DpiScale(32)); + Result.SetBounds(DpiScale(10), DpiScale(ATop), DpiScale(166), DpiScale(30)); Result.Anchors := [akLeft, akTop, akRight]; Result.OnClick := NavClick; Result.ClrNorm := CLR_PANEL; @@ -854,7 +892,6 @@ begin Result.ClrActive := TColor($00204030); Result.ClrText := CLR_TEXT; Result.ClrTextAct := CLR_ACCENT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.Font.Style := []; end; @@ -877,7 +914,6 @@ begin Parent := FNavPanel; Caption := 'Settings'; SetBounds(DpiScale(14), DpiScale(14), DpiScale(160), DpiScale(24)); - Font.Name := UI_FONT; Font.Size := 14; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -888,25 +924,29 @@ begin Parent := FNavPanel; Caption := 'EWSDR'; SetBounds(DpiScale(14), DpiScale(39), DpiScale(160), DpiScale(18)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - FNavAudio := MakeNavButton('Audio', 74); - FNavDisplay := MakeNavButton('Display', 110); - FNavSpectrum := MakeNavButton('Spectrum', 146); - FNavWaterfall := MakeNavButton('Waterfall', 182); - FNavTransmit := MakeNavButton('Transmit', 218); - FNavPA := MakeNavButton('Power Amplifier', 254); - FNavCalib := MakeNavButton('Calibration', 290); - FNavAdvanced := MakeNavButton('Advanced', 326); - FNavCAT := MakeNavButton('CAT', 362); - FNavSlices := MakeNavButton('Slices', 398); - FNavAlex := MakeNavButton('Antenna / Alex', 434); - FNavXvtr := MakeNavButton('Transverter', 470); - FNavOC := MakeNavButton('OC Control', 506); - FNavQO := MakeNavButton('QO-100', 542); + MakeNavSection('General', 68); + FNavAudio := MakeNavButton('Audio', 88); + FNavDisplay := MakeNavButton('Display', 120); + FNavSpectrum := MakeNavButton('Spectrum', 152); + FNavWaterfall := MakeNavButton('Waterfall', 184); + + MakeNavSection('Radio', 224); + FNavTransmit := MakeNavButton('Transmit', 244); + FNavPA := MakeNavButton('Power Amplifier', 276); + FNavCalib := MakeNavButton('Calibration', 308); + FNavAlex := MakeNavButton('Antenna / Alex', 340); + FNavXvtr := MakeNavButton('Transverter', 372); + FNavOC := MakeNavButton('OC Control', 404); + FNavQO := MakeNavButton('QO-100', 436); + + MakeNavSection('Integration', 476); + FNavCAT := MakeNavButton('CAT', 496); + FNavSlices := MakeNavButton('Slices', 528); + FNavAdvanced := MakeNavButton('Advanced', 560); FContentPanel := TPanel.Create(Self); FContentPanel.Parent := Self; @@ -914,6 +954,13 @@ begin FContentPanel.BevelOuter := bvNone; FContentPanel.Color := CLR_BG; + FFooterPanel := TPanel.Create(Self); + FFooterPanel.Parent := FContentPanel; + FFooterPanel.Align := alBottom; + FFooterPanel.Height := DpiScale(SETTINGS_FOOTER_H); + FFooterPanel.BevelOuter := bvNone; + FFooterPanel.Color := CLR_BG; + FPageAudio := MakeScrollPage; FPageDisplay := MakeScrollPage; FPageSpectrum := MakeScrollPage; @@ -949,9 +996,10 @@ begin BuildQOTab; FBtnClose := TFlatButton.Create(Self); - FBtnClose.Parent := Self; + FBtnClose.Parent := FFooterPanel; FBtnClose.Caption := 'Close'; - FBtnClose.SetBounds(Width - DpiScale(106), Height - DpiScale(40), DpiScale(92), DpiScale(28)); + FBtnClose.SetBounds(FFooterPanel.ClientWidth - DpiScale(110), DpiScale(10), + DpiScale(92), DpiScale(30)); FBtnClose.Anchors := [akRight, akBottom]; FBtnClose.OnClick := BtnCloseClick; FBtnClose.ClrNorm := CLR_PANEL; @@ -960,7 +1008,6 @@ begin FBtnClose.ClrActive := TColor($00003300); FBtnClose.ClrText := CLR_TEXT; FBtnClose.ClrTextAct:= CLR_ACCENT; - FBtnClose.Font.Name := UI_FONT; FBtnClose.Font.Size := 9; SelectPage(FPageAudio, FNavAudio); @@ -1039,7 +1086,6 @@ begin Parent := FPageAudio; Caption := 'Audio'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -1050,12 +1096,11 @@ begin Parent := FPageAudio; Caption := 'Input and output devices used by the receiver and transmitter.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(560), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - Grp := MakeGroupPanel(FPageAudio, 'Audio Devices', MARGIN, 86, 650, 184); + Grp := MakeGroupPanel(FPageAudio, 'Audio Devices', MARGIN, 86, SETTINGS_CARD_W, 184); MakeLbl(Grp, 'TX input device', PAD, R1 + 5, LW); FCmbTXDev := MakeCombo(Grp, CX, R1, CMB_W, OnTXDevChange); @@ -1072,7 +1117,7 @@ begin FCmbAudioBuffer.Items.Add('512 frames'); FCmbAudioBuffer.ItemIndex := 0; - Grp := MakeGroupPanel(FPageAudio, 'Transceiver Audio', MARGIN, 290, 650, 92); + Grp := MakeGroupPanel(FPageAudio, 'Transceiver Audio', MARGIN, 290, SETTINGS_CARD_W, 92); FChkSendAudioToRadio := TFlatCheckBox.Create(Self); FChkSendAudioToRadio.Parent := Grp; @@ -1080,7 +1125,6 @@ begin FChkSendAudioToRadio.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(420), DpiScale(22)); FChkSendAudioToRadio.Checked := False; FChkSendAudioToRadio.Font.Color := CLR_TEXT; - FChkSendAudioToRadio.Font.Name := UI_FONT; FChkSendAudioToRadio.Font.Size := 9; FChkSendAudioToRadio.OnChange := OnSendAudioToRadioChkChange; end; @@ -1107,7 +1151,6 @@ begin Parent := FPageDisplay; Caption := 'Display'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -1118,12 +1161,11 @@ begin Parent := FPageDisplay; Caption := 'General visual options. Spectrum and waterfall processing are split into their own pages.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(680), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - Grp := MakeGroupPanel(FPageDisplay, 'Visible Panes', MARGIN, 86, 650, 112); + Grp := MakeGroupPanel(FPageDisplay, 'Visible Panes', MARGIN, 86, SETTINGS_CARD_W, 112); FChkShowSpectrum := TFlatCheckBox.Create(Self); FChkShowSpectrum.Parent := Grp; @@ -1131,7 +1173,6 @@ begin FChkShowSpectrum.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(CHKW), DpiScale(22)); FChkShowSpectrum.Checked := True; FChkShowSpectrum.Font.Color := CLR_TEXT; - FChkShowSpectrum.Font.Name := UI_FONT; FChkShowSpectrum.Font.Size := 9; FChkShowSpectrum.OnChange := OnVisibilityChkChange; @@ -1141,7 +1182,6 @@ begin FChkShowWaterfall.SetBounds(DpiScale(PAD + CHKW + 20), DpiScale(R1), DpiScale(CHKW), DpiScale(22)); FChkShowWaterfall.Checked := True; FChkShowWaterfall.Font.Color := CLR_TEXT; - FChkShowWaterfall.Font.Name := UI_FONT; FChkShowWaterfall.Font.Size := 9; FChkShowWaterfall.OnChange := OnVisibilityChkChange; @@ -1151,7 +1191,6 @@ begin FChkShowWideband.SetBounds(DpiScale(PAD + (CHKW + 20) * 2), DpiScale(R1), DpiScale(CHKW), DpiScale(22)); FChkShowWideband.Checked := False; FChkShowWideband.Font.Color := CLR_TEXT; - FChkShowWideband.Font.Name := UI_FONT; FChkShowWideband.Font.Size := 9; FChkShowWideband.OnChange := OnVisibilityChkChange; @@ -1161,7 +1200,6 @@ begin FChkWidebandFill.SetBounds(DpiScale(PAD + (CHKW + 20) * 2), DpiScale(R1 + 28), DpiScale(CHKW), DpiScale(22)); FChkWidebandFill.Checked := False; FChkWidebandFill.Font.Color := CLR_TEXT; - FChkWidebandFill.Font.Name := UI_FONT; FChkWidebandFill.Font.Size := 9; FChkWidebandFill.OnChange := OnVisibilityChkChange; @@ -1171,11 +1209,10 @@ begin FChkSpectrumFill.SetBounds(DpiScale(PAD), DpiScale(R1 + 28), DpiScale(CHKW), DpiScale(22)); FChkSpectrumFill.Checked := True; FChkSpectrumFill.Font.Color := CLR_TEXT; - FChkSpectrumFill.Font.Name := UI_FONT; FChkSpectrumFill.Font.Size := 9; FChkSpectrumFill.OnChange := OnVisibilityChkChange; - Grp := MakeGroupPanel(FPageDisplay, 'Performance', MARGIN, 212, 650, 92); + Grp := MakeGroupPanel(FPageDisplay, 'Performance', MARGIN, 212, SETTINGS_CARD_W, 92); MakeLbl(Grp, 'Refresh rate', PAD, R1 + 5, LW); FCmbFPS := MakeCombo(Grp, CX, R1, 140, OnFPSCmbChange); @@ -1183,7 +1220,7 @@ begin FCmbFPS.Items.Add(FPS_NAMES[i]); FCmbFPS.ItemIndex := 8; - Grp := MakeGroupPanel(FPageDisplay, 'Appearance', MARGIN, 318, 650, 68); + Grp := MakeGroupPanel(FPageDisplay, 'Appearance', MARGIN, 318, SETTINGS_CARD_W, 68); FChkLightTheme := TFlatCheckBox.Create(Self); FChkLightTheme.Parent := Grp; @@ -1191,11 +1228,10 @@ begin FChkLightTheme.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(CHKW), DpiScale(22)); FChkLightTheme.Checked := False; FChkLightTheme.Font.Color := CLR_TEXT; - FChkLightTheme.Font.Name := UI_FONT; FChkLightTheme.Font.Size := 9; FChkLightTheme.OnChange := OnLightThemeChkChange; - Grp := MakeGroupPanel(FPageDisplay, 'VFO Display', MARGIN, 404, 650, 92); + Grp := MakeGroupPanel(FPageDisplay, 'VFO Display', MARGIN, 404, SETTINGS_CARD_W, 92); MakeLbl(Grp, 'Frequency range', PAD, R1 + 5, LW); FCmbFreqMhzDigits := MakeCombo(Grp, CX, R1, 240, OnFreqMhzDigitsCmbChange); @@ -1236,7 +1272,7 @@ var Result.MaxValue := AMax; Result.Increment := AInc; Result.DecimalPlaces := 1; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; + Result.Font.Size := 9; Result.OnChange := AOnChange; end; @@ -1247,7 +1283,7 @@ var Result.Parent := Grp; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(AW), DpiScale(BTN_H)); Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; + Result.Font.Size := 9; Result.Text := AText; Result.OnExit := AOnExit; end; @@ -1257,7 +1293,6 @@ begin Parent := FPageSpectrum; Caption := 'Spectrum'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -1268,12 +1303,11 @@ begin Parent := FPageSpectrum; Caption := 'Analyzer, detector, averaging and grid parameters for RX1.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(620), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - Grp := MakeGroupPanel(FPageSpectrum, 'Analyzer', MARGIN, 86, 650, 128); + Grp := MakeGroupPanel(FPageSpectrum, 'Analyzer', MARGIN, 86, SETTINGS_CARD_W, 128); MakeLbl(Grp, 'FFT Size:', PAD, R1 + 5, LW); FCmbFFTSize := MakeCombo(Grp, CX, R1, CMB_W, OnFFTSizeChange); for i := 0 to High(FFT_NAMES) do FCmbFFTSize.Items.Add(FFT_NAMES[i]); @@ -1281,7 +1315,7 @@ begin FCmbWindow := MakeCombo(Grp, CX, R1 + STEP, CMB_W_LONG, OnWindowChange); for i := 0 to High(WINDOW_NAMES) do FCmbWindow.Items.Add(WINDOW_NAMES[i]); - Grp := MakeGroupPanel(FPageSpectrum, 'Detection && Averaging', MARGIN, 230, 650, 170); + Grp := MakeGroupPanel(FPageSpectrum, 'Detection && Averaging', MARGIN, 230, SETTINGS_CARD_W, 170); MakeLbl(Grp, 'Detector:', PAD, R1 + 5, LW); FCmbSpecDet := MakeCombo(Grp, CX, R1, CMB_W, OnSpecDetChange); for i := 0 to High(DETECTOR_NAMES) do FCmbSpecDet.Items.Add(DETECTOR_NAMES[i]); @@ -1291,14 +1325,14 @@ begin MakeLbl(Grp, 'Avg Time (ms):', PAD, R1 + 2 * STEP + 5, LW); FSpecAvgTime := MkFloat(CX, R1 + 2 * STEP, SPW, 30.0, 0.0, 5000.0, 10.0, OnSpecAvgTimeChange); - Grp := MakeGroupPanel(FPageSpectrum, 'Rendering', MARGIN, 602, 650, 128); + Grp := MakeGroupPanel(FPageSpectrum, 'Rendering', MARGIN, 602, SETTINGS_CARD_W, 128); MakeLbl(Grp, 'Anti-aliasing:', PAD, R1 + 5, LW); FCmbSpecMSAA := MakeCombo(Grp, CX, R1, 130, OnSpecMSAACtlChange); for i := 0 to High(MSAA_NAMES) do FCmbSpecMSAA.Items.Add(MSAA_NAMES[i]); FCmbSpecMSAA.ItemIndex := 2; // 4x MakeLbl(Grp, '(GL spectrum curve smoothing, MSAA)', CX + 140, R1 + 5, 300); - Grp := MakeGroupPanel(FPageSpectrum, 'Grid', MARGIN, 416, 650, 170); + Grp := MakeGroupPanel(FPageSpectrum, 'Grid', MARGIN, 416, SETTINGS_CARD_W, 170); MakeLbl(Grp, 'Reference level:', PAD, R1 + 5, LW); FEdRefLevel := MkEdit(CX, R1, EDT_W, '-20', OnRefLevelChange); MakeLbl(Grp, 'Range (dB):', PAD, R1 + STEP + 5, LW); @@ -1313,7 +1347,6 @@ begin Parent := FPageWaterfall; Caption := 'Waterfall'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -1324,12 +1357,11 @@ begin Parent := FPageWaterfall; Caption := 'Waterfall detector, smoothing and color scale thresholds.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(620), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - Grp := MakeGroupPanel(FPageWaterfall, 'Detection && Averaging', MARGIN, 86, 650, 170); + Grp := MakeGroupPanel(FPageWaterfall, 'Detection && Averaging', MARGIN, 86, SETTINGS_CARD_W, 170); MakeLbl(Grp, 'Detector:', PAD, R1 + 5, LW); FCmbWfDet := MakeCombo(Grp, CX, R1, CMB_W, OnWfDetChange); for i := 0 to High(DETECTOR_NAMES) do FCmbWfDet.Items.Add(DETECTOR_NAMES[i]); @@ -1339,7 +1371,7 @@ begin MakeLbl(Grp, 'Avg Time (ms):', PAD, R1 + 2 * STEP + 5, LW); FWfAvgTime := MkFloat(CX, R1 + 2 * STEP, SPW, 120.0, 0.0, 5000.0, 10.0, OnWfAvgTimeChange); - Grp := MakeGroupPanel(FPageWaterfall, 'Color Scale', MARGIN, 272, 650, 170); + Grp := MakeGroupPanel(FPageWaterfall, 'Color Scale', MARGIN, 272, SETTINGS_CARD_W, 170); MakeLbl(Grp, 'High (dBm):', PAD, R1 + 5, LW); FWfHigh := MkFloat(CX, R1, SPW, -80.0, -160.0, 20.0, 1.0, OnWfThresholdChange); MakeLbl(Grp, 'Low (dBm):', PAD, R1 + STEP + 5, LW); @@ -1347,14 +1379,13 @@ begin MakeLbl(Grp, 'AGC Offset (dB):', PAD, R1 + 2 * STEP + 5, LW); FWfAGCOffset := MkFloat(CX, R1 + 2 * STEP, SPW, 0.0, -40.0, 40.0, 0.5, OnWfThresholdChange); - Grp := MakeGroupPanel(FPageWaterfall, 'AGC && Noise Floor', MARGIN, 458, 650, 140); + Grp := MakeGroupPanel(FPageWaterfall, 'AGC && Noise Floor', MARGIN, 458, SETTINGS_CARD_W, 140); FChkWfAGC := TFlatCheckBox.Create(Self); FChkWfAGC.Parent := Grp; FChkWfAGC.Caption := 'Waterfall AGC'; FChkWfAGC.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(200), DpiScale(22)); FChkWfAGC.Checked := True; FChkWfAGC.Font.Color := CLR_TEXT; - FChkWfAGC.Font.Name := UI_FONT; FChkWfAGC.Font.Size := 9; FChkWfAGC.OnChange := OnWfAGCNFChkChange; FChkWfNF := TFlatCheckBox.Create(Self); @@ -1363,11 +1394,10 @@ begin FChkWfNF.SetBounds(DpiScale(PAD), DpiScale(R1 + STEP), DpiScale(200), DpiScale(22)); FChkWfNF.Checked := False; FChkWfNF.Font.Color := CLR_TEXT; - FChkWfNF.Font.Name := UI_FONT; FChkWfNF.Font.Size := 9; FChkWfNF.OnChange := OnWfAGCNFChkChange; - Grp := MakeGroupPanel(FPageWaterfall, 'Rendering', MARGIN, 614, 650, 212); + Grp := MakeGroupPanel(FPageWaterfall, 'Rendering', MARGIN, 614, SETTINGS_CARD_W, 212); MakeLbl(Grp, 'Palette:', PAD, R1 + 5, LW); FCmbWfPalette := MakeCombo(Grp, CX, R1, CMB_W, OnWfRenderCtlChange); for i := 0 to High(WF_PALETTE_NAMES) do FCmbWfPalette.Items.Add(WF_PALETTE_NAMES[i]); @@ -1433,7 +1463,6 @@ var Result.ClrActive := TColor($00204030); Result.ClrText := CLR_TEXT; Result.ClrTextAct := CLR_ACCENT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnClick := AClick; end; @@ -1448,7 +1477,6 @@ var Result.Value := AVal; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnTXAnyChange; end; @@ -1466,7 +1494,6 @@ var Result.DecimalPlaces := 2; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnTXAnyChange; end; @@ -1478,7 +1505,6 @@ var Result.Caption := ACap; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(AW), DpiScale(22)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnTXAnyChange; end; @@ -1494,7 +1520,6 @@ begin Parent := FPageTransmit; Caption := 'Transmit'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -1505,7 +1530,6 @@ begin Caption := 'Profile and EQ hold the active TX profile; ' + 'Hardware and Display are radio properties and do not follow it.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(GRP_W), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; @@ -1642,7 +1666,6 @@ begin FTXEQControl := TEqualizerControl.Create(Self); FTXEQControl.Parent := Grp; FTXEQControl.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(GRP_W - 2 * PAD), DpiScale(326)); - FTXEQControl.Font.Name := UI_FONT; FTXEQControl.Font.Size := 9; FTXEQControl.SetThemeColors(CLR_PANEL, TColor($00202020), CLR_BORDER, TColor($00383838), CLR_TEXT, CLR_TEXTDIM, CLR_ACCENT, TColor($0055DDEE)); @@ -1775,7 +1798,6 @@ begin FEdTXRefLevel.SetBounds(DpiScale(CX), DpiScale(R1), DpiScale(96), DpiScale(BTN_H)); FEdTXRefLevel.Color := CLR_INPUT; FEdTXRefLevel.Font.Color := CLR_INPUT_TEXT; - FEdTXRefLevel.Font.Name := UI_FONT; FEdTXRefLevel.Font.Size := 9; FEdTXRefLevel.Text := '0'; FEdTXRefLevel.OnExit := OnTXAnyChange; @@ -1786,7 +1808,6 @@ begin FEdTXRange.SetBounds(DpiScale(CX), DpiScale(R1 + STEP), DpiScale(96), DpiScale(BTN_H)); FEdTXRange.Color := CLR_INPUT; FEdTXRange.Font.Color := CLR_INPUT_TEXT; - FEdTXRange.Font.Name := UI_FONT; FEdTXRange.Font.Size := 9; FEdTXRange.Text := '80'; FEdTXRange.OnExit := OnTXAnyChange; @@ -2172,7 +2193,6 @@ const E.SetBounds(DpiScale(ALeft), DpiScale(ATop), DpiScale(ED_W), DpiScale(BTN_H + 2)); E.Color := CLR_INPUT; E.Font.Color := CLR_INPUT_TEXT; - E.Font.Name := UI_FONT; E.Font.Size := 9; E.MinValue := 38.8; E.MaxValue := 100.0; @@ -2194,7 +2214,6 @@ begin Parent := FPagePA; Caption := 'Power Amplifier'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -2205,12 +2224,11 @@ begin Parent := FPagePA; Caption := 'Output limit and per-band calibration values.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(620), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; - Grp := MakeGroupPanel(FPagePA, 'Power && Calibration', MARGIN, 86, 700, GRP_H); + Grp := MakeGroupPanel(FPagePA, 'Power && Calibration', MARGIN, 86, SETTINGS_CARD_W, GRP_H); // Max Power Lbl := TLabel.Create(Self); @@ -2218,7 +2236,6 @@ begin Lbl.Caption := 'Max power (W)'; Lbl.SetBounds(DpiScale(GRP_PAD), DpiScale(R1 + 6), DpiScale(132), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; Spin := TFlatSpinEdit.Create(Self); @@ -2226,7 +2243,6 @@ begin Spin.SetBounds(DpiScale(GRP_PAD + 150), DpiScale(R1), DpiScale(ED_W), DpiScale(BTN_H + 2)); Spin.Color := CLR_INPUT; Spin.Font.Color := CLR_INPUT_TEXT; - Spin.Font.Name := UI_FONT; Spin.Font.Size := 9; Spin.MinValue := 5; Spin.MaxValue := 200; @@ -2241,7 +2257,6 @@ begin Lbl.Caption := 'Pluto TX att @100% (dB)'; Lbl.SetBounds(DpiScale(GRP_PAD + 320), DpiScale(R1 + 6), DpiScale(180), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; FEdPlutoTxMaxAtt := TFlatFloatSpinEdit.Create(Self); @@ -2249,7 +2264,6 @@ begin FEdPlutoTxMaxAtt.SetBounds(DpiScale(GRP_PAD + 510), DpiScale(R1), DpiScale(ED_W), DpiScale(BTN_H + 2)); FEdPlutoTxMaxAtt.Color := CLR_INPUT; FEdPlutoTxMaxAtt.Font.Color := CLR_INPUT_TEXT; - FEdPlutoTxMaxAtt.Font.Name := UI_FONT; FEdPlutoTxMaxAtt.Font.Size := 9; FEdPlutoTxMaxAtt.DecimalPlaces := 2; FEdPlutoTxMaxAtt.MinValue := -50; @@ -2264,7 +2278,6 @@ begin Lbl.Caption := 'Calibration per band, 38.8 ... 100.0'; Lbl.SetBounds(DpiScale(GRP_PAD), DpiScale(R1 + ROW_H + 12), DpiScale(320), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; // Band grid 4 columns × 3 rows @@ -2280,7 +2293,6 @@ begin Lbl.Caption := PA_BAND_NAMES[i] + ':'; Lbl.SetBounds(DpiScale(X), DpiScale(Y + 5), DpiScale(LBL_W), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; FEdBandCal[i] := MakeFloatSpin(Grp, X + LBL_W, Y, OnBandCalChange); @@ -2289,14 +2301,13 @@ begin // ── VHF Calibration (Transverters) ────────────────────────────────────── Grp := MakeGroupPanel(FPagePA, 'VHF Calibration (Transverters)', - MARGIN, 86 + GRP_H + 14, 700, R1 + 4 * ROW_H + 44); + MARGIN, 86 + GRP_H + 14, SETTINGS_CARD_W, R1 + 4 * ROW_H + 44); Lbl := TLabel.Create(Self); Lbl.Parent := Grp; Lbl.Caption := 'Calibration per transverter slot, 38.8 ... 100.0'; Lbl.SetBounds(DpiScale(GRP_PAD), DpiScale(R1), DpiScale(420), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; for i := 0 to CFG_XVTR_COUNT - 1 do @@ -2312,7 +2323,6 @@ begin Lbl.AutoSize := False; Lbl.SetBounds(DpiScale(X), DpiScale(Y + 5), DpiScale(VHF_LBL_W), DpiScale(18)); Lbl.Font.Color := CLR_TEXTDIM; - Lbl.Font.Name := UI_FONT; Lbl.Font.Size := 9; Lbl.ShowHint := True; FVHFCalLabels[i] := Lbl; @@ -2353,7 +2363,6 @@ const E.SetBounds(DpiScale(ALeft), DpiScale(ATop), DpiScale(CAL_ED_W), DpiScale(BTN_H + 2)); E.Color := CLR_INPUT; E.Font.Color := CLR_INPUT_TEXT; - E.Font.Name := UI_FONT; E.Font.Size := 9; E.MinValue := AMin; E.MaxValue := AMax; @@ -2385,7 +2394,6 @@ begin Parent := FPageCalib; Caption := 'Calibration'; SetBounds(DpiScale(CAL_MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; @@ -2396,7 +2404,6 @@ begin Parent := FPageCalib; Caption := 'Power/SWR detector, supply voltage/current and S-meter calibration.'; SetBounds(DpiScale(CAL_MARGIN), DpiScale(48), DpiScale(620), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; @@ -2508,7 +2515,6 @@ begin FBtnDispFromSM.ClrActive := TColor($00003300); FBtnDispFromSM.ClrText := CLR_TEXT; FBtnDispFromSM.ClrTextAct := CLR_ACCENT; - FBtnDispFromSM.Font.Name := UI_FONT; FBtnDispFromSM.Font.Size := 9; FBtnDispFromSM.Hint := 'Copy the S-meter offsets into this table'; FBtnDispFromSM.ShowHint := True; @@ -2806,20 +2812,18 @@ begin Parent := FPageAdvanced; Caption := 'Advanced'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; end; // ── ADC ─────────────────────────────────────────────────────────────────── - Grp := MakeGroupPanel(FPageAdvanced, 'ADC', MARGIN, 86, 420, 128); + Grp := MakeGroupPanel(FPageAdvanced, 'ADC', MARGIN, 86, SETTINGS_CARD_W, 128); Chk := TFlatCheckBox.Create(Self); Chk.Parent := Grp; Chk.Caption := 'Dither Enabled'; Chk.SetBounds(DpiScale(GRP_PAD), DpiScale(R1), DpiScale(260), DpiScale(22)); - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; Chk.Font.Color := CLR_TEXT; Chk.Checked := True; @@ -2830,7 +2834,6 @@ begin Chk.Parent := Grp; Chk.Caption := 'Random Enabled'; Chk.SetBounds(DpiScale(GRP_PAD), DpiScale(R1 + ROW_H), DpiScale(260), DpiScale(22)); - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; Chk.Font.Color := CLR_TEXT; Chk.Checked := True; @@ -2838,14 +2841,13 @@ begin FChkRandom := Chk; // ── Web Server ──────────────────────────────────────────────────────────── - Grp := MakeGroupPanel(FPageAdvanced, 'Web Server', MARGIN, 230, 500, 318); + Grp := MakeGroupPanel(FPageAdvanced, 'Web Server', MARGIN, 230, SETTINGS_CARD_W, 318); Y := R1; Chk := TFlatCheckBox.Create(Self); Chk.Parent := Grp; Chk.Caption := 'Enabled'; Chk.SetBounds(DpiScale(GRP_PAD), DpiScale(Y), DpiScale(260), DpiScale(22)); - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; Chk.Font.Color := CLR_TEXT; Chk.Checked := True; @@ -2859,7 +2861,6 @@ begin Spin.SetBounds(DpiScale(GRP_PAD + LBL_W + 12), DpiScale(Y), DpiScale(90), DpiScale(BTN_H)); Spin.Color := CLR_INPUT; Spin.Font.Color := CLR_INPUT_TEXT; - Spin.Font.Name := UI_FONT; Spin.Font.Size := 9; Spin.MinValue := 1; Spin.MaxValue := 65535; @@ -2874,7 +2875,6 @@ begin Ed.SetBounds(DpiScale(GRP_PAD + LBL_W + 12), DpiScale(Y), DpiScale(ED_W), DpiScale(BTN_H)); Ed.Color := CLR_INPUT; Ed.Font.Color := CLR_INPUT_TEXT; - Ed.Font.Name := UI_FONT; Ed.Font.Size := 9; Ed.Text := '0.0.0.0'; Ed.OnChange := OnWebAnyChange; @@ -2887,7 +2887,6 @@ begin Ed.SetBounds(DpiScale(GRP_PAD + LBL_W + 12), DpiScale(Y), DpiScale(ED_W), DpiScale(BTN_H)); Ed.Color := CLR_INPUT; Ed.Font.Color := CLR_INPUT_TEXT; - Ed.Font.Name := UI_FONT; Ed.Font.Size := 9; Ed.Text := 'admin'; Ed.OnChange := OnWebAnyChange; @@ -2900,7 +2899,6 @@ begin Ed.SetBounds(DpiScale(GRP_PAD + LBL_W + 12), DpiScale(Y), DpiScale(ED_W), DpiScale(BTN_H)); Ed.Color := CLR_INPUT; Ed.Font.Color := CLR_INPUT_TEXT; - Ed.Font.Name := UI_FONT; Ed.Font.Size := 9; Ed.PasswordChar := '*'; Ed.Text := 'hpsdr'; @@ -3764,9 +3762,9 @@ const PAD = 18; LW = 120; CX = PAD + LW + 8; - GRP_W = 320; - GRP_H = 272; GRP_GAP = 16; + GRP_W = (SETTINGS_CARD_W - GRP_GAP) div 2; + GRP_H = 272; CMB_W = 140; EDT_W = 160; R1 = 42; @@ -3784,7 +3782,7 @@ begin Parent := FPageCAT; Caption := 'CAT'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; + Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; end; with TLabel.Create(Self) do @@ -3792,7 +3790,7 @@ begin Parent := FPageCAT; Caption := 'Computer Aided Transceiver — serial port and TCP server settings.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(680), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; for i := 0 to 3 do @@ -3809,7 +3807,7 @@ begin Chk.Caption := 'Enable'; Chk.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(GRP_W - PAD * 2), DpiScale(22)); Chk.Font.Color := CLR_TEXT; - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; + Chk.Font.Size := 9; Chk.Tag := i; Chk.OnChange := OnCATSerialChange; FCATSerialEn[i] := Chk; @@ -3819,7 +3817,7 @@ begin Ed.Parent := Grp; Ed.SetBounds(DpiScale(CX), DpiScale(R1 + STEP), DpiScale(EDT_W), DpiScale(BTN_H)); Ed.Color := CLR_INPUT; Ed.Font.Color := CLR_INPUT_TEXT; - Ed.Font.Name := UI_FONT; Ed.Font.Size := 9; + Ed.Font.Size := 9; Ed.Tag := i; Ed.OnChange := OnCATSerialChange; {$IFDEF MSWINDOWS} @@ -3862,7 +3860,7 @@ begin Chk.Caption := 'Andromeda / G2 front panel'; Chk.SetBounds(DpiScale(PAD), DpiScale(R1 + 6 * STEP), DpiScale(GRP_W - PAD * 2), DpiScale(22)); Chk.Font.Color := CLR_TEXT; - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; + Chk.Font.Size := 9; Chk.Tag := i; Chk.OnChange := OnCATSerialChange; FCATSerialAndromeda[i] := Chk; @@ -3877,7 +3875,7 @@ begin FCATTcpEn.Caption := 'Enable TCP server (default port 19090)'; FCATTcpEn.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(300), DpiScale(22)); FCATTcpEn.Font.Color := CLR_TEXT; - FCATTcpEn.Font.Name := UI_FONT; FCATTcpEn.Font.Size := 9; + FCATTcpEn.Font.Size := 9; FCATTcpEn.OnChange := OnCATTcpChange; MakeLbl(Grp, 'Port:', PAD, R1 + STEP + 6, LW); @@ -3885,7 +3883,7 @@ begin Spin.Parent := Grp; Spin.SetBounds(DpiScale(CX), DpiScale(R1 + STEP), DpiScale(100), DpiScale(BTN_H + 2)); Spin.Color := CLR_INPUT; Spin.Font.Color := CLR_INPUT_TEXT; - Spin.Font.Name := UI_FONT; Spin.Font.Size := 9; + Spin.Font.Size := 9; Spin.MinValue := 1; Spin.MaxValue := 65535; Spin.Value := 19090; Spin.OnChange := OnCATTcpChange; @@ -4007,7 +4005,7 @@ begin Parent := FPageSlices; Caption := 'Slices'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(400), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; + Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; end; with TLabel.Create(Self) do @@ -4016,7 +4014,7 @@ begin Caption := 'A separate CAT TCP port per additional slice — external software ' + 'controls its own slice as a standalone transceiver.'; SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; with TLabel.Create(Self) do begin @@ -4024,7 +4022,7 @@ begin Caption := 'Slice A is the main receiver — it is configured on the CAT tab ' + '(serial ports and the main TCP port).'; SetBounds(DpiScale(MARGIN), DpiScale(66), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; for i := 0 to CFG_CAT_SLICE_COUNT - 1 do @@ -4041,7 +4039,7 @@ begin Chk.Caption := 'Enable CAT TCP server'; Chk.SetBounds(DpiScale(PAD), DpiScale(R1), DpiScale(GRP_W - PAD * 2), DpiScale(22)); Chk.Font.Color := CLR_TEXT; - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; + Chk.Font.Size := 9; Chk.Tag := i; Chk.OnChange := OnSliceCATCtrlChange; FSliceCATEn[i] := Chk; @@ -4051,7 +4049,7 @@ begin Spin.Parent := Grp; Spin.SetBounds(DpiScale(CX), DpiScale(R1 + STEP), DpiScale(100), DpiScale(BTN_H + 2)); Spin.Color := CLR_INPUT; Spin.Font.Color := CLR_INPUT_TEXT; - Spin.Font.Name := UI_FONT; Spin.Font.Size := 9; + Spin.Font.Size := 9; Spin.MinValue := 1; Spin.MaxValue := 65535; Spin.Value := CFG_CAT_SLICE_PORT0 + i; Spin.Tag := i; @@ -4067,7 +4065,7 @@ begin Chk.Caption := 'Auto TX'; Chk.SetBounds(DpiScale(PAD), DpiScale(R1 + 2 * STEP), DpiScale(GRP_W - PAD * 2), DpiScale(22)); Chk.Font.Color := CLR_TEXT; - Chk.Font.Name := UI_FONT; Chk.Font.Size := 9; + Chk.Font.Size := 9; Chk.Tag := i; Chk.OnChange := OnSliceCATCtrlChange; FSliceCATAutoTx[i] := Chk; @@ -4099,7 +4097,7 @@ begin Caption := 'Audio out/in belong to the slice letter: the setting moves the ' + 'slice sitting on that slot right away and the next one inherits it.'; SetBounds(DpiScale(MARGIN), DpiScale(gy), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; Inc(gy, 18); with TLabel.Create(Self) do @@ -4108,7 +4106,7 @@ begin Caption := 'Only one slice transmits at a time: while anything is already on ' + 'the air the request is ignored — no take-over.'; SetBounds(DpiScale(MARGIN), DpiScale(gy), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; with TLabel.Create(Self) do begin @@ -4116,7 +4114,7 @@ begin Caption := 'Without Auto TX a slice keys up over CAT only when it is already ' + 'the transmit source (TX badge on the slice flag).'; SetBounds(DpiScale(MARGIN), DpiScale(gy + 18), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; with TLabel.Create(Self) do begin @@ -4124,7 +4122,7 @@ begin Caption := 'The port is opened even when the slice does not exist yet — until ' + 'it is created CAT answers "radio off" (PS0).'; SetBounds(DpiScale(MARGIN), DpiScale(gy + 36), DpiScale(760), DpiScale(20)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; + Font.Size := 9; Font.Color := CLR_TEXTDIM; end; end; @@ -4257,7 +4255,6 @@ var Result.Caption := ''; Result.SetBounds(DpiScale(AX), DpiScale(0), DpiScale(22), DpiScale(20)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnAlexAnyChange; end; @@ -4270,7 +4267,6 @@ var Result.Caption := ACap; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(AW), DpiScale(20)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnAlexAnyChange; end; @@ -4283,7 +4279,6 @@ var Result.Caption := ''; Result.SetBounds(DpiScale(AX), DpiScale(0), DpiScale(22), DpiScale(20)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := Ant936xUIChange; end; @@ -4295,7 +4290,6 @@ var Result.Parent := AParent; Result.Caption := ACap; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(84), DpiScale(18)); - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.Font.Color := CLR_TEXT; end; @@ -4307,7 +4301,6 @@ var Parent := AParent; Caption := ACap; SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(30), DpiScale(16)); - Font.Name := UI_FONT; Font.Size := 9; Font.Color := CLR_TEXTDIM; end; @@ -4321,7 +4314,7 @@ begin Parent := FPageAlex; Caption := 'Antenna / Alex'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(500), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; + Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; end; FAlexSubtitle := TLabel.Create(Self); @@ -4329,7 +4322,6 @@ begin FAlexSubtitle.Caption := 'Per-band RX/TX antenna and secondary path routing for the Alex filter board.'; FAlexSubtitle.SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(680), DpiScale(20)); - FAlexSubtitle.Font.Name := UI_FONT; FAlexSubtitle.Font.Size := 9; FAlexSubtitle.Font.Color := CLR_TEXTDIM; @@ -4748,7 +4740,6 @@ var Result.DecimalPlaces := ADec; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnXvtrAnyChange; end; @@ -4763,7 +4754,6 @@ var Result.MaxValue := AMax; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnXvtrAnyChange; end; @@ -4776,7 +4766,6 @@ var Result.Caption := ''; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(22), DpiScale(20)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnXvtrAnyChange; end; @@ -4788,7 +4777,6 @@ var Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(AW), DpiScale(BTN_H)); Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.MaxLength := 15; Result.OnChange := OnXvtrAnyChange; @@ -4801,7 +4789,6 @@ var Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(AW), DpiScale(BTN_H)); Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnXvtrAnyChange; end; @@ -4819,7 +4806,6 @@ var Result.Layout := tlCenter; Result.WordWrap := True; Result.Font.Color := CLR_TEXTDIM; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; end; @@ -4831,7 +4817,7 @@ begin L.Parent := FPageXvtr; L.Caption := 'Transverters'; L.SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(500), DpiScale(28)); - L.Font.Name := UI_FONT; L.Font.Size := 16; + L.Font.Size := 16; L.Font.Style := [fsBold]; L.Font.Color := CLR_TEXT; L := TLabel.Create(Self); @@ -4840,7 +4826,7 @@ begin 'the VFO shows the displayed (RF) frequency.' + LineEnding + 'The radio is internally tuned to the IF: f_IF = f_displayed - LO + LO Error.'; L.SetBounds(DpiScale(MARGIN), DpiScale(50), DpiScale(GRP_W), DpiScale(34)); - L.Font.Name := UI_FONT; L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; + L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; L.WordWrap := True; // --- Group "Slots" --- (последний слот зарезервирован под QO-100 — не строим) @@ -4900,7 +4886,6 @@ begin + '(TUN level from Transmit is multiplied by the per-slot TX Power)'; FChkXvtrTunPwr.SetBounds(DpiScale(14), DpiScale(GRP_TITLE_H + 8), DpiScale(GRP_W - 28), DpiScale(20)); FChkXvtrTunPwr.Font.Color := CLR_TEXT; - FChkXvtrTunPwr.Font.Name := UI_FONT; FChkXvtrTunPwr.Font.Size := 9; FChkXvtrTunPwr.OnChange := OnXvtrAnyChange; @@ -4915,7 +4900,7 @@ begin 'Disable PA - keep the internal PA in RX position during TX. ' + 'RX Antenna - override the per-band antenna for this slot.'; L.SetBounds(DpiScale(MARGIN), DpiScale(GrpY + GRP_TITLE_H + 36 + 16), DpiScale(GRP_W), DpiScale(52)); - L.Font.Name := UI_FONT; L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; + L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; L.WordWrap := True; // Применяем начальное состояние disabled-строк @@ -5070,7 +5055,6 @@ var Result.Caption := ''; Result.SetBounds(DpiScale(AX), DpiScale(AY), DpiScale(PIN_W), DpiScale(20)); Result.Font.Color := CLR_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; Result.OnChange := OnOCAnyChange; end; @@ -5083,7 +5067,7 @@ begin Parent := FPageOC; Caption := 'OC Control'; SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(500), DpiScale(28)); - Font.Name := UI_FONT; Font.Size := 16; + Font.Size := 16; Font.Style := [fsBold]; Font.Color := CLR_TEXT; end; FOCSubtitle := TLabel.Create(Self); @@ -5091,7 +5075,6 @@ begin FOCSubtitle.Caption := 'Open Collector outputs (Penny/Alex board), per-band and per-transverter. openHPSDR only.'; FOCSubtitle.SetBounds(DpiScale(MARGIN), DpiScale(48), DpiScale(680), DpiScale(20)); - FOCSubtitle.Font.Name := UI_FONT; FOCSubtitle.Font.Size := 9; FOCSubtitle.Font.Color := CLR_TEXTDIM; @@ -5100,7 +5083,6 @@ begin FOCEnabled.Caption := 'Enable OC Control'; FOCEnabled.SetBounds(DpiScale(MARGIN), DpiScale(76), DpiScale(220), DpiScale(22)); FOCEnabled.Font.Color := CLR_TEXT; - FOCEnabled.Font.Name := UI_FONT; FOCEnabled.Font.Size := 9; FOCEnabled.OnChange := OnOCAnyChange; @@ -5290,7 +5272,7 @@ var Result.MinValue := AMin; Result.MaxValue := AMax; Result.Increment := AStep; Result.DecimalPlaces := ADec; Result.Color := CLR_INPUT; Result.Font.Color := CLR_INPUT_TEXT; - Result.Font.Name := UI_FONT; Result.Font.Size := 9; + Result.Font.Size := 9; Result.OnChange := OnQOAnyChange; end; @@ -5299,7 +5281,7 @@ var L := TLabel.Create(Self); L.Parent := Grp; L.Caption := Cap; L.SetBounds(DpiScale(LBL_X), DpiScale(AY + 4), DpiScale(LBL_W), DpiScale(18)); - L.Font.Color := CLR_TEXTDIM; L.Font.Name := UI_FONT; L.Font.Size := 9; + L.Font.Color := CLR_TEXTDIM; L.Font.Size := 9; end; begin @@ -5308,7 +5290,7 @@ begin L := TLabel.Create(Self); L.Parent := FPageQO; L.Caption := 'QO-100 (Es''hail-2 NB transponder)'; L.SetBounds(DpiScale(MARGIN), DpiScale(18), DpiScale(600), DpiScale(28)); - L.Font.Name := UI_FONT; L.Font.Size := 16; + L.Font.Size := 16; L.Font.Style := [fsBold]; L.Font.Color := CLR_TEXT; L := TLabel.Create(Self); @@ -5317,16 +5299,17 @@ begin 'TX uplink (~2400 MHz) direct. VFO is displayed in downlink terms; ' + 'RX and TX use separate LOs. Drift is corrected by the beacon lock.'; L.SetBounds(DpiScale(MARGIN), DpiScale(50), DpiScale(700), DpiScale(34)); - L.Font.Name := UI_FONT; L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; + L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; L.WordWrap := True; - Grp := MakeGroupPanel(FPageQO, 'Transponder', MARGIN, 100, 560, GRP_TITLE_H + 9 * 30 + 16); + Grp := MakeGroupPanel(FPageQO, 'Transponder', MARGIN, 100, + SETTINGS_CARD_W, GRP_TITLE_H + 9 * 30 + 16); Y := GRP_TITLE_H + 8; FQoEn := TFlatCheckBox.Create(Self); FQoEn.Parent := Grp; FQoEn.Caption := 'Enable QO-100 band'; FQoEn.SetBounds(DpiScale(LBL_X), DpiScale(Y), DpiScale(300), DpiScale(20)); - FQoEn.Font.Color := CLR_TEXT; FQoEn.Font.Name := UI_FONT; FQoEn.Font.Size := 9; + FQoEn.Font.Color := CLR_TEXT; FQoEn.Font.Size := 9; FQoEn.OnChange := OnQOAnyChange; Inc(Y, 32); QoLabel('LNB LO (MHz)', Y); @@ -5363,13 +5346,13 @@ begin FQoPower.Parent := Grp; FQoPower.SetBounds(DpiScale(ED_X), DpiScale(Y), DpiScale(ED_W), DpiScale(BTN_H)); FQoPower.MinValue := 0; FQoPower.MaxValue := 100; FQoPower.Value := 100; FQoPower.Color := CLR_INPUT; FQoPower.Font.Color := CLR_INPUT_TEXT; - FQoPower.Font.Name := UI_FONT; FQoPower.Font.Size := 9; + FQoPower.Font.Size := 9; FQoPower.OnChange := OnQOAnyChange; FQoInfo := TLabel.Create(Self); FQoInfo.Parent := FPageQO; FQoInfo.SetBounds(DpiScale(MARGIN), DpiScale(100 + GRP_TITLE_H + 9 * 30 + 28), DpiScale(700), DpiScale(52)); - FQoInfo.Font.Color := CLR_TEXTDIM; FQoInfo.Font.Name := 'Courier New'; + FQoInfo.Font.Color := CLR_TEXTDIM; FQoInfo.Font.Size := 9; FQoInfo.WordWrap := True; finally FLoading := False;