mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feat(slices): per-pan дисплей — палитра/gamma/уровни на пан («◑»-поповер)
Кнопка «◑» в шапке каждого пана открывает компактный поповер настроек отображения (палитра, gamma, ref/range спектра, авто-уровень водопада + offset/ручные min-max). Модель «глобальный дефолт + override на пан»: пан 0 правит глобальные поля рендера (зеркалятся в контроллер), паны N ставят DisplayOverride и персистятся в воркспейс раздельно КВ/трансвертер. - PanDisplayPopup.pas (new): borderless fsStayOnTop форма, гаснет по OnDeactivate; Flat*-контролы; крестик «×» закрытия; дим-хинт «правки применяются и сохраняются сами»; кнопки «⟳ Reset»/«⇄ Copy to all». - TPanafallPanel: FBtnDisplay + OnDisplayClick + DisplayOverride; PositionHeaderChildren каскадит [×][⧉][◑] справа по Visible. - MainForm: OnPanDisplayClick/Applied/Reset/ApplyAll + ApplyGlobalRenderToView + MarkPanDisplayDirty. При смене палитры/сбросе чистим историю GL-водопада (TSpectrumView.ClearWaterfall) — GL хранит уже раскрашенные пиксели. - Settings/TPanCfg: под-объект 'display' (палитра/gamma/ref/range/wf-уровни), пишется только при override. Глобальными осознанно оставлены разрешение анализатора, MSAA, скорость водопада, детектор/усреднение (движок/перф, не косметика). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+44
-1
@@ -712,13 +712,56 @@ RATEPROBE удалены.** Наблюдение юзера: смена rate Г
|
||||
- Авто-promotion (слайс уехал за край пана → предлагать новый пан) — нет,
|
||||
осознанно: только явное создание пана (решение «сначала статика» остаётся).
|
||||
- Настройки водопада (палитра/AGC/avg) per-pan или глобально — стартуем с
|
||||
наследования глобальных, разделим по запросу.
|
||||
наследования глобальных, разделим по запросу. ★РЕШЕНО/РЕАЛИЗОВАНО 2026-07-13
|
||||
(см. блок «PER-PAN ДИСПЛЕЙ» ниже).
|
||||
- **Компоновка панов сеткой** (запрос юзера 2026-07-11): не только вертикальный
|
||||
стек — например, пан 0 сверху во всю ширину, паны B и C ниже бок о бок
|
||||
(пол-ширины каждый), и т.п. Идея на после 3.3/3.5: обобщить `LayoutPanStack`
|
||||
до грид-раскладки (регион пана = прямоугольник, а не полоса; `StackTop/Height`
|
||||
→ `Rect`), сплиттеры по обеим осям. Не блокер текущего этапа.
|
||||
|
||||
**PER-PAN ДИСПЛЕЙ (2026-07-13, собирается, dispcfgtest ALL PASS, НЕ закоммичен,
|
||||
НА ЭКРАНЕ НЕ ПРОВЕРЕН)**
|
||||
|
||||
UX залочен с юзером: кнопка «◑» в шапке каждого пана открывает компактный
|
||||
поповер настроек отображения. Модель — **глобальный дефолт + override на пан**:
|
||||
- Пан 0 «◑» правит ГЛОБАЛЬНЫЕ поля рендера (`FController.FWf*`/`FSpec*`),
|
||||
зеркалятся в контроллер, persist глобальных при закрытии (FormDestroy →
|
||||
SaveGlobalSettings). Solo пан 0 (нет доп. панов ⇒ шапка скрыта) правится
|
||||
штатным диалогом настроек — «◑» виден только при видимой шапке (>=2 панов).
|
||||
- Паны N при первой правке ставят `DisplayOverride:=True`; их рендер
|
||||
персистится в воркспейс раздельно по контексту (КВ/xvtr).
|
||||
- «Reset» (только паны N) — снять override, вернуть глоб. дефолт.
|
||||
«Apply all» — раскатать текущий рендер пана на все паны + сделать глоб.
|
||||
дефолтом.
|
||||
|
||||
Что per-pan (view-side, дёшево — всё уже в `Pan.View`): палитра, gamma,
|
||||
ref level, range, водопад авто-уровень + offset + ручные min/max. Что осталось
|
||||
ГЛОБАЛЬНЫМ (движок/перф, не косметика): DisplayPixels (разрешение анализатора),
|
||||
MSAA, WfSpeedDiv, детектор/усреднение спектра и водопада.
|
||||
|
||||
Реализация:
|
||||
- Новый юнит **PanDisplayPopup.pas**: `TPanDisplayPopup` = borderless
|
||||
`fsStayOnTop` форма, гаснет по `OnDeactivate`; Flat*-контролы (combo палитры,
|
||||
float-spin gamma, int-spin уровней, чекбокс авто). Combo-дропдаун парентится
|
||||
к самой форме (child) ⇒ не деактивирует поповер. Правки применяются к
|
||||
`P.View` живьём → `OnApplied(P)`.
|
||||
- **TPanafallPanel**: `FBtnDisplay` («◑», Owner=FHeaderPanel ⇒ освобождается
|
||||
авто с шапкой, в Destroy не нужен), `OnDisplayClick`, `DisplayOverride`.
|
||||
`PositionHeaderChildren` каскадит `[×][⧉][◑]` справа налево по `Visible`.
|
||||
- **MainForm**: `OnPanDisplayClick` (лениво создаёт `FPanDisplayPopup`, показ
|
||||
под кнопкой), `OnPanDisplayApplied/Reset/ApplyAll`, `ApplyGlobalRenderToView`,
|
||||
`MarkPanDisplayDirty` (инвалидция сетки спектра + водопада; `SetWfPalette/
|
||||
Gamma` сами no-op-гардят и метят LUT к пересбору). Поповер прячется в
|
||||
`ClosePanadapter` (FPan мог висеть → перепривязка на след. показе).
|
||||
- **Settings/TPanCfg**: `HasDisplay` + `DPalette/DGamma/DSpecRef/DSpecRange/
|
||||
DWfAGC/DWfOffset/DWfHigh/DWfLow`; под-объект `'display'` пишется ТОЛЬКО при
|
||||
override; чтение = присутствие блока. Save/RestorePanWorkspaceCtx прокинуты.
|
||||
|
||||
Файлы: `PanDisplayPopup.pas` (new), `PanafallPanel.pas`, `MainForm.pas`,
|
||||
`Settings.pas`. NEXT: экранная проверка (палитра/gamma/уровни на пан, Reset/
|
||||
ApplyAll, тёплый рестарт восстанавливает override панов N раздельно КВ/xvtr).
|
||||
|
||||
## Отвергнутые альтернативы (для истории)
|
||||
|
||||
Старый черновик Этапа 3 предлагал «off-span слайсы»: слайс вне видимой
|
||||
|
||||
Reference in New Issue
Block a user