summaryrefslogtreecommitdiff
path: root/src/sheet/mod.rs
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2024-08-02 11:38:19 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2024-08-02 11:38:19 +0200
commit04a5a938994ddb95cfaa9a74b180e457d3a2b5d0 (patch)
tree31ce9525ed3f3423678397323b65c910d63eadb1 /src/sheet/mod.rs
parentfe0938b1de0c46fc2afcaa3dcd6a0f4ec870d21a (diff)
implement new lua interface
Diffstat (limited to 'src/sheet/mod.rs')
-rw-r--r--src/sheet/mod.rs65
1 files changed, 4 insertions, 61 deletions
diff --git a/src/sheet/mod.rs b/src/sheet/mod.rs
index 501b71e..5f28e07 100644
--- a/src/sheet/mod.rs
+++ b/src/sheet/mod.rs
@@ -1,18 +1,14 @@
-use std::sync::Mutex;
-
use cell::{Cell, CellRef};
-use mlua::prelude::*;
-use register::{Register, SheetId};
pub mod cell;
-pub mod eval;
+pub mod foreach;
pub mod register;
+pub mod luaref;
#[derive(Debug, Default)]
pub struct Sheet {
id: register::SheetId,
rows: Vec<Vec<Cell>>,
- progress: Mutex<u8>,
}
impl Sheet {
@@ -20,7 +16,6 @@ impl Sheet {
Self {
id,
rows: vec![vec![Cell::new_empty(); width]; height],
- progress: Mutex::new(0),
}
}
@@ -41,9 +36,8 @@ impl Sheet {
}
pub fn get_ref(&self, row: usize, column: usize) -> Option<CellRef> {
- self.get_cell(row, column).map(|cell| {
- unsafe { CellRef::new(self.id, row, column, cell.clone()) }
- })
+ self.get_cell(row, column)
+ .map(|cell| unsafe { CellRef::new(self.id, row, column, cell.clone()) })
}
pub fn height(&self) -> usize {
@@ -74,10 +68,6 @@ impl Sheet {
pub fn apply(&mut self, other: Sheet) {
self.rows = other.rows;
}
-
- pub fn progress(&self) -> u8 {
- *self.progress.lock().unwrap()
- }
}
impl Clone for Sheet {
@@ -85,54 +75,7 @@ impl Clone for Sheet {
Sheet {
id: self.id,
rows: self.rows.clone(),
- progress: Mutex::new(0),
}
}
}
-pub struct SheetLuaRef {
- id: SheetId,
-}
-
-impl SheetLuaRef {
- pub fn new(id: SheetId) -> Self {
- Self { id }
- }
-
- pub fn id(&self) -> SheetId {
- self.id
- }
-}
-
-impl LuaUserData for SheetLuaRef {
- fn add_fields<'lua, F: mlua::UserDataFields<'lua, Self>>(fields: &mut F) {
- fields.add_field_method_get("width", |_, luaref| {
- Ok(Register::get(luaref.id).unwrap().read().unwrap().width())
- });
-
- fields.add_field_method_get("height", |_, luaref| {
- Ok(Register::get(luaref.id).unwrap().read().unwrap().height())
- });
- }
-
- fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
- methods.add_method_mut("cell", |lua, luaref, (row, column): (usize, usize)| {
- if let Some(rw) = Register::get(luaref.id) {
- let sheet = rw.read().unwrap();
- Ok(sheet.get_ref(row, column).into_lua(lua).unwrap())
- } else {
- Ok(LuaValue::Nil)
- }
- })
- }
-}
-
-impl<'lua> FromLua<'lua> for SheetLuaRef {
- fn from_lua(value: LuaValue<'lua>, _: &'lua Lua) -> LuaResult<Self> {
- if let Some(ud) = value.as_userdata() {
- ud.take()
- } else {
- Err(LuaError::runtime("failed to parse sheet"))
- }
- }
-}