Files
fn_registry/dev/issues/completed/0043-cpp-apps-standardize-shell.md
T
2026-04-29 00:08:56 +02:00

3.9 KiB

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.