(state: &EditorState)
| 3272 | |
| 3273 | pub fn path(&self, doc: &SceneDoc, key: SceneKey) -> String { |
| 3274 | let mut parts = Vec::new(); |
| 3275 | let mut cursor = Some(key); |
| 3276 | let mut guard = 0; |
| 3277 | while let Some(key) = cursor { |
| 3278 | parts.push(doc.scene.key_name_or_id(key).to_string()); |
| 3279 | cursor = self.node(doc, key.as_u32()).and_then(|node| node.parent); |
| 3280 | guard += 1; |
| 3281 | if guard > doc.scene.nodes.len() { |
| 3282 | break; |
| 3283 | } |
| 3284 | } |
| 3285 | parts.reverse(); |
| 3286 | parts.join("/") |
| 3287 | } |
| 3288 | } |
| 3289 | |
| 3290 | pub fn scene_tree_view( |
| 3291 | doc: &SceneDoc, |
| 3292 | selected_key: Option<u32>, |
| 3293 | filter: &str, |
| 3294 | collapsed_keys: &[u32], |
| 3295 | ) -> SceneTreeRows { |
| 3296 | let filter = NodePickerFilter::parse(filter); |
| 3297 | let index = SceneDocIndex::new(doc); |
| 3298 | if !filter.is_empty() { |
| 3299 | return filtered_scene_tree_view_indexed(doc, &index, selected_key, &filter); |
| 3300 | } |
| 3301 | let mut out = SceneTreeRows::default(); |
| 3302 | let mut visited = Vec::new(); |
| 3303 | for key in index.roots().iter().copied() { |
| 3304 | push_scene_tree_row( |
| 3305 | doc, |
| 3306 | &index, |
| 3307 | key, |
| 3308 | 0, |
no test coverage detected