Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.2 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0043 | Estandarizar shell de las 4 apps C++ (About + Settings + paneles + tokens) | completado | refactor |
|
multi-app | alta | 2026-05-17 | 2026-05-17 |
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:
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_appinvocaapp_menubary la app tambien lo llama, salen dos menubars. Verificar que cada main.cpp solo llamaapp_menubarsi NO esta declarado en AppConfig. - shaders_lab: la migracion a
layout_storagedebe 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 --buildpasa para todas. Cross-compile Windows OK.