--- 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: false tests: [] test_file_path: "" 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" --- # 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.