Files
fn_registry/dev/issues/completed/0046-cpp-refactor-raw-imgui.md

3.9 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
0046 Reemplazar raw ImGui en apps por primitivos del registry completado refactor
cpp-stack
multi-app media
2026-05-17 2026-05-17

0046 — Reemplazar raw ImGui en apps por primitivos del registry

Metadata

Campo Valor
ID 0046
Estado pendiente
Prioridad media
Tipo refactor — cpp/apps/* y projects/fn_monitoring/apps/registry_dashboard

Dependencias

Bloquea-por: 0043 (apps con shell estandarizado, evita conflictos al refactor).


Objetivo

Eliminar el uso innecesario de raw ImGui en las 4 apps GUI: tablas custom, Selectable con styling manual, modales propios y BeginChild con borde+padding repetido. Sustituir por primitivos del registry (dashboard_grid, dashboard_panel, tree_view/select, modal_dialog, tokens).

Contexto

Auditoria conto:

  • registry_dashboard/views.cpp: 33 raw calls — tablas con BeginTable + PushStyleColor repetido (l. 87, 143, 321), BeginChild con borde+padding (l. 122).
  • primitives_gallery/main.cpp: sidebar con Selectable + PushStyleColor (l. 91-124).
  • shaders_lab/main.cpp: modal save-as custom (l. 272-300) que reimplementa lo que hace modal_dialog.

Arquitectura

projects/fn_monitoring/apps/registry_dashboard/views.cpp   # MOD — usar dashboard_panel/grid en lugar de BeginTable+styling
cpp/apps/primitives_gallery/main.cpp                       # MOD — sidebar via tree_view o select
cpp/apps/shaders_lab/main.cpp                              # MOD — save-as via modal_dialog + text_input

Posibles primitivos faltantes detectados (crear si no existen):

  • No crear tab_container por ahora — chart_demo lo usa OK con tabs nativos. Solo extraer si se repite.

Tareas

Fase 1 — registry_dashboard/views.cpp

1.1 Sustituir chart_panel_begin/end (l. 105-127) por llamadas a dashboard_panel si encaja. 1.2 Cambiar BeginTable("##chart_grid", 4, ...) por dashboard_grid (4 cols stretchsame). 1.3 Mismo cambio en BeginTable("##kpi_grid", 4, ...) y BeginTable("##proj_layout", 2, ...). 1.4 BeginChild en draw_projects_list (proj_tree, proj_detail) → usar dashboard_panel con Borders=true. 1.5 Al final del refactor: contar raw ImGui::Begin* en views.cpp. Meta: <10 (de 33).

2.1 Sustituir el bloque for (...) { Selectable + PushStyleColor } (l. 96-122) por fn_ui::select(...) con la lista de demos, o por tree_view agrupado por categoria si la API encaja. 2.2 Mantener visualmente equivalente (separadores por categoria, item activo coloreado).

Fase 3 — shaders_lab save-as modal

3.1 Reemplazar el bloque BeginPopupModal (l. 272-300) por fn_ui::modal_dialog_begin("Save layout as...", &g_show_save_as, ImVec2(360, 0)) + text_input(...) + buttons + modal_dialog_end().

Fase 4 — Build cross

4.1 Build Linux y Windows de las 3 apps modificadas. 4.2 Run rapido en Linux para verificar que el comportamiento es identico (solo cambia la implementacion).

Fase 5 — Reporte

5.1 Anadir al final del issue una tabla "antes/despues" con:

  • LoC de cada main.cpp / views.cpp.
  • Numero de raw ImGui::* calls antes/despues.

Decisiones

  • Mantener ImGui::BeginTabBar/EndTabBar para tabs simples (chart_demo, dashboard) — son delgaditos y no aportan valor envolverlos.
  • No crear primitivos nuevos en este issue. Si en el camino aparece un patron repetido, abrir issue separado.

Riesgos

  • select puede no soportar grupos por categoria con encabezado — verificar API actual. Si no lo soporta, usar tree_view.
  • Conflicto potencial con 0043 si ambos tocan los mismos main.cpp. Por eso 0046 depende de 0043.

Validacion

  • Las 3 apps se ven igual visualmente (mismo dark theme, mismas zonas).
  • Build OK.
  • Reduccion clara de raw calls (verificable con grep -c "ImGui::Begin" archivo).