---
name: log_window
kind: function
lang: cpp
domain: core
version: "1.0.0"
purity: impure
signature: "bool fn_ui::log_window_is_open(); void fn_ui::log_window_set_open(bool); void fn_ui::log_window_toggle(); bool fn_ui::log_window_menu_item(const char* label = \"Logs...\"); void fn_ui::log_window_render()"
description: "Ventana flotante 'Logs' para apps C++ del registry. Muestra el ring buffer in-memory de fn_log con filtros por nivel (Debug/Info/Warn/Error), buscador por substring y autoscroll. Se abre desde el submenu Settings -> Logs... de la MainMenuBar."
tags: [imgui, logger, viewer, window, ui]
uses_functions: [logger_cpp_core]
uses_types: [log_level_cpp_core, log_entry_cpp_core]
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [imgui, cstring]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/core/log_window.cpp"
framework: imgui
params:
  - name: v
    desc: "Estado deseado de la ventana (open=true / closed=false) en log_window_set_open"
  - name: label
    desc: "Texto del MenuItem en la menubar (default 'Logs...')"
output: "log_window_render no-op si is_open == false. log_window_menu_item retorna true si el usuario clico el item. Las demas mutan estado global del modulo"
notes: "consumido por cpp/framework/app_base.cpp (render automatico) y cpp/functions/core/app_menubar.cpp (menu item)"
---

# log_window

Visualizador ImGui del ring buffer de `fn_log`. Render automatico via `fn::run_app`.

## UI

- **Toolbar superior:** checkboxes para mostrar/ocultar Debug, Info, Warn, Error; campo de busqueda por substring; checkbox de autoscroll; boton `Clear` para vaciar el buffer in-memory; al lado, la ruta del archivo de log activo (si hay).
- **Region central:** lista de lineas formateadas, coloreadas por nivel (gris/blanco/ambar/rojo).
- **Footer:** contador de entradas vs capacidad del buffer (2000 por defecto).

## Apertura

- Submenu **Settings -> Logs...** del menubar canonico (via `app_menubar`).
- Programaticamente: `fn_ui::log_window_set_open(true)`.

## Reglas

- No toca el archivo en disco; solo lee el buffer in-memory de `fn_log`.
- `Clear` borra el buffer pero NO trunca el archivo.
- Funciona aunque la app no haya llamado `logger_init` (el buffer existe siempre).
- Single-threaded como cualquier ventana ImGui — no llamar `log_window_render` desde otro hilo.
