feat(bandplan): диапазон OIRT 65-74 МГц в плане Pluto (кнопка перед FM)

VU-план (Pluto) расширен до 12 слотов: OIRT (65..74 МГц, дефолт 69 МГц)
вставлен перед FM. HF-план (openHPSDR) остаётся 11-диапазонным — 12-й слот
пустой, кнопка прячется (RelabelBands). CAT индексный (OIRT = band 08 на
Pluto), SetBand игнорирует пустой слот. Web bandSel строится динамически из
BandPlan; пустые слоты пропускаются.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 21:40:05 +03:00
co-authored by Claude Opus 4.8
parent bf21b49bc3
commit cdbdfec792
5 changed files with 37 additions and 20 deletions
+10 -2
View File
@@ -63,7 +63,7 @@ const
CLR_SPECTRUM = TColor($0044FF44);
WDSP_WISDOM_FILE = 'wdspWisdom00';
BAND_COUNT = 11;
BAND_COUNT = 12; // макс. слотов среди планов (Pluto VHF/UHF = 12, HF = 11)
MODE_COUNT = 11;
// Полосы/дефолты фильтров (FILT_COUNT, FILT_*_BW, FILT_*_DEF, FILT_FM_*)
// перенесены в Settings.pas — нужны TRadioController. Здесь остаются только
@@ -96,8 +96,10 @@ const
FM_STEP_NAMES: array[0..3] of string = ('6.25k', '12.5k', '20k', '25k');
FM_STEP_DEF = 3; // 25 kHz
// Стартовые подписи band-кнопок (HF-план); RelabelBands переписывает под
// активный бэкенд. 12-й слот пуст — в HF-плане кнопка прячется.
BAND_NAMES: array[0..BAND_COUNT-1] of string = (
'160m','80m','60m','40m','30m','20m','17m','15m','12m','10m','6m');
'160m','80m','60m','40m','30m','20m','17m','15m','12m','10m','6m','');
MODE_NAMES: array[0..MODE_COUNT-1] of string = (
'LSB','USB','DSB','CWL','CWU','FM','AM','SAM','DIGU','DIGL','WFM');
@@ -2003,6 +2005,8 @@ begin
LeftPanelButtonWidth(LEFT_W, 6, i mod 6),
BTN_SM, BtnBandClick);
B.Tag := i;
// Пустой стартовый слот (12-й в HF-плане) прячем до RelabelBands.
if BAND_NAMES[i] = '' then B.Visible := False;
BtnBand[i] := B;
end;
// XVTR кнопки создаются позже (в RebuildXvtrButtons), их Tag = -(idx+1)
@@ -3849,7 +3853,11 @@ begin
pl := FController.IsPluto;
for i := 0 to BAND_COUNT - 1 do
if BtnBand[i] <> nil then
begin
BtnBand[i].Caption := BandName(i, pl);
// Пустой слот плана (HF: 12-й) — прячем кнопку.
BtnBand[i].Visible := BtnBand[i].Caption <> '';
end;
end;
procedure TMainForm.ApplyBackendCapsToUI;