forked from 1b-agent/opencadstudio-upstream
fix(tablestyle): ribbon pick writes header so inserts follow it
StyleKey::TableStyle only updated the ribbon mirror, so inserts kept using the header value and resync re-seeded from the mirror. The arm now writes current_table_style_name plus dirty when the style exists, and sync_ribbon_styles seeds from the document like Text/Dim. Tests: tablestyle_ribbon_pick_writes_header_and_dirties plus pick_flows_into_table_insert covering pick-to-dialog (both RED first). Full suite: 1996 passed / 0 failed / 25 ignored.
This commit is contained in:
1 parent
d3274543b7
commit
2187fe0d34
2 files changed
+66
-2
No files matched your search
+1
-1
@@ -230,7 +230,7 @@ impl OpenCADStudio {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
let active_table = self.ribbon.active_table_style.clone();
|
let active_table = doc.header.current_table_style_name.clone();
|
||||||
let active_table = if table_names.contains(&active_table) {
|
let active_table = if table_names.contains(&active_table) {
|
||||||
active_table
|
active_table
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -2342,7 +2342,15 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
|
|||||||
self.tabs[i].dirty = true;
|
self.tabs[i].dirty = true;
|
||||||
}
|
}
|
||||||
StyleKey::TableStyle => {
|
StyleKey::TableStyle => {
|
||||||
self.ribbon.active_table_style = name;
|
self.ribbon.active_table_style = name.clone();
|
||||||
|
let i = self.active_tab;
|
||||||
|
let found = self.tabs[i].scene.document.objects.values().any(|o| {
|
||||||
|
matches!(o, codec::objects::ObjectType::TableStyle(ts) if ts.name == name)
|
||||||
|
});
|
||||||
|
if found {
|
||||||
|
self.tabs[i].scene.document.header.current_table_style_name = name;
|
||||||
|
self.tabs[i].dirty = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Task::none()
|
Task::none()
|
||||||
@@ -4712,6 +4720,62 @@ mod layer_name_target_tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tablestyle_ribbon_tests {
|
||||||
|
// #45: picking a table style in the ribbon must write the document header
|
||||||
|
// (like Text/Dim/MLeader), not just the ribbon mirror.
|
||||||
|
use crate::app::OpenCADStudio;
|
||||||
|
use crate::modules::StyleKey;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tablestyle_ribbon_pick_writes_header_and_dirties() {
|
||||||
|
let mut app = OpenCADStudio::new_for_test();
|
||||||
|
app.automation_op(r#"{"op":"new"}"#);
|
||||||
|
let i = app.active_tab;
|
||||||
|
let mut extra = codec::objects::TableStyle::standard();
|
||||||
|
extra.name = "EXTRA".to_string();
|
||||||
|
extra.handle = app.tabs[i].scene.document.allocate_handle();
|
||||||
|
app.tabs[i]
|
||||||
|
.scene
|
||||||
|
.document
|
||||||
|
.objects
|
||||||
|
.insert(extra.handle, codec::objects::ObjectType::TableStyle(extra));
|
||||||
|
app.tabs[i].dirty = false;
|
||||||
|
let _ = app.on_ribbon_style_changed(StyleKey::TableStyle, "EXTRA".to_string());
|
||||||
|
assert_eq!(
|
||||||
|
app.tabs[i].scene.document.header.current_table_style_name,
|
||||||
|
"EXTRA",
|
||||||
|
"ribbon pick must reach the document header"
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
app.tabs[i].dirty,
|
||||||
|
"ribbon pick must dirty the tab like its siblings"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tablestyle_pick_flows_into_table_insert() {
|
||||||
|
// End-to-end: ribbon pick → header → insert dialog defaults to the pick.
|
||||||
|
let mut app = OpenCADStudio::new_for_test();
|
||||||
|
app.automation_op(r#"{"op":"new"}"#);
|
||||||
|
let i = app.active_tab;
|
||||||
|
let mut extra = codec::objects::TableStyle::standard();
|
||||||
|
extra.name = "EXTRA".to_string();
|
||||||
|
extra.handle = app.tabs[i].scene.document.allocate_handle();
|
||||||
|
app.tabs[i]
|
||||||
|
.scene
|
||||||
|
.document
|
||||||
|
.objects
|
||||||
|
.insert(extra.handle, codec::objects::ObjectType::TableStyle(extra));
|
||||||
|
let _ = app.on_ribbon_style_changed(StyleKey::TableStyle, "EXTRA".to_string());
|
||||||
|
app.open_table_insert();
|
||||||
|
assert_eq!(
|
||||||
|
app.table_insert.style, "EXTRA",
|
||||||
|
"insert dialog must default to the ribbon-picked style"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod plot_style_ctb_guard_tests {
|
mod plot_style_ctb_guard_tests {
|
||||||
use crate::app::OpenCADStudio;
|
use crate::app::OpenCADStudio;
|
||||||
|
|||||||
Reference in new issue
Block a user