From d2350d494a022006393cfe7388566686eafe78cf Mon Sep 17 00:00:00 2001 From: huisedenanhai Date: Sat, 19 Nov 2022 22:16:48 +0800 Subject: [PATCH 1/2] Node can decide whether it can be deleted --- egui_node_graph/src/editor_ui.rs | 13 ++++++++++--- egui_node_graph/src/traits.rs | 9 +++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index 8af69f2..874868e 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -771,9 +771,16 @@ where // --- Interaction --- // Titlebar buttons - if Self::close_button(ui, outer_rect).clicked() { - responses.push(NodeResponse::DeleteNodeUi(self.node_id)); - }; + let can_delete = self.graph.nodes[self.node_id].user_data.can_delete( + self.node_id, + self.graph, + user_state, + ); + if can_delete { + if Self::close_button(ui, outer_rect).clicked() { + responses.push(NodeResponse::DeleteNodeUi(self.node_id)); + }; + } let window_response = ui.interact( outer_rect, diff --git a/egui_node_graph/src/traits.rs b/egui_node_graph/src/traits.rs index 6f02320..a9cf2ef 100644 --- a/egui_node_graph/src/traits.rs +++ b/egui_node_graph/src/traits.rs @@ -102,6 +102,15 @@ where ) -> Option { None } + + fn can_delete( + &self, + _node_id: NodeId, + _graph: &Graph, + _user_state: &mut Self::UserState, + ) -> bool { + true + } } /// This trait can be implemented by any user type. The trait tells the library From 76ab0bd9e11be0205de38a617e77741c5c039da2 Mon Sep 17 00:00:00 2001 From: huisedenanhai Date: Mon, 21 Nov 2022 22:32:32 +0800 Subject: [PATCH 2/2] Collapse if statement --- egui_node_graph/src/editor_ui.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index 874868e..d3e9369 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -776,11 +776,10 @@ where self.graph, user_state, ); - if can_delete { - if Self::close_button(ui, outer_rect).clicked() { - responses.push(NodeResponse::DeleteNodeUi(self.node_id)); - }; - } + + if can_delete && Self::close_button(ui, outer_rect).clicked() { + responses.push(NodeResponse::DeleteNodeUi(self.node_id)); + }; let window_response = ui.interact( outer_rect,