diff --git a/MainForm.pas b/MainForm.pas index f0d98f6..7d17be9 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -2755,6 +2755,14 @@ begin // Стек панов: регионы по долям, каждый пан раскладывает свой стек // спектр/линейка/сплиттер/водопад/пан-зум внутри своего региона. LayoutPanStack(WideH); + // Доп. панадаптер приходит со своим слайсом и сразу показывает его флаг — + // главный приёмник должен быть представлен флагом A с того же момента + // (раньше флаг A появлялся только от слайса, созданного на самом пане 0). + if FPan <> nil then + begin + FPan.MainFlagForced := PanCount > 1; + FPan.UpdateMainFlagVisibility; + end; PositionSampleRateOverlay; end; diff --git a/PanafallPanel.pas b/PanafallPanel.pas index 9f221d2..adaebc4 100644 --- a/PanafallPanel.pas +++ b/PanafallPanel.pas @@ -84,6 +84,7 @@ type FActiveFlag: TVfoOverlay; // чьё событие сейчас обрабатывается FPendingSliceClose: Integer; // SliceId к удалению после мыши (0=нет) FMainFlagPinned: Boolean; // True = левая панель хозяина скрыта + FMainFlagForced: Boolean; // True = есть доп. панадаптеры FLastSliceMeterMs: QWord; // троттлинг S-метра слайсов (~10 Гц) FLastSliceDMRMs: QWord; // семантический DMR-статус (~4 Гц) FOnWireFlag: TWireFlagEvent; @@ -278,7 +279,8 @@ type function CursorOverDisplay: Boolean; // курсор над спектром/водопадом пана // Единый packing всех флагов (A+B+) в один ряд, без наездов. procedure LayoutFlags; - // Флаг A виден: панель хозяина скрыта (MainFlagPinned) ИЛИ есть слайсы B+. + // Флаг A виден: панель хозяина скрыта (MainFlagPinned) ИЛИ есть слайсы B+ + // ИЛИ хозяин требует его принудительно (MainFlagForced — доп. панадаптеры). procedure UpdateMainFlagVisibility; procedure PushSliceFlagState(SliceId: Integer); procedure PushAllSliceFlagStates; // все флаги панели (после смены rate и т.п.) @@ -297,6 +299,9 @@ type property Controller: TRadioController read FController write FController; property MainFlag: TVfoOverlay read FMainFlag; property MainFlagPinned: Boolean read FMainFlagPinned write FMainFlagPinned; + // Хозяин форсит флаг A (есть доп. панадаптеры — их слайсы должны быть + // представлены флагом и на главном приёмнике). + property MainFlagForced: Boolean read FMainFlagForced write FMainFlagForced; // Проводка семантических событий флага (MODE/DSP/AUD/…) — хозяин. property OnWireFlag: TWireFlagEvent read FOnWireFlag write FOnWireFlag; // Слайс закрыт «×» — хозяину сбросить активный слайс и т.п. @@ -1286,15 +1291,16 @@ begin end; // Флаг главного приёмника (слайс A) виден, когда СКРЫТА левая панель хозяина -// (MainFlagPinned) ЛИБО есть доп. слайсы (B+): тогда A всегда представлен -// флагом рядом с B/C…, а сворачивание/раскрытие панели при живых слайсах не -// дёргает его появление. +// (MainFlagPinned) ЛИБО есть доп. слайсы (B+) ЛИБО живут доп. панадаптеры +// (MainFlagForced — их слайсы уже показаны флагами, главный приёмник должен +// быть представлен так же): тогда A всегда представлен флагом рядом с B/C…, +// а сворачивание/раскрытие панели при живых слайсах не дёргает его появление. procedure TPanafallPanel.UpdateMainFlagVisibility; var ShouldShow: Boolean; begin if (FMainFlag = nil) or (FController = nil) then Exit; - ShouldShow := FMainFlagPinned or (Length(FSliceFlags) > 0); + ShouldShow := FMainFlagPinned or FMainFlagForced or (Length(FSliceFlags) > 0); if ShouldShow = FMainFlag.Visible then Exit; if ShouldShow then begin diff --git a/ewsdr.lpi b/ewsdr.lpi index 36c821f..f7ae74f 100644 --- a/ewsdr.lpi +++ b/ewsdr.lpi @@ -17,9 +17,9 @@ - + - + @@ -135,6 +135,7 @@ +