committed by
Nicolás Hatcher Andrés
parent
42d557d485
commit
8a54f45d75
@@ -436,3 +436,47 @@ fn false_removes_value() {
|
||||
let style = model.get_cell_style(0, 1, 1).unwrap();
|
||||
assert!(!style.font.b);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cell_clear_formatting() {
|
||||
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
||||
let range = Area {
|
||||
sheet: 0,
|
||||
row: 1,
|
||||
column: 1,
|
||||
width: 1,
|
||||
height: 1,
|
||||
};
|
||||
|
||||
// bold
|
||||
model.update_range_style(&range, "font.b", "true").unwrap();
|
||||
model
|
||||
.update_range_style(&range, "alignment.horizontal", "centerContinuous")
|
||||
.unwrap();
|
||||
|
||||
let style = model.get_cell_style(0, 1, 1).unwrap();
|
||||
assert!(style.font.b);
|
||||
assert_eq!(
|
||||
style.alignment.unwrap().horizontal,
|
||||
HorizontalAlignment::CenterContinuous
|
||||
);
|
||||
|
||||
model.range_clear_all(&range).unwrap();
|
||||
let style = model.get_cell_style(0, 1, 1).unwrap();
|
||||
assert!(!style.font.b);
|
||||
assert_eq!(style.alignment, None);
|
||||
|
||||
model.undo().unwrap();
|
||||
|
||||
let style = model.get_cell_style(0, 1, 1).unwrap();
|
||||
assert!(style.font.b);
|
||||
assert_eq!(
|
||||
style.alignment.unwrap().horizontal,
|
||||
HorizontalAlignment::CenterContinuous
|
||||
);
|
||||
model.redo().unwrap();
|
||||
|
||||
let style = model.get_cell_style(0, 1, 1).unwrap();
|
||||
assert!(!style.font.b);
|
||||
assert_eq!(style.alignment, None);
|
||||
}
|
||||
|
||||
@@ -566,6 +566,34 @@ impl UserModel {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Removes cells styles and formatting, but keeps the content
|
||||
///
|
||||
/// See also:
|
||||
/// * [UserModel::range_clear_all]
|
||||
/// * [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();
|
||||
for row in range.row..range.row + range.height {
|
||||
for column in range.column..range.column + range.width {
|
||||
let old_style = self.model.get_style_for_cell(sheet, row, column)?;
|
||||
// We can always assume that style with style_index 0 exists and it is the default
|
||||
self.model
|
||||
.workbook
|
||||
.worksheet_mut(sheet)?
|
||||
.set_cell_style(row, column, 0)?;
|
||||
diff_list.push(Diff::CellClearFormatting {
|
||||
sheet,
|
||||
row,
|
||||
column,
|
||||
old_style: Box::new(old_style),
|
||||
});
|
||||
}
|
||||
}
|
||||
self.push_diff_list(diff_list);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Inserts a row
|
||||
///
|
||||
/// See also:
|
||||
@@ -2006,6 +2034,15 @@ impl UserModel {
|
||||
old_value,
|
||||
new_value: _,
|
||||
} => self.model.set_sheet_state(*index, old_value.clone())?,
|
||||
Diff::CellClearFormatting {
|
||||
sheet,
|
||||
row,
|
||||
column,
|
||||
old_style,
|
||||
} => {
|
||||
self.model
|
||||
.set_cell_style(*sheet, *row, *column, old_style)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
if needs_evaluation {
|
||||
@@ -2160,6 +2197,17 @@ impl UserModel {
|
||||
old_value: _,
|
||||
new_value,
|
||||
} => self.model.set_sheet_state(*index, new_value.clone())?,
|
||||
Diff::CellClearFormatting {
|
||||
sheet,
|
||||
row,
|
||||
column,
|
||||
old_style: _,
|
||||
} => {
|
||||
self.model
|
||||
.workbook
|
||||
.worksheet_mut(*sheet)?
|
||||
.set_cell_style(*row, *column, 0)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,12 @@ pub(crate) enum Diff {
|
||||
old_value: Box<Option<Cell>>,
|
||||
old_style: Box<Style>,
|
||||
},
|
||||
CellClearFormatting {
|
||||
sheet: u32,
|
||||
row: i32,
|
||||
column: i32,
|
||||
old_style: Box<Style>,
|
||||
},
|
||||
SetCellStyle {
|
||||
sheet: u32,
|
||||
row: i32,
|
||||
|
||||
Reference in New Issue
Block a user