diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-07-26 10:32:55 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-07-26 10:32:55 +0200 |
| commit | 6ca07d6af8a338e76817d06c6c6c6f13e64fba9c (patch) | |
| tree | 32680f0942da8c45af8425ebc20330f5456a9213 /src/config/theme/sheetview.rs | |
| parent | 8b7c56df1940d2ac6e3ece3385464009e46382fa (diff) | |
add neosheetrc support
Diffstat (limited to 'src/config/theme/sheetview.rs')
| -rw-r--r-- | src/config/theme/sheetview.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/config/theme/sheetview.rs b/src/config/theme/sheetview.rs new file mode 100644 index 0000000..de5751a --- /dev/null +++ b/src/config/theme/sheetview.rs @@ -0,0 +1,69 @@ +use mlua::{IntoLua, Table, UserData}; +use ratatui::style::Color; + +use crate::config::GlobalConfig; + +use super::colorpair::ColorPair; + +#[derive(Clone)] +pub struct SheetViewTheme { + pub cursor: ColorPair, + pub selection: ColorPair, + pub cell: (ColorPair, ColorPair), +} + +impl SheetViewTheme { + pub const fn new() -> Self { + Self { + cursor: ColorPair::new(Color::Black, Color::White), + selection: ColorPair::new(Color::White, Color::DarkGray), + cell: ( + ColorPair::new(Color::White, Color::Black), + ColorPair::new(Color::White, Color::DarkGray), + ), + } + } +} + +macro_rules! cfg { + () => { + GlobalConfig::instance().theme.sheetview + }; +} + +macro_rules! cfg_mut { + () => { + GlobalConfig::instance_mut().theme.sheetview + }; +} + +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: ColorPair| { + cfg_mut!().cursor = pair; + Ok(()) + }); + + fields.add_field_function_get("selection", |_, _| Ok(cfg!().selection.clone())); + + fields.add_field_function_set("selection", |_, _, pair: ColorPair| { + cfg_mut!().selection = pair; + Ok(()) + }); + + fields.add_field_function_get("cell", |lua, _| { + let table = lua.create_table()?; + let sel = cfg!().cell.clone(); + table.set(1, sel.0)?; + table.set(2, sel.1)?; + Ok(table.into_lua(lua)?) + }); + + fields.add_field_function_set("cell", |_, _, pair: Table| { + cfg_mut!().cell = (pair.get(1)?, pair.get(2)?); + Ok(()) + }); + } +} |