diff --git a/src/app/commands.rs b/src/app/commands.rs index 97ded0c70..f1e6e96af 100644 --- a/src/app/commands.rs +++ b/src/app/commands.rs @@ -131,7 +131,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("Layer(s) turned off."); } } @@ -165,7 +165,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("Layer(s) frozen."); } } @@ -196,7 +196,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("Layer(s) locked."); } } @@ -215,7 +215,7 @@ impl OpenCADStudio { self.tabs[i].layers.current_layer = layer.clone(); self.command_line .push_info(&format!("Current layer set to \"{layer}\".")); - self.sync_ribbon_layers(); + self.refresh_layer_panel(); } } @@ -234,7 +234,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("All layers turned on."); } @@ -253,7 +253,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("All layers thawed."); } @@ -283,7 +283,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line.push_info("Layer(s) unlocked."); } } @@ -316,7 +316,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line .push_info(&format!("LAYISO: isolated {} layer(s).", sel_layers.len())); } @@ -338,7 +338,7 @@ impl OpenCADStudio { } } self.tabs[i].dirty = true; - self.sync_ribbon_layers(); + self.refresh_layer_panel(); self.command_line .push_info("LAYUNISO: all layers restored."); } diff --git a/src/app/layers.rs b/src/app/layers.rs index e914bcf28..ac6fbad97 100644 --- a/src/app/layers.rs +++ b/src/app/layers.rs @@ -2,6 +2,21 @@ use super::OpenCADStudio; use crate::ui; impl OpenCADStudio { + /// Reload the `LayerPanel` cache from the document and push the + /// fresh state through to the ribbon dropdown + every other + /// layer-aware UI mirror. Use this whenever a command mutates the + /// document's layer table directly (LAYOFF / LAYFRZ / LAYLCK …) so + /// the panel + dropdown reflect the change. See #39. + pub(super) fn refresh_layer_panel(&mut self) { + let i = self.active_tab; + let doc_layers = self.tabs[i].scene.document.layers.clone(); + let vp_info = self.tabs[i].scene.viewport_list(); + self.tabs[i] + .layers + .sync_with_viewports(&doc_layers, vp_info); + self.sync_ribbon_layers(); + } + pub(super) fn sync_ribbon_layers(&mut self) { let i = self.active_tab; let active = self.tabs[i].active_layer.clone();