summaryrefslogtreecommitdiff
path: root/src/config/theme/sheetview.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/theme/sheetview.rs')
-rw-r--r--src/config/theme/sheetview.rs69
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(())
+ });
+ }
+}