diff --git a/Cargo.lock b/Cargo.lock index 216ee4d44..a06d657ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1135,6 +1135,7 @@ dependencies = [ "eframe", "egui_extras", "env_logger", + "log", "serde", ] diff --git a/crates/egui_extras/src/dock/behavior.rs b/crates/egui_extras/src/dock/behavior.rs index 3f9bc5475..a3927713e 100644 --- a/crates/egui_extras/src/dock/behavior.rs +++ b/crates/egui_extras/src/dock/behavior.rs @@ -12,9 +12,13 @@ pub trait Behavior { fn tab_text_for_leaf(&mut self, leaf: &Leaf) -> WidgetText; fn tab_text_for_node(&mut self, nodes: &Nodes, node_id: NodeId) -> WidgetText { - match &nodes.nodes[&node_id] { - Node::Leaf(leaf) => self.tab_text_for_leaf(leaf), - Node::Branch(branch) => format!("{:?}", branch.get_layout()).into(), + if let Some(node) = nodes.nodes.get(&node_id) { + match node { + Node::Leaf(leaf) => self.tab_text_for_leaf(leaf), + Node::Branch(branch) => format!("{:?}", branch.get_layout()).into(), + } + } else { + "MISSING NODE".into() } } diff --git a/examples/dock/Cargo.toml b/examples/dock/Cargo.toml index a7b27a2e6..fd2282c05 100644 --- a/examples/dock/Cargo.toml +++ b/examples/dock/Cargo.toml @@ -15,4 +15,5 @@ eframe = { path = "../../crates/eframe", features = [ ] } egui_extras = { path = "../../crates/egui_extras" } env_logger = "0.10" +log = "0.4" serde = { version = "1.0", features = ["derive"] } diff --git a/examples/dock/src/main.rs b/examples/dock/src/main.rs index 0c1f74f39..727b34b5f 100644 --- a/examples/dock/src/main.rs +++ b/examples/dock/src/main.rs @@ -244,12 +244,16 @@ fn tree_ui( nodes: &mut dock::Nodes, node_id: dock::NodeId, ) { + // Get the name BEFORE we remove the node below let text = format!( "{} - {node_id:?}", behavior.tab_text_for_node(nodes, node_id).text() ); - let Some(mut node) = nodes.nodes.remove(&node_id) else { return; }; + let Some(mut node) = nodes.nodes.remove(&node_id) else { + log::warn!("Missing node {node_id:?}"); + return; + }; egui::CollapsingHeader::new(text) .id_source((node_id, "tree"))