#pragma once // Estado interno expuesto para tests e2e (Dear ImGui Test Engine) y para que // main.cpp y el test harness compartan el wiring de layouts. #include "app_base.h" #include namespace navegator { // Bools de visibilidad de cada panel (sincronizados con k_panels en main.cpp). extern bool show_browsers; extern bool show_tabs; extern bool show_tab_detail; extern bool show_network; extern bool show_agent; // Cablea el menu Layouts: abre `/layouts.db`, monta callbacks que // persisten ademas la visibilidad de paneles, y setea `cfg.layouts_cb` + // `cfg.auto_layouts = false`. Idempotente — no-op si ya estaba inicializado. void setup_layouts(fn::AppConfig& cfg); // Cierra los handles de SQLite. Llamar tras `run_app` / `run_app_test`. void teardown_layouts(); // Helpers usados tambien por los tests para verificar el comportamiento del // fix: capturar/aplicar el JSON de visibilidad y abrir todos los paneles. std::string capture_panel_state(); void apply_panel_state(const std::string& json); void open_all_panels(); // Hooks que los tests usan para invocar el flujo de layouts SIN tocar la UI // (MainMenuBar/popups son flaky bajo Test Engine en algunos drivers OpenGL). // Equivalentes a los callbacks que cablearia el menu Layouts. bool layout_save(const std::string& name); // captura INI + estado bool layout_apply(const std::string& name); // marca pending void layout_reset(); // clear INI + abrir todo bool layout_delete(const std::string& name); // borra fila + sidecar // Drena el pending del LayoutStorage del navegator_dashboard. Llamar desde // render(); aqui expuesto para que tests puedan forzarlo entre frames. std::string drain_layout_pending(); } // namespace navegator