3.7 KiB
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 conBeginTable+PushStyleColorrepetido (l. 87, 143, 321),BeginChildcon borde+padding (l. 122).primitives_gallery/main.cpp: sidebar conSelectable+PushStyleColor(l. 91-124).shaders_lab/main.cpp: modal save-as custom (l. 272-300) que reimplementa lo que hacemodal_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_containerpor ahora —chart_demolo 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).
Fase 2 — primitives_gallery sidebar
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/EndTabBarpara 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
selectpuede no soportar grupos por categoria con encabezado — verificar API actual. Si no lo soporta, usartree_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).