tuix_core/layout/
hierarchy.rs1use 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}