Files
fn_registry/dev/issues/completed/0043-cpp-apps-standardize-shell.md
T

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
cpp-stack
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.

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.