diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/config/theme/sheetview.rs | 25 | ||||
| -rw-r--r-- | src/widgets/sheetview/mod.rs | 12 |
2 files changed, 23 insertions, 14 deletions
diff --git a/src/config/theme/sheetview.rs b/src/config/theme/sheetview.rs index 5590349..30d801e 100644 --- a/src/config/theme/sheetview.rs +++ b/src/config/theme/sheetview.rs @@ -1,22 +1,25 @@ -use mlua::{IntoLua, UserData}; +use mlua::UserData; use ratatui::style::Color; -use crate::{config::{evalsto::EvalTo, GlobalConfig}, sheet::cell::CellRef}; +use crate::{ + config::{evalsto::EvalTo, GlobalConfig}, + sheet::cell::CellRef, +}; use super::style::Style; #[derive(Debug, Clone)] pub struct SheetViewTheme { - pub cursor: Style, - pub selection: Style, + pub cursor: EvalTo<Style, CellRef>, + pub selection: EvalTo<Style, CellRef>, pub cell: EvalTo<Style, CellRef>, } impl SheetViewTheme { pub const fn new() -> Self { Self { - cursor: Style::new().fg(Color::Black).bg(Color::White), - selection: Style::new().fg(Color::White).bg(Color::DarkGray), + 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)), } } @@ -35,24 +38,22 @@ macro_rules! cfg_mut { } impl UserData for SheetViewTheme { - fn add_fields<'lua, F: mlua::prelude::LuaUserDataFields<'lua, Self>>(fields: & mut F) { + 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: Style| { + fields.add_field_function_set("cursor", |_, _, pair: EvalTo<Style, CellRef>| { cfg_mut!().cursor = pair; Ok(()) }); fields.add_field_function_get("selection", |_, _| Ok(cfg!().selection.clone())); - fields.add_field_function_set("selection", |_, _, pair: Style| { + fields.add_field_function_set("selection", |_, _, pair: EvalTo<Style, CellRef>| { cfg_mut!().selection = pair; Ok(()) }); - fields.add_field_function_get("cell", |lua, _| { - Ok(cfg!().cell.clone().into_lua(lua)?) - }); + fields.add_field_function_get("cell", |_, _| Ok(cfg!().cell.clone())); fields.add_field_function_set("cell", |_, _, cell: EvalTo<Style, CellRef>| { cfg_mut!().cell = cell; diff --git a/src/widgets/sheetview/mod.rs b/src/widgets/sheetview/mod.rs index fa11d1d..1998fca 100644 --- a/src/widgets/sheetview/mod.rs +++ b/src/widgets/sheetview/mod.rs @@ -425,9 +425,17 @@ impl Widget for &mut SheetView { let cell = cell_ref.value().to_string() + " "; let line = if (cell_pos_y, cell_pos_x) == self.cursor { - theme.cursor.apply(cell.to_line()) + theme + .cursor + .get(cell_ref, &lua::get()) + .unwrap_or(style::Style::new()) + .apply(cell.to_line()) } else if self.is_in_selection(cell_pos_y, cell_pos_x) { - theme.selection.apply(cell.to_line()) + theme + .selection + .get(cell_ref, &lua::get()) + .unwrap_or(style::Style::new()) + .apply(cell.to_line()) } else { theme .cell |