forked from 1b-agent/opencadstudio-upstream
fix(layer): keep auto-registered layer names verbatim; one sync helper
ensure_layer had started trimming the name, so an entity on " A" got a table entry "A" it never resolves to. Register the name as given again and drop the unused return value. The five copies of the dirty-flag check become sync_registered_layers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1b04bda547
commit
e3c0d456f2
4 files changed
+20
-32
No files matched your search
@@ -68,6 +68,15 @@ impl OpenCADStudio {
|
||||
self.sync_ribbon_layers();
|
||||
}
|
||||
|
||||
/// Pick up layers an entity edit registered on the fly (`ensure_layer`).
|
||||
pub(super) fn sync_registered_layers(&mut self, tab: usize) {
|
||||
if !std::mem::take(&mut self.tabs[tab].scene.layer_table_dirty) {
|
||||
return;
|
||||
}
|
||||
self.tabs[tab].dirty = true;
|
||||
self.refresh_layer_panel();
|
||||
}
|
||||
|
||||
pub(super) fn sync_ribbon_layers(&mut self) {
|
||||
let i = self.active_tab;
|
||||
// The Start (welcome) tab has no document — leave the layer and
|
||||
|
||||
+4
-20
@@ -350,11 +350,7 @@ impl<'a> HostSession<'a> {
|
||||
return handle;
|
||||
}
|
||||
let handle = self.app.tabs[self.tab].scene.add_entity(entity);
|
||||
if self.app.tabs[self.tab].scene.layer_table_dirty {
|
||||
self.app.tabs[self.tab].scene.layer_table_dirty = false;
|
||||
self.app.tabs[self.tab].dirty = true;
|
||||
self.app.refresh_layer_panel();
|
||||
}
|
||||
self.app.sync_registered_layers(self.tab);
|
||||
self.publish_document_view();
|
||||
handle
|
||||
}
|
||||
@@ -367,11 +363,7 @@ impl<'a> HostSession<'a> {
|
||||
let _ = self.normalize_scripted_entity(None, entity);
|
||||
}
|
||||
let handles = self.app.tabs[self.tab].scene.add_entities(entities);
|
||||
if self.app.tabs[self.tab].scene.layer_table_dirty {
|
||||
self.app.tabs[self.tab].scene.layer_table_dirty = false;
|
||||
self.app.tabs[self.tab].dirty = true;
|
||||
self.app.refresh_layer_panel();
|
||||
}
|
||||
self.app.sync_registered_layers(self.tab);
|
||||
self.publish_document_view();
|
||||
handles
|
||||
}
|
||||
@@ -391,11 +383,7 @@ impl<'a> HostSession<'a> {
|
||||
EntityType::AttributeEntity(attribute) => self.replace_nested_attribute(attribute),
|
||||
entity => self.app.tabs[self.tab].scene.update_entity(entity),
|
||||
};
|
||||
if self.app.tabs[self.tab].scene.layer_table_dirty {
|
||||
self.app.tabs[self.tab].scene.layer_table_dirty = false;
|
||||
self.app.tabs[self.tab].dirty = true;
|
||||
self.app.refresh_layer_panel();
|
||||
}
|
||||
self.app.sync_registered_layers(self.tab);
|
||||
if ok {
|
||||
self.publish_document_view();
|
||||
}
|
||||
@@ -454,11 +442,7 @@ impl<'a> HostSession<'a> {
|
||||
};
|
||||
assert!(updated);
|
||||
}
|
||||
if self.app.tabs[self.tab].scene.layer_table_dirty {
|
||||
self.app.tabs[self.tab].scene.layer_table_dirty = false;
|
||||
self.app.tabs[self.tab].dirty = true;
|
||||
self.app.refresh_layer_panel();
|
||||
}
|
||||
self.app.sync_registered_layers(self.tab);
|
||||
self.set_dirty();
|
||||
self.publish_document_view();
|
||||
Ok(())
|
||||
|
||||
@@ -3491,11 +3491,7 @@ handles={handles_ms:.1} panel={:.1} ribbon={ribbon_ms:.1} tail={:.1} selected={}
|
||||
if tracks_dimension_chain {
|
||||
self.tabs[i].scene.last_created_dimension = new_handle;
|
||||
}
|
||||
if self.tabs[i].scene.layer_table_dirty {
|
||||
self.tabs[i].scene.layer_table_dirty = false;
|
||||
self.tabs[i].dirty = true;
|
||||
self.refresh_layer_panel();
|
||||
}
|
||||
self.sync_registered_layers(i);
|
||||
new_handle
|
||||
}
|
||||
}
|
||||
|
||||
+6
-7
@@ -143,17 +143,16 @@ impl Scene {
|
||||
/// layer 0. Auto-registering keeps it on its own layer (#252). Names are
|
||||
/// registered verbatim so the writer's (case-insensitive) lookup matches;
|
||||
/// the always-present default layer "0" and empty names are no-ops.
|
||||
pub fn ensure_layer(&mut self, name: &str) -> bool {
|
||||
let trimmed = name.trim();
|
||||
if trimmed.is_empty() || trimmed == "0" || self.document.layers.contains(trimmed) {
|
||||
return false;
|
||||
/// Flags `layer_table_dirty` so the app refreshes its layer lists.
|
||||
pub fn ensure_layer(&mut self, name: &str) {
|
||||
if name.trim().is_empty() || self.document.layers.contains(name) {
|
||||
return;
|
||||
}
|
||||
let mut layer = codec::tables::Layer::new(trimmed);
|
||||
let mut layer = codec::tables::Layer::new(name);
|
||||
layer.handle = self.document.allocate_handle();
|
||||
let _ = self.document.layers.add(layer);
|
||||
self.invalidate_layer_dependencies(&[trimmed.to_string()]);
|
||||
self.invalidate_layer_dependencies(&[name.to_string()]);
|
||||
self.layer_table_dirty = true;
|
||||
true
|
||||
}
|
||||
|
||||
pub(crate) fn ensure_app_id(&mut self, name: &str) {
|
||||
|
||||
Reference in new issue
Block a user