diff options
Diffstat (limited to 'src/sheet/luaref.rs')
| -rw-r--r-- | src/sheet/luaref.rs | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/src/sheet/luaref.rs b/src/sheet/luaref.rs index 1a2fd5f..f587f37 100644 --- a/src/sheet/luaref.rs +++ b/src/sheet/luaref.rs @@ -1,9 +1,6 @@ use crate::state::GlobalState; -use super::{ - map::LuaMap, - register::{Register, SheetId}, -}; +use super::{map::LuaMap, register::{Register, SheetId}}; use mlua::prelude::*; pub struct SheetLuaRef { @@ -23,18 +20,17 @@ impl SheetLuaRef { 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()) + Ok(Register::get(luaref.id).map(|s| s.width())) }); fields.add_field_method_get("height", |_, luaref| { - Ok(Register::get(luaref.id).unwrap().read().unwrap().height()) + Ok(Register::get(luaref.id).map(|s| s.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(); + if let Some(sheet) = Register::get(luaref.id) { Ok(sheet.get_ref(row, column).into_lua(lua).unwrap()) } else { Ok(LuaValue::Nil) @@ -42,31 +38,34 @@ impl LuaUserData for SheetLuaRef { }); methods.add_method_mut("map", |_, luaref, func: LuaFunction| { - let range: Vec<_> = { - let state = GlobalState::instance(); - let lock = state.view.active_sheet().unwrap(); - let sheet = lock.read().unwrap(); + if let Some(sheet) = Register::get(luaref.id) { + let range: Vec<_> = { + let state = GlobalState::get(); + let sheet = state.view.active_sheet().unwrap(); - if sheet.id() != luaref.id() { - return Ok(()); - } + if sheet.id() != luaref.id() { + return Ok(()); + } - let (width, height) = (sheet.width(), sheet.height()); + let (width, height) = (sheet.width(), sheet.height()); - if state.view.selection_anchor.is_some() { - state.view.selection() - } else { - let mut cells = Vec::new(); - for row in 0..height { - for column in 0..width { - cells.push((row, column)); + if state.view.selection_anchor.is_some() { + state.view.selection() + } else { + let mut cells = Vec::new(); + for row in 0..height { + for column in 0..width { + cells.push((row, column)); + } } + cells } - cells - } - }; + }; - Register::get(luaref.id).unwrap().lua_map(func, range) + sheet.lua_map(func, range) + } else { + Err(mlua::Error::runtime("unvalid sheet")) + } }) } } |