From 49dd298f76b29e03f5c190e4fe5023c6036f102e Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 1 Aug 2024 21:22:27 +0200 Subject: use EvalTo for all sheetview config values --- src/config/theme/sheetview.rs | 25 +++++++++++++------------ 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, + pub selection: EvalTo, pub cell: EvalTo, } 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| { 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| { 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| { 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 -- cgit v1.2.3-70-g09d2