FIX: Removing styles of full columns or rows are a single diff list

Fixes #400
This commit is contained in:
Nicolás Hatcher
2025-07-03 23:17:59 +02:00
committed by Nicolás Hatcher Andrés
parent b4aed93bbb
commit 483cd43041

View File

@@ -659,8 +659,12 @@ impl UserModel {
Ok(())
}
fn clear_column_formatting(&mut self, sheet: u32, column: i32) -> Result<(), String> {
let mut diff_list = Vec::new();
fn clear_column_formatting(
&mut self,
sheet: u32,
column: i32,
diff_list: &mut Vec<Diff>,
) -> Result<(), String> {
let old_value = self.model.get_column_style(sheet, column)?;
self.model.delete_column_style(sheet, column)?;
diff_list.push(Diff::DeleteColumnStyle {
@@ -739,12 +743,15 @@ impl UserModel {
}
}
}
self.push_diff_list(diff_list);
Ok(())
}
fn clear_row_formatting(&mut self, sheet: u32, row: i32) -> Result<(), String> {
let mut diff_list = Vec::new();
fn clear_row_formatting(
&mut self,
sheet: u32,
row: i32,
diff_list: &mut Vec<Diff>,
) -> Result<(), String> {
let old_value = self.model.get_row_style(sheet, row)?;
self.model.delete_row_style(sheet, row)?;
diff_list.push(Diff::DeleteRowStyle {
@@ -791,8 +798,6 @@ impl UserModel {
}
}
}
self.push_diff_list(diff_list);
Ok(())
}
@@ -803,19 +808,21 @@ impl UserModel {
/// * [UserModel::range_clear_contents]
pub fn range_clear_formatting(&mut self, range: &Area) -> Result<(), String> {
let sheet = range.sheet;
let mut diff_list = Vec::new();
if range.row == 1 && range.height == LAST_ROW {
for column in range.column..range.column + range.width {
self.clear_column_formatting(sheet, column)?;
self.clear_column_formatting(sheet, column, &mut diff_list)?;
}
self.push_diff_list(diff_list);
return Ok(());
}
if range.column == 1 && range.width == LAST_COLUMN {
for row in range.row..range.row + range.height {
self.clear_row_formatting(sheet, row)?;
self.clear_row_formatting(sheet, row, &mut diff_list)?;
}
self.push_diff_list(diff_list);
return Ok(());
}
let mut diff_list = Vec::new();
for row in range.row..range.row + range.height {
for column in range.column..range.column + range.width {
if let Some(old_style) = self.model.get_cell_style_or_none(sheet, row, column)? {