summaryrefslogtreecommitdiff
path: root/src/sheet/luaref.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sheet/luaref.rs')
-rw-r--r--src/sheet/luaref.rs53
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"))
+ }
})
}
}