use mlua::UserData; use ratatui::style::Color; use crate::{config::{GlobalConfig, DUMMY_CONFIG}, lua::evalsto::EvalTo, sheet::cell::CellRef}; use self::bar::SheetViewBarTheme; use super::style::Style; pub mod bar; #[derive(Debug, Clone, Default)] pub struct SheetViewTheme { pub cursor: EvalTo, pub selection: EvalTo, pub cell: EvalTo, pub background: EvalTo, pub bar: SheetViewBarTheme, } impl SheetViewTheme { pub const fn new() -> Self { Self { cursor: EvalTo::Value(Style::new().fg(Color::Black).bg(Color::White)), selection: EvalTo::Value(Style::new().fg(Color::White).bg(Color::DarkGray)), cell: EvalTo::Value(Style::new().fg(Color::White).bg(Color::Black)), background: EvalTo::Value(Style::new().bg(Color::Black)), bar: SheetViewBarTheme::new(), } } } macro_rules! cfg { () => { GlobalConfig::get().theme.view }; } impl UserData for SheetViewTheme { fn add_fields<'lua, F: mlua::prelude::LuaUserDataFields<'lua, Self>>(fields: &mut F) { fields.add_field_function_get("cursor", |_, _| Ok(cfg!().cursor.clone())); fields.add_field_function_set("cursor", |_, _, pair: EvalTo| { cfg!().cursor = pair; Ok(()) }); fields.add_field_function_get("selection", |_, _| Ok(cfg!().selection.clone())); fields.add_field_function_set("selection", |_, _, pair: EvalTo| { cfg!().selection = pair; Ok(()) }); fields.add_field_function_get("cell", |_, _| Ok(cfg!().cell.clone())); fields.add_field_function_set("cell", |_, _, cell: EvalTo| { cfg!().cell = cell; Ok(()) }); fields.add_field_function_get("background", |_, _| Ok(cfg!().background.clone())); fields.add_field_function_set("background", |_, _, background: EvalTo| { cfg!().background = background; Ok(()) }); fields.add_field_function_get("bar", |_, _| Ok(DUMMY_CONFIG.theme.view.bar)) } }