summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/config/theme/sheetview.rs25
-rw-r--r--src/widgets/sheetview/mod.rs12
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