---
name: chart_demo
lang: cpp
domain: viz
description: "Demo ImGui de primitivos viz del registry: line_plot, scatter_plot, bar_chart, heatmap. Cada chart en su propia tab del TabBar. Usado como showcase y como build gate de las funciones viz/."
tags: [imgui, demo, charts, viz, showcase]
uses_functions:
  - line_plot_cpp_viz
  - scatter_plot_cpp_viz
  - bar_chart_cpp_viz
  - heatmap_cpp_viz
  # logger, app_menubar viven en fn_framework — no se listan aqui
uses_types: []
framework: "imgui"
entry_point: "main.cpp"
dir_path: "cpp/apps/chart_demo"
repo_url: ""
---

## Que hace

App de una sola ventana con cuatro tabs (Line / Scatter / Bar / Heatmap) que
renderiza datos sinteticos para mostrar el aspecto y la API de los primitivos
viz del registry. Sirve como:

- **Showcase visual** de las funciones viz existentes — al añadir una nueva
  primitiva, anadir su tab aqui es la forma natural de probar el binding.
- **Build gate**: si una de las funciones rompe API, esta app deja de
  compilar y lo cazamos sin tener que tocar `registry_dashboard` o
  `graph_explorer`.

## Estructura

`main.cpp` (~93 lineas):

- `init_data()` — genera arrays sinteticos una vez (estado modulo).
- `render()` — DockSpaceOverViewport + TabBar con 4 tabs, cada una invoca
  un primitivo del registry.
- `main()` → `fn::run_app(...)` con AppConfig estandar (titulo, tamaño,
  about, log).

## Build

```bash
# Linux
cd cpp && cmake -B build/linux -S . && cmake --build build/linux --target chart_demo

# Windows (cross-compile)
cd cpp && cmake -B build/windows -S . -DCMAKE_TOOLCHAIN_FILE=toolchains/mingw-w64.cmake \
  && cmake --build build/windows --target chart_demo
```

## Decisiones

- `viewports = true` (default de `fn::run_app`): las ventanas se pueden
  arrastrar fuera del main window.
- `init_gl_loader = false`: solo usa ImGui/ImPlot, sin gl* directo.
- Sin persistencia propia (no abre BD).
- `log: file_path = "chart_demo.log"` con nivel Debug — el `init_data`
  emite info+debug para verificar que el logger funciona.
