feat(slices): этап 3.4 ADC-селектор панов + этап 3.5 pop-out в отдельное окно

3.4 ADC-селектор:
- Caps.NumADCs (HPSDR: 2 для ORION/ORION2/SATURN, как Pkt.NumADCs; Pluto: 1)
- controller.PanADC/SetPanADC: пан 0 = FMainADCSrc + ConfigureDDCs (ADC
  прокинут и в штатные вызовы — смена rate не сбрасывает выбор), паны N =
  FPanADC[] + SetPanDDC (RebuildDDCSpecific)
- Бейдж «A1/A2» в шапке каждого пана (виден при NumADCs>1), клик = тумблер;
  пан 0 на ADC2 закрывает сценарий rx2-support

3.5 Pop-out:
- «⧉» в шапке панов N → PopOutPan: TForm.CreateNew + ReparentTo (перенос
  всех контролов панели), [×] окна = DockBackPan (возврат в стек), «×»
  шапки = закрыть пан; LayoutPanStack скипает плавающих; колесо окна =
  FormMouseWheel
- GL: reparent пересоздаёт контексты → ResetGLCache обеих канв без glDelete
  (по прецеденту MSAA); TWaterfallViewOpenGL.ResetGLCache новый, история
  водопада перезаливается из CPU-буфера

Проверено юзером на экране (беглый тест: селектор и pop-out работают).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 23:54:09 +03:00
co-authored by Claude Fable 5
parent e5921b8196
commit 8bf8bcfc76
9 changed files with 348 additions and 9 deletions
+11
View File
@@ -49,6 +49,8 @@ type
procedure SetTheme(const T: TAppTheme); override;
procedure ResetWfBuf; override;
procedure ResetWfAvgBuf; override;
// Контекст умер (reparent/пересоздание хэндла): обнулить id БЕЗ glDelete.
procedure ResetGLCache;
end;
implementation
@@ -94,6 +96,15 @@ begin
FGLControl := C;
end;
procedure TWaterfallViewOpenGL.ResetGLCache;
begin
FTexture := 0;
FMarkerTex := 0;
FTexW := 0;
FTexH := 0;
FMarkerText := '';
end;
procedure TWaterfallViewOpenGL.DeleteTexture(var Tex: GLuint);
begin
if Tex <> 0 then glDeleteTextures(1, @Tex);