Checkpoint source 7 workflows and in-progress diagram authoring redesign
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s
Preserve current core, source, REST, desktop, recovery, documentation and validation work, including AGENTS.md and the development summary. This is a work-in-progress checkpoint: the new compact palette has outstanding compilation errors and native acceptance; earlier passing gates retain their documented scope.
This commit is contained in:
@@ -711,14 +711,21 @@ pub fn view(app: &App) -> Element<'_, Message> {
|
||||
return out.push(label("Start with a Process, Scenario or State machine using Create element. Add occurrences or regions inside it to describe behavior.")).padding(24).into();
|
||||
};
|
||||
let e = &p.elements[&selected.id];
|
||||
let compact_process = matches!(e.kind(), Kind::Process | Kind::FunctionalChain)
|
||||
&& (uses_explicit_topology(p, e.id) || e.steps().is_none_or(Vec::is_empty));
|
||||
if e.kind() == Kind::StateMachine {
|
||||
out = column![text("States & modes").size(20)].spacing(8);
|
||||
} else if compact_process {
|
||||
// The process canvas owns its compact header and remaining-height layout.
|
||||
out = column![].spacing(6);
|
||||
} else if matches!(e.kind(), Kind::Process | Kind::FunctionalChain) {
|
||||
out = column![text("Processes & functional chains").size(20)].spacing(8);
|
||||
}
|
||||
out = out.push(
|
||||
pick_list(choices, Some(selected), Message::BehaviorOwner)
|
||||
.width(Fill)
|
||||
.text_size(13)
|
||||
.padding(10),
|
||||
.padding(if compact_process { 6 } else { 10 }),
|
||||
);
|
||||
if matches!(e.kind(), Kind::Process | Kind::FunctionalChain) {
|
||||
return topology::view(app, e.id, out);
|
||||
@@ -767,6 +774,17 @@ fn uses_explicit_topology(p: &Project, owner: Id) -> bool {
|
||||
})
|
||||
}
|
||||
pub fn selected_behavior(p: &Project, selected: Id) -> Option<Id> {
|
||||
if let Some(Relation {
|
||||
body: RelationBody::ContextualLink { owner, .. },
|
||||
..
|
||||
}) = p.relations.get(&selected)
|
||||
{
|
||||
return p
|
||||
.elements
|
||||
.get(owner)
|
||||
.filter(|e| matches!(e.kind(), Kind::Process | Kind::FunctionalChain))
|
||||
.map(|e| e.id);
|
||||
}
|
||||
let mut current = Some(
|
||||
p.relations
|
||||
.get(&selected)
|
||||
@@ -1154,7 +1172,7 @@ impl Scene {
|
||||
MessageKind::Timer { .. } => "timer · ",
|
||||
}
|
||||
};
|
||||
let message_label = if !scenario {
|
||||
let mut message_label = if !scenario {
|
||||
r.map(|r| r.name.clone()).unwrap_or_else(|| e.name.clone())
|
||||
} else if let MessageKind::Timer { expression } = message_kind {
|
||||
format!("{} · {expression}", e.name)
|
||||
@@ -1163,6 +1181,12 @@ impl Scene {
|
||||
} else {
|
||||
e.name.clone()
|
||||
};
|
||||
if scenario
|
||||
&& let Some(operation) = crate::data_values::operation_label(p, e)
|
||||
{
|
||||
message_label.push_str(" · ");
|
||||
message_label.push_str(&operation);
|
||||
}
|
||||
self.lines.push(Line {
|
||||
id: *id,
|
||||
points,
|
||||
@@ -2311,6 +2335,7 @@ mod direct_canvas_tests {
|
||||
f.owner,
|
||||
&format!("Reply {index}"),
|
||||
OccurrenceBody::Exchange {
|
||||
operation: None,
|
||||
exchange: Some(f.exchange),
|
||||
sender: Some(f.receiver),
|
||||
receiver: Some(f.sender),
|
||||
|
||||
Reference in New Issue
Block a user