Section Analysis in the browser, with an eye to turn it off (#822) (#947)

A section stayed on with nothing in the browser to switch it off; only the
viewport's context menu had Remove Section. While there is one, the browser
now has an Analysis folder listing it. Its eye (and the folder's) hides the
section and shows it again on the same plane; a double-click or Edit Section
Analysis opens the dialog, and Delete removes it. Browser rows with an eye
publish an `eye:<label>` handle for automation.

Fixes #822

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-13 22:18:06 -04:00
1 parent abddd67d22
commit 15b5b51bf5
8 files changed
+187 -3

No files matched your search

+11 -2
View File
@@ -68,6 +68,8 @@ pub enum Target {
Canvas {
id: u64,
},
/// The Section Analysis in the browser's Analysis folder.
Section,
/// A component's Bodies, Sketches or Construction folder.
Folder {
component: u64,
@@ -261,7 +263,8 @@ pub fn target_bodies(app: &SolveApp, target: &Target) -> Vec<String> {
| Target::Toolbar
| Target::Workspace
| Target::NamedViews
| Target::NamedView { .. } => Vec::new(),
| Target::NamedView { .. }
| Target::Section => Vec::new(),
}
}
@@ -315,6 +318,7 @@ pub fn items(app: &SolveApp, target: &Target) -> Vec<Item> {
Target::Canvas { id } => crate::browser::canvas_items(app, *id),
Target::Origin => crate::browser::origin_items(app),
Target::NamedViews => vec![act("ui.newView", "New Named View", "perspective")],
Target::Section => crate::browser::section_items(app),
Target::Joint { id } => joint_items(app, *id),
Target::ToolbarCommand { id } => crate::toolbar_custom::command_items(app, id),
Target::Toolbar => crate::toolbar_custom::toolbar_items(app),
@@ -858,7 +862,12 @@ pub fn run_item(app: &mut SolveApp, item: &Item, at: Pos2) {
"ui.tangentChain" => tangent_chain(app),
"ui.origin" => app.ui.show_origin = !app.ui.show_origin,
"ui.clear" => drop(app.run("select.clear", json!({}))),
"ui.unsection" => drop(app.run("inspect.section", json!({"clear": true}))),
"ui.unsection" => {
app.tree.hidden_section = None;
drop(app.run("inspect.section", json!({"clear": true})));
}
"ui.editSection" => app.start("inspect.section"),
"ui.sectionVisible" => crate::browser::set_section_visible(app, p.get("visible").and_then(Value::as_bool).unwrap_or(true)),
"ui.fit" => app.animate_view("fit"),
"ui.home" => app.animate_view("home"),
// One command for the whole selection: all fixed unless all already are.