chore: auto-commit (97 archivos)

- .claude/CLAUDE.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- bash/functions/infra/build_cpp_windows.sh
- cpp/CMakeLists.txt
- cpp/PATTERNS.md
- cpp/framework/app_base.cpp
- cpp/framework/app_base.h
- dev/issues/README.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 18:11:24 +02:00
parent 852322a708
commit 750b7abcd5
99 changed files with 7879 additions and 73 deletions
+16
View File
@@ -113,8 +113,24 @@ struct AppConfig {
// Callbacks de layouts persistentes. Si layouts_cb != nullptr, run_app
// llama fn_ui::app_menubar(panels, panel_count, layouts_cb) cada frame.
// Si layouts_cb == nullptr y auto_layouts == true (default), run_app abre
// un fn_ui::LayoutStorage por defecto sobre `<local_dir>/<auto_layouts_db>`,
// genera unos LayoutCallbacks estandar (save/load/list/delete/reset),
// los aplica al inicio de cada frame y los cierra al salir. Asi cualquier
// app obtiene el menu Layouts gratis sin tocar codigo.
fn_ui::LayoutCallbacks* layouts_cb = nullptr;
// Auto-wiring del menu Layouts cuando layouts_cb == nullptr.
// - true (default): run_app crea LayoutStorage interno con SQLite.
// - false: no se crea storage. Util si la app no quiere persistencia
// (ej. demo headless, capture mode).
bool auto_layouts = true;
// Nombre del archivo SQLite (relativo a `<exe_dir>/local_files/`) usado
// por el layout storage por defecto. Solo se consulta si layouts_cb es
// nullptr y auto_layouts es true. Default "layouts.db".
const char* auto_layouts_db = "layouts.db";
// Items extra dentro del menu "View", al final tras los toggles de
// paneles. Si view_extras != nullptr, run_app lo pasa a app_menubar.
// El callback se invoca dentro de un BeginMenu("View") ya abierto: