93 lines
3.9 KiB
Markdown
93 lines
3.9 KiB
Markdown
# 0043 — Estandarizar shell de las 4 apps C++ (About + Settings + paneles + tokens)
|
|
|
|
## Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | 0043 |
|
|
| **Estado** | pendiente |
|
|
| **Prioridad** | alta |
|
|
| **Tipo** | refactor — `cpp/apps/*` y `projects/fn_monitoring/apps/registry_dashboard` |
|
|
|
|
## Dependencias
|
|
|
|
Bloquea-por: **0041** (AppConfig extendido), **0042** (layout_storage publico).
|
|
|
|
---
|
|
|
|
## Objetivo
|
|
|
|
Que las 4 apps C++ con GUI (`shaders_lab`, `chart_demo`, `primitives_gallery`, `registry_dashboard`) sigan el mismo patron de inicializacion documentado en `cpp/PATTERNS.md` (issue 0041): About + Settings + paneles + tokens, sin reinventar boilerplate.
|
|
|
|
## Contexto
|
|
|
|
Auditoria muestra que cada app arranca distinto: solo `shaders_lab` aprovecha menubar con paneles, solo `registry_dashboard` registra About + Settings, `primitives_gallery` llama `apply_dark_theme()` + `gl_loader_init()` a mano. Tras 0041 y 0042, se puede unificar.
|
|
|
|
## Arquitectura
|
|
|
|
```
|
|
cpp/apps/
|
|
├── shaders_lab/main.cpp # MOD — usa layout_storage publico, About, init via AppConfig
|
|
├── chart_demo/main.cpp # MOD — registra About, simplifica
|
|
├── primitives_gallery/main.cpp # MOD — gl_loader_init via AppConfig, About
|
|
└── text_editor_smoke/ # SIN CAMBIOS (test CLI)
|
|
|
|
projects/fn_monitoring/apps/registry_dashboard/
|
|
└── main.cpp # MOD — usa AppConfig.about en lugar de about_window_set_info inline
|
|
```
|
|
|
|
## Tareas
|
|
|
|
### Fase 1 — chart_demo (mas simple, validacion temprana)
|
|
|
|
1.1 Cambiar a:
|
|
```cpp
|
|
return fn::run_app({
|
|
.title="chart_demo", .width=1280, .height=800,
|
|
.about={.name="chart_demo", .version="0.1.0",
|
|
.description="Demo de primitivos viz: line, scatter, bar, heatmap"}
|
|
}, render);
|
|
```
|
|
1.2 Quitar la llamada manual a `app_menubar(nullptr,0,nullptr)` del render — `run_app` la invoca por nosotros si hay panels/layouts; en este caso sin panels, dejar render limpio (o llamar `app_menubar(nullptr,0,nullptr)` solo si hace falta menubar para Settings).
|
|
1.3 Build OK.
|
|
|
|
### Fase 2 — primitives_gallery
|
|
|
|
2.1 Quitar `apply_dark_theme()` y `gl_loader_init()` del init manual (l. 129-134). Pasar `init_gl_loader=true` y `theme=ThemeMode::FnDark` en `AppConfig`.
|
|
2.2 Anadir About (`name="Primitives Gallery"`, version, description).
|
|
2.3 Mantener `app_menubar(nullptr,0,nullptr)` solo si la menubar la quiere la app — opcionalmente delegar a `run_app` extendido.
|
|
2.4 Build OK.
|
|
|
|
### Fase 3 — registry_dashboard
|
|
|
|
3.1 Reemplazar la llamada manual `about_window_set_info(...)` (l. 121-127) por `AppConfig::about={...}`. La seccion `Status` se queda como `settings_window_add_section` (no cambia).
|
|
3.2 Build OK.
|
|
|
|
### Fase 4 — shaders_lab
|
|
|
|
4.1 Reemplazar el bloque de layouts inline por `fn_ui::layout_storage_open("shaders_lab.db")` + `layout_storage_make_callbacks` (consume issue 0042).
|
|
4.2 Anadir About (`name="shaders_lab"`, version, description).
|
|
4.3 Pasar `panels` y `layouts_cb` via `AppConfig` (issue 0041) — quitar la llamada manual a `app_menubar`.
|
|
4.4 Build OK.
|
|
|
|
### Fase 5 — Verificacion cross
|
|
|
|
5.1 Build Linux y Windows de las 4 apps.
|
|
5.2 Run rapido en Linux para confirmar que About y Settings/Status aparecen en el menubar de cada una.
|
|
|
|
## Decisiones de diseno
|
|
|
|
- Tocar registry_dashboard para que sea consistente con el patron, aunque hoy ya tenia About/Settings via APIs sueltas.
|
|
- text_editor_smoke se queda igual (es un test CLI).
|
|
|
|
## Riesgos
|
|
|
|
- Si `run_app` invoca `app_menubar` y la app tambien lo llama, salen dos menubars. Verificar que cada main.cpp solo llama `app_menubar` si NO esta declarado en AppConfig.
|
|
- shaders_lab: la migracion a `layout_storage` debe preservar layouts existentes — ver riesgo de 0042.
|
|
|
|
## Validacion
|
|
|
|
- Las 4 apps abren y muestran menu Settings con Settings… + About… (mas Status… donde aplique).
|
|
- shaders_lab guarda/carga layouts despues de la migracion.
|
|
- `cmake --build` pasa para todas. Cross-compile Windows OK.
|