70 lines
2.6 KiB
Markdown
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.
|