use mlua::UserData; use super::{window::Window, GlobalState}; #[derive(Debug, Default)] pub struct LogState { pub visible: bool, } impl LogState { pub const fn new() -> Self { Self { visible: false } } } macro_rules! cfg { () => { GlobalState::instance().log }; } impl UserData for LogState { fn add_fields<'lua, F: mlua::prelude::LuaUserDataFields<'lua, Self>>(fields: &mut F) { fields.add_field_function_get("visible", |_, _| Ok(cfg!().visible)); fields.add_field_function_set("visible", |_, _, visible: bool| { let mut state = GlobalState::instance_mut(); state.log.visible = visible; if let Window::Log = state.active_window { if !visible { state.set_focus(Window::View); } } Ok(()) }); } }