diff options
Diffstat (limited to 'src/sheet/mod.rs')
| -rw-r--r-- | src/sheet/mod.rs | 65 |
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")) - } - } -} |