summaryrefslogtreecommitdiff
path: root/src/sheet/cell.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sheet/cell.rs')
-rw-r--r--src/sheet/cell.rs46
1 files changed, 30 insertions, 16 deletions
diff --git a/src/sheet/cell.rs b/src/sheet/cell.rs
index 53a4b04..9bee8ca 100644
--- a/src/sheet/cell.rs
+++ b/src/sheet/cell.rs
@@ -80,66 +80,80 @@ cell_from_integer!(
f32, f64
);
-#[derive(Debug, Clone, Copy)]
+#[derive(Debug, Clone)]
pub struct CellRef {
row: usize,
column: usize,
sheet_id: SheetId,
+ cell: Cell,
}
impl CellRef {
- pub fn new(sheet_id: SheetId, row: usize, column: usize) -> Option<Self> {
+ pub unsafe fn new(sheet_id: SheetId, row: usize, column: usize, cell: Cell) -> Self {
+ Self {
+ sheet_id,
+ row,
+ column,
+ cell
+ }
+ }
+
+ pub fn fetch_new(sheet_id: SheetId, row: usize, column: usize) -> Option<Self> {
Register::get(sheet_id)
.map(|sheet| {
- sheet.read().unwrap().get_cell(row, column).map(|_| Self {
+ sheet.read().unwrap().get_cell(row, column).map(|cell| Self {
sheet_id,
row,
column,
+ cell: cell.clone(),
})
})
.unwrap_or(None)
}
pub fn value(&self) -> Cell {
- return Register::get(self.sheet_id)
- .unwrap()
- .read()
+ self.cell.clone()
+ }
+
+ pub fn set_value(&mut self, cell: Cell) {
+ self.cell = cell.clone();
+ Register::get(self.sheet_id)
.unwrap()
- .get_cell(self.row, self.column)
+ .write()
.unwrap()
- .clone();
+ .set_cell(self.row, self.column, cell);
}
pub fn left(&self) -> Option<Self> {
if self.column > 0 {
- Self::new(self.sheet_id, self.row, self.column - 1)
+ Self::fetch_new(self.sheet_id, self.row, self.column - 1)
} else {
None
}
}
pub fn right(&self) -> Option<Self> {
- Self::new(self.sheet_id, self.row, self.column + 1)
+ Self::fetch_new(self.sheet_id, self.row, self.column + 1)
}
pub fn up(&self) -> Option<Self> {
if self.row > 0 {
- Self::new(self.sheet_id, self.row - 1, self.column)
+ Self::fetch_new(self.sheet_id, self.row - 1, self.column)
} else {
None
}
}
pub fn down(&self) -> Option<Self> {
- Self::new(self.sheet_id, self.row + 1, self.column)
+ Self::fetch_new(self.sheet_id, self.row + 1, self.column)
}
pub fn begin(&self) -> Option<Self> {
- Self::new(self.sheet_id, self.row, 0)
+ Self::fetch_new(self.sheet_id, self.row, 0)
}
pub fn end(&self) -> Option<Self> {
- Self::new(
+ Self::fetch_new(
self.sheet_id,
self.row,
Register::get(self.sheet_id)
@@ -152,11 +166,11 @@ impl CellRef {
}
pub fn top(&self) -> Option<Self> {
- Self::new(self.sheet_id, 0, self.column)
+ Self::fetch_new(self.sheet_id, 0, self.column)
}
pub fn bottom(&self) -> Option<Self> {
- Self::new(
+ Self::fetch_new(
self.sheet_id,
Register::get(self.sheet_id)
.unwrap()