tuix_core/layout/
hierarchy.rs

1use morphorm::Hierarchy;
2
3use crate::{ChildIterator, Entity, TreeIterator};
4
5use std::iter::Rev;
6
7impl<'a> Hierarchy<'a> for crate::Tree {
8    type Item = Entity;
9    type DownIter = std::vec::IntoIter<Entity>;
10    type UpIter = Rev<std::vec::IntoIter<Entity>>;
11    type ChildIter = ChildIterator<'a>;
12
13    fn down_iter(&'a self) -> Self::DownIter {
14        let iterator = TreeIterator {
15            tree: self,
16            current_node: Some(Entity::root()),
17        };
18        iterator.collect::<Vec<_>>().into_iter()
19    }
20
21    fn up_iter(&'a self) -> Self::UpIter {
22        let iterator = TreeIterator {
23            tree: self,
24            current_node: Some(Entity::root()),
25        };
26        iterator.collect::<Vec<_>>().into_iter().rev()
27    }
28
29    fn child_iter(&'a self, node: Self::Item) -> Self::ChildIter {
30        ChildIterator {
31            tree: self,
32            current_forward: self.get_first_child(node),
33            current_backward: self.get_last_child(node),
34        }
35    }
36
37    fn is_first_child(&self, node: Self::Item) -> bool {
38        self.is_first_child(node)
39    }
40
41    fn is_last_child(&self, node: Self::Item) -> bool {
42        self.is_last_child(node)
43    }
44
45    fn parent(&self, node: Self::Item) -> Option<Self::Item> {
46        self.get_parent(node)
47    }
48}