Skip to content

Commit 77e9061

Browse files
committed
Final frontend network interface file
1 parent 1688691 commit 77e9061

4 files changed

Lines changed: 461 additions & 445 deletions

File tree

editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs

Lines changed: 2 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,12 +1634,9 @@ impl<'a> MessageHandler<NodeGraphMessage, NodeGraphMessageContext<'a>> for NodeG
16341634
responses.add(PropertiesPanelMessage::Refresh);
16351635
responses.add(NodeGraphMessage::UpdateActionButtons);
16361636
if graph_view_overlay_open {
1637-
let nodes_to_render = self.collect_nodes(network_interface, breadcrumb_network_path);
1637+
let nodes_to_render = network_interface.collect_nodes(&self.node_graph_errors, breadcrumb_network_path);
16381638
self.frontend_nodes = nodes_to_render.keys().copied().collect();
1639-
let previewed_node = network_interface
1640-
.upstream_output_connector(&InputConnector::Export(0), breadcrumb_network_path)
1641-
.and_then(|output_connector| output_connector.node_id())
1642-
.filter(|output_node| network_interface.root_node(breadcrumb_network_path).is_some_and(|root_node| root_node.node_id != node_id));
1639+
let previewed_node = network_interface.previewed_node(breadcrumb_network_path);
16431640

16441641
responses.add(FrontendMessage::UpdateNodeGraphNodes {
16451642
nodes_to_render,
@@ -2490,95 +2487,6 @@ impl NodeGraphMessageHandler {
24902487
added_wires
24912488
}
24922489

2493-
fn collect_nodes(&self, network_interface: &mut NodeNetworkInterface, breadcrumb_network_path: &[NodeId]) -> HashMap<NodeId, FrontendNodeOrLayer> {
2494-
let Some(network) = network_interface.nested_network(breadcrumb_network_path) else {
2495-
log::error!("Could not get nested network when collecting nodes");
2496-
return HashMap::new();
2497-
};
2498-
let selected_nodes = network_interface.selected_nodes_in_nested_network(breadcrumb_network_path).unwrap_or_default();
2499-
let mut nodes = HashMap::new();
2500-
for (node_id, visible) in network.nodes.iter().map(|(node_id, node)| (*node_id, node.visible)).collect::<Vec<_>>() {
2501-
let node_id_path = [breadcrumb_network_path, &[node_id]].concat();
2502-
2503-
let errors = self
2504-
.node_graph_errors
2505-
.iter()
2506-
.find(|error| error.node_path == node_id_path)
2507-
.map(|error| format!("{:?}", error.error.clone()))
2508-
.or_else(|| {
2509-
if self.node_graph_errors.iter().any(|error| error.node_path.starts_with(&node_id_path)) {
2510-
Some("Node graph type error within this node".to_string())
2511-
} else {
2512-
None
2513-
}
2514-
});
2515-
2516-
let metadata = FrontendNodeMetadata {
2517-
can_be_layer: network_interface.is_eligible_to_be_layer(&node_id, breadcrumb_network_path),
2518-
display_name: network_interface.display_name(&node_id, breadcrumb_network_path),
2519-
selected: selected_nodes.0.contains(&node_id),
2520-
reference: network_interface.reference(&node_id, breadcrumb_network_path).cloned().unwrap_or_default(),
2521-
visible,
2522-
errors,
2523-
};
2524-
2525-
let frontend_node_or_layer = match network_interface.is_layer(&node_id, network_path) {
2526-
true => {
2527-
let Some(position) = network_interface.position(&node_id, breadcrumb_network_path) else {
2528-
log::error!("Could not get position for node: {node_id}");
2529-
continue;
2530-
};
2531-
2532-
let position = FrontendXY { x: position.x, y: position.y };
2533-
2534-
let inputs = (0..network_interface.number_of_inputs(&node_id, breadcrumb_network_path))
2535-
.map(|input_index| network_interface.frontend_input_from_connector(&InputConnector::node(node_id, input_index), breadcrumb_network_path))
2536-
.collect();
2537-
2538-
let outputs = (0..network_interface.number_of_outputs(&node_id, breadcrumb_network_path))
2539-
.map(|output_index| network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, output_index), breadcrumb_network_path))
2540-
.collect();
2541-
2542-
let node = Some(FrontendNode { position, inputs, outputs });
2543-
2544-
FrontendNodeOrLayer { metadata, node, layer: None }
2545-
}
2546-
false => {
2547-
let Some(position) = network_interface.position(&node_id, breadcrumb_network_path) else {
2548-
log::error!("Could not get position for node: {node_id}");
2549-
continue;
2550-
};
2551-
let position = FrontendXY { x: position.x, y: position.y };
2552-
2553-
let Some(bottom_input) = network_interface.frontend_input_from_connector(&InputConnector::node(node_id, 0), breadcrumb_network_path) else {
2554-
log::error!("Layer must have a visible primary input");
2555-
continue;
2556-
};
2557-
let side_input = network_interface.frontend_input_from_connector(&InputConnector::node(node_id, 1), breadcrumb_network_path);
2558-
let Some(output) = network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, 0), breadcrumb_network_path) else {
2559-
log::error!("Layer must have a visible primary output");
2560-
continue;
2561-
};
2562-
2563-
let layer = Some(FrontendLayer {
2564-
bottom_input,
2565-
side_input,
2566-
output,
2567-
position,
2568-
locked: network_interface.is_locked(&node_id, breadcrumb_network_path),
2569-
chain_width: network_interface.chain_width(&node_id, breadcrumb_network_path),
2570-
layer_has_left_border_gap: network_interface.layer_has_left_border_gap(&node_id, breadcrumb_network_path),
2571-
primary_input_connected_to_layer: network_interface.primary_output_connected_to_layer(&node_id, breadcrumb_network_path),
2572-
primary_output_connected_to_layer: network_interface.primary_input_connected_to_layer(&node_id, breadcrumb_network_path),
2573-
});
2574-
FrontendNodeOrLayer { metadata, node: None, layer }
2575-
}
2576-
};
2577-
nodes.insert(node_id, frontend_node_or_layer);
2578-
}
2579-
nodes
2580-
}
2581-
25822490
fn collect_subgraph_names(network_interface: &mut NodeNetworkInterface, breadcrumb_network_path: &[NodeId]) -> Option<Vec<String>> {
25832491
let mut current_network_path = vec![];
25842492
let mut current_network = network_interface.nested_network(&current_network_path).unwrap();

editor/src/messages/portfolio/document/node_graph/utility_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ pub struct FrontendLayer {
125125
#[serde(rename = "chainWidth")]
126126
pub chain_width: u32,
127127
#[serde(rename = "layerHasLeftBorderGap")]
128-
layer_has_left_border_gap: bool,
128+
pub layer_has_left_border_gap: bool,
129129
#[serde(rename = "primaryInputConnectedToLayer")]
130130
pub primary_input_connected_to_layer: bool,
131131
#[serde(rename = "primaryOutputConnectedToLayer")]

0 commit comments

Comments
 (0)