Add atomic Process group removal with explicit reuse and ordering impact

This commit is contained in:
2026-09-24 20:09:26 -07:00
parent c62622cce7
commit fe637dcd27
21 changed files with 2916 additions and 38 deletions
+25 -17
View File
@@ -77,7 +77,7 @@ impl Opened {
{
return None;
}
let scenario_selection = if request.scenario.is_some() {
let scenario_selection = if request.scenario.is_some() || request.process.is_some() {
Some(app.multiselect_snapshot()?)
} else {
None
@@ -437,21 +437,23 @@ pub fn popup(app: &App) -> Option<Menu<Message>> {
true,
));
if let Some(snapshot) = app.multiselect_snapshot().filter(|s| s.targets().len() > 1)
&& selected
&& (selected || request.process.is_some())
{
entries.push(Entry::title(format!(
"{} selected",
snapshot.targets().len()
)));
entries.push(item(
"Inspect this element",
Message::DiagramSelection(SelectionEvent::Choose(
context,
target.clone(),
Choice::Inspect,
)),
true,
));
if selected {
entries.push(item(
"Inspect this element",
Message::DiagramSelection(SelectionEvent::Choose(
context,
target.clone(),
Choice::Inspect,
)),
true,
));
}
entries.push(item(
"Select only this element",
Message::DiagramSelection(SelectionEvent::Choose(
@@ -465,9 +467,13 @@ pub fn popup(app: &App) -> Option<Menu<Message>> {
entries.push(Entry::title(
"Drag contributions within one column to reorder",
));
entries.push(Entry::disabled(
"Hide unavailable · cards are model contributions",
));
if let Some(removal) = crate::app::process_removal::begin(app) {
entries.push(item(
"Remove selected contributions / links…",
removal,
true,
));
}
} else {
entries.push(item(
"Hide selected placements",
@@ -475,9 +481,11 @@ pub fn popup(app: &App) -> Option<Menu<Message>> {
crate::app::multiselect::placements(&snapshot).is_some(),
));
}
entries.push(Entry::disabled(
"Delete selected from model (not yet available)",
));
if request.process.is_none() {
entries.push(Entry::disabled(
"Delete selected from model (not yet available)",
));
}
return Some(Menu {
token: opened.token,
anchor: request.anchor,