Restore frozen panes when showing a custom view (#577)
This commit is contained in:
parent
3926d21aa9
commit
40dfdd8331
|
|
@ -743,6 +743,17 @@ fn custom_views(s: &mut Session, p: &Json) -> Result<Json> {
|
|||
if let Some(z) = v["zoom"].as_u64() {
|
||||
s.execute("view.zoom", json!({"percent": z}))?;
|
||||
}
|
||||
if let Some(f) = v.get("freeze") {
|
||||
let freeze = match (f[0].as_u64(), f[1].as_u64()) {
|
||||
(Some(r), Some(c)) => u32::try_from(r).ok().zip(u32::try_from(c).ok()),
|
||||
_ => None,
|
||||
};
|
||||
edit(s, |cx| {
|
||||
let si = cx.sheet_index();
|
||||
cx.sheet_mut(si)?.freeze = freeze;
|
||||
Ok(())
|
||||
})?;
|
||||
}
|
||||
} else if let Some(name) = str_param(p, "delete") {
|
||||
if let Some(o) = views.as_object_mut() {
|
||||
o.remove(name);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
use gridcraft_engine::Session;
|
||||
use serde_json::json;
|
||||
|
||||
fn freeze(s: &Session) -> Option<(u32, u32)> {
|
||||
s.doc().unwrap().wb.active().unwrap().freeze
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn showing_a_custom_view_restores_its_frozen_panes() {
|
||||
let mut s = Session::new();
|
||||
s.new_workbook();
|
||||
s.execute("view.freezePanes", json!({"cell": "B2"})).unwrap();
|
||||
s.execute("view.customViews", json!({"save": "Frozen"})).unwrap();
|
||||
s.execute("view.unfreezePanes", json!({})).unwrap();
|
||||
assert_eq!(freeze(&s), None);
|
||||
s.execute("view.customViews", json!({"show": "Frozen"})).unwrap();
|
||||
assert_eq!(freeze(&s), Some((1, 1)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn showing_an_unfrozen_custom_view_clears_current_panes() {
|
||||
let mut s = Session::new();
|
||||
s.new_workbook();
|
||||
s.execute("view.customViews", json!({"save": "Plain"})).unwrap();
|
||||
s.execute("view.freezePanes", json!({"cell": "B2"})).unwrap();
|
||||
s.execute("view.customViews", json!({"show": "Plain"})).unwrap();
|
||||
assert_eq!(freeze(&s), None);
|
||||
}
|
||||
Loading…
Reference in New Issue