From d5f4d03264a376919d85352af8a90db384fbc4d3 Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Fri, 10 Apr 2026 21:30:48 +0200 Subject: [PATCH] Add toggle_marking and simplify marking logic Introduce a public `BoardState::toggle_marking` that flips the marking mode and starts or clears marking accordingly. Refactor `set_marked_cell` to accept tuple coordinates and clean up its logic. Update `change_focused_cell` to work with the new signature and use the toggle helper. Adjust cell display to show coordinates when a cell is marked. --- src/app/keybindings/skirmish.rs | 10 +------ src/app/states/skirmish_states/board.rs | 37 +++++++++++++------------ src/app/widgets/cell.rs | 2 +- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/app/keybindings/skirmish.rs b/src/app/keybindings/skirmish.rs index f65ab2e..d5a51da 100644 --- a/src/app/keybindings/skirmish.rs +++ b/src/app/keybindings/skirmish.rs @@ -83,15 +83,7 @@ pub fn skirmish_keybindings(app: &mut App, key_event: &KeyEvent) { } ZoomLevel::ZoomedOut => {} }, - Action::Space => { - if board.marking_cells { - board.marking_cells = false; - board.clear_marked_cells(); - } else { - board.marking_cells = true; - board.start_marking_cells(); - } - } + Action::Space => board.toggle_marking(), Action::Backspace => { board.marking_cells = false; board.clear_marked_cells() diff --git a/src/app/states/skirmish_states/board.rs b/src/app/states/skirmish_states/board.rs index 20cb84b..2efc341 100644 --- a/src/app/states/skirmish_states/board.rs +++ b/src/app/states/skirmish_states/board.rs @@ -106,22 +106,25 @@ impl BoardState { .collect() } - fn get_last_marked_cell(&self) -> Option<(usize, usize)> { - self.marked_cells.last().cloned() + pub fn toggle_marking(&mut self) { + self.marking_cells = !self.marking_cells; + + if self.marking_cells { + self.start_marking_cells(); + } else { + self.clear_marked_cells(); + } } - pub fn set_marked_cell(&mut self, row: usize, col: usize, old_row: usize, old_col: usize) { - let last_cell: Option<(usize, usize)> = self.get_last_marked_cell(); - let cell: &mut CellWidget = self.get_mut_cell(row, col); + pub fn set_marked_cell(&mut self, new_cell: (usize, usize), old_cell: (usize, usize)) { + let cell: &mut CellWidget = self.get_mut_cell(new_cell.0, new_cell.1); - if cell.get_marked() { - if last_cell == Some((old_row, old_col)) { - self.get_mut_cell(old_row, old_col).set_marked(false); - self.marked_cells.pop(); - } + if cell.get_marked() && old_cell != new_cell { + self.get_mut_cell(old_cell.0, old_cell.1).set_marked(false); + self.marked_cells.pop(); } else { cell.set_marked(true); - self.marked_cells.push((row, col)); + self.marked_cells.push((new_cell.0, new_cell.1)); } } @@ -215,15 +218,15 @@ impl BoardState { } pub fn change_focused_cell(&mut self, direction: MoveFocusedCell) { - let old_row: usize = self.focused_cell.get_row(); - let old_col: usize = self.focused_cell.get_col(); - let (new_row, new_col) = self.focused_cell.move_focused_cell(direction); + let old_cell: (usize, usize) = (self.focused_cell.get_row(), self.focused_cell.get_col()); + let new_cell: (usize, usize) = self.focused_cell.move_focused_cell(direction); - self.get_mut_cell(old_row, old_col).set_selected(false); - self.get_mut_cell(new_row, new_col).set_selected(true); + self.get_mut_cell(old_cell.0, old_cell.1) + .set_selected(false); + self.get_mut_cell(new_cell.0, new_cell.1).set_selected(true); if self.marking_cells { - self.set_marked_cell(new_row, new_col, old_row, old_col); + self.set_marked_cell(new_cell, old_cell); } } } diff --git a/src/app/widgets/cell.rs b/src/app/widgets/cell.rs index 8eb5b02..88117bf 100644 --- a/src/app/widgets/cell.rs +++ b/src/app/widgets/cell.rs @@ -81,7 +81,7 @@ impl CellWidget { } fn display_coords(&self) -> Span<'_> { - if self.selected || self.tag != CellTag::Stone { + if self.selected || self.tag != CellTag::Stone || self.marked { format!("{}{}", self.col_to_letters(), self.row).green() } else { "".to_span()