data_table v1.3.1: Dots renderer via ImDrawList (font-independent) + recompile all apps with fn_table_viz (issue 0081-O.6)

- Replace TextColored+glyph with ImDrawList::AddCircleFilled in CellRenderer::Dots.
  Dots are now font-independent: no dependency on Unicode glyph coverage. Fixes
  "dots show as ?" on Karla/Roboto/Inter fonts that lack Geometric Shapes block.
- dots_glyph_size now controls circle radius (px) instead of font scale.
- BadgeRule.label is ignored for Dots (documented in data_table_types.h + docs).
- data_table.md bumped to v1.3.1 with capability growth log entry.
- docs/capabilities/data_table_renderers.md: Dots section updated + Common pitfalls
  entry added: "Asumir que cualquier glyph Unicode renderea".
- dag_engine_ui/tabs.cpp: removed stale "● glyph" comment from BadgeRule.
- Recompiled: dag_engine_ui, registry_dashboard, graph_explorer, navegator_dashboard,
  odr_console. All 5 apps deployed to Desktop/apps/. Build Linux + tests 4/4 green.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 17:35:22 +02:00
parent 4acf6986d3
commit 0b9af8f1bb
5 changed files with 55 additions and 34 deletions
+14 -5
View File
@@ -1,4 +1,4 @@
# data_table_renderers — declarative cell renderers (v1.3.0)
# data_table_renderers — declarative cell renderers (v1.3.1)
Tag: `cpp-tables` (mismo grupo que TQL; los renderers son parte del stack `data_table`).
@@ -223,7 +223,9 @@ recent.tooltip_on_hover = true; // hover sobre cada dot muestra el status strin
// "success,success,failed,running,pending"
```
Resultado visual: `● ● ● ● ●` (verde verde rojo amarillo gris).
Resultado visual: 5 circulos solidos coloreados (verde verde rojo amarillo gris).
Cada dot se dibuja con `ImDrawList::AddCircleFilled` — primitiva ImGui pura, sin dependencia de glyph Unicode. Funciona con cualquier fuente (Karla, Roboto, Inter, Tabler).
Campos de `ColumnSpec` para Dots:
@@ -232,11 +234,11 @@ Campos de `ColumnSpec` para Dots:
| `dots_separator` | `','` | Caracter separador de tokens en el cell value |
| `dots_max` | `0` (sin limite) | Limite hard de dots a mostrar |
| `dots_show_count` | `false` | Si true, añade ` (N)` al final con el total de tokens |
| `dots_glyph_size` | `0.0` | Tamaño en px del glyph; 0 = tamaño de fuente por defecto |
| `dots_glyph_size` | `0.0` | Radio del circulo en px; 0 = `font_height * 0.32` (auto) |
Color lookup: igual que Badge — cada token se busca exactamente en `badges.value`.
Sin match: gris tenue `#666673`. Glyph por defecto: `●` (U+25CF). Para overridearlo,
poner el glyph UTF-8 en `BadgeRule.label`.
Sin match: gris tenue `IM_COL32(110, 110, 125, 255)`. `BadgeRule.label` es ignorado
en Dots (solo aplica al renderer Badge).
TQL: `renderer = "dots"`, campos opcionales `dots_separator`, `dots_max`, `dots_show_count`, `dots_glyph_size`.
@@ -284,6 +286,13 @@ Badge espera **valores discretos** (enum-like: ok/error/running). Para texto lib
Si la accion es "abrir detalle del row", no uses Button por row. Usa `RowDoubleClick` event + handler comun. Mas limpio y sin IDs de ImGui por fila.
### Asumir que cualquier glyph Unicode renderea
Las fuentes del proyecto (Karla, Roboto, Inter, Tabler) cubren Latin-1 + Tabler private use area. NO incluyen Geometric Shapes (●, ▲), Misc Symbols (★) ni Dingbats (✓). Si quieres usar uno de estos:
- **Para dots de status:** usa `CellRenderer::Dots` (primitiva `ImDrawList`, no depende de fuente).
- **Para checkmarks/X:** usa `TI_CHECK` / `TI_X` via `icon_name` en `IconMapEntry`.
- **Para texto puro con ●:** considera añadir un font fallback con Geometric Shapes (no recomendado — usa Dots renderer).
### Progress con valores fuera de 0..1
Progress espera `0..1`. Si tu valor es `0..100`, set `progress_scale_100 = true` o normaliza antes.