Files
fn_registry/cpp/functions/viz/table_view.md
T

70 lines
2.6 KiB
Markdown

---
name: table_view
kind: component
lang: cpp
domain: viz
version: "1.0.0"
purity: pure
signature: "bool table_view(const char* id, const char* const* headers, int col_count, const char* const* cells, int row_count)"
description: "Renderiza una tabla interactiva con sorting y scroll usando ImGui Tables API"
tags: [imgui, table, visualization, dashboard, data]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui]
tested: true
tests:
- "compiles and links against Catch2 (placeholder, visual cubierto en 0048)"
test_file_path: "cpp/tests/test_table_view.cpp"
file_path: "cpp/functions/viz/table_view.cpp"
framework: imgui
params:
- name: id
desc: "Identificador unico de la tabla para ImGui (debe ser unico en el frame)"
- name: headers
desc: "Array de strings con los nombres de las columnas"
- name: col_count
desc: "Numero de columnas"
- name: cells
desc: "Array flat row-major de strings; acceso a celda (row, col) via cells[row * col_count + col]"
- name: row_count
desc: "Numero de filas de datos, sin contar el header"
output: "true si la tabla se renderizo visible, false si fue clipped o skipped por ImGui"
notes: "scaffolding/demo en primitives_gallery"
---
# table_view
Wrapper atomico sobre `ImGui::BeginTable` / `ImGui::EndTable`. Renderiza una tabla con las siguientes capacidades:
- **Borders**: bordes entre celdas y columnas
- **Sortable**: muestra indicadores de orden en los headers (el caller es responsable de ordenar `cells` antes de llamar)
- **RowBg**: filas alternadas con color de fondo
- **Resizable**: el usuario puede arrastrar los separadores de columna
- **ScrollY**: scroll vertical con altura fija de 300px
- **Reorderable**: el usuario puede reordenar columnas arrastrando los headers
El caller controla el orden de los datos — `table_view` solo habilita el flag `Sortable` para que ImGui muestre los indicadores visuales, pero no reordena `cells` internamente.
Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo).
## Ejemplo
```cpp
const char* headers[] = {"Nombre", "Valor", "Estado"};
const char* cells[] = {
"Alpha", "1.23", "OK",
"Beta", "4.56", "WARN",
"Gamma", "7.89", "ERROR",
};
table_view("##mi_tabla", headers, 3, cells, 3);
```
## Notas
- `id` debe comenzar con `##` si no se quiere mostrar como titulo de ventana en el contexto ImGui.
- El outer size fijo de `ImVec2(0, 300)` puede parametrizarse en una version futura.
- El sorting real de datos queda fuera del scope de esta funcion para mantenerla pura y componible.