From 45c081c51236f1e7590ce1a9c1f022f471f3f86c Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Sun, 19 Jan 2025 16:49:42 -0500 Subject: [PATCH] wip: refactor cell styling into a separte method. --- src/ui/render/viewport.rs | 40 +++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/ui/render/viewport.rs b/src/ui/render/viewport.rs index c91d975..0651771 100644 --- a/src/ui/render/viewport.rs +++ b/src/ui/render/viewport.rs @@ -159,24 +159,7 @@ impl<'ws> Viewport<'ws> { .book .get_cell_addr_rendered(&Address { row: ri, col: *ci }) .unwrap(); - let mut cell = Cell::new(Text::raw(content)); - if let Some((start, end)) = - &self.range_selection.map_or(None, |r| r.get_range()) - { - if ri >= start.row - && ri <= end.row - && *ci >= start.col - && *ci <= end.col - { - // This is a selected range - cell = cell.fg(Color::Black).bg(Color::LightBlue) - } - } - match (self.book.location.row == ri, self.book.location.col == *ci) { - (true, true) => cell.fg(Color::White).bg(Color::Rgb(57, 61, 71)), - _ => cell, - } - .bold() + self.compute_cell_style(ri, ci, Cell::new(Text::raw(content))) }, )); Row::new(cells) @@ -208,6 +191,27 @@ impl<'ws> Viewport<'ws> { .column_spacing(0) .flex(Flex::Start)) } + + fn compute_cell_style<'widget>(&self, ri: usize, ci: &usize, mut cell: Cell<'widget>) -> Cell<'widget> { + if let Some((start, end)) = + &self.range_selection.map_or(None, |r| r.get_range()) + { + if ri >= start.row + && ri <= end.row + && *ci >= start.col + && *ci <= end.col + { + // This is a selected range + cell = cell.fg(Color::Black).bg(Color::LightBlue) + } + } + match (self.book.location.row == ri, self.book.location.col == *ci) { + (true, true) => cell.fg(Color::White).bg(Color::Rgb(57, 61, 71)), + // TODO(zaphar): Support ironcalc style options + _ => cell, + } + .bold() + } } impl<'ws> StatefulWidget for Viewport<'ws> {