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 @@
+