windjammer_ui/components/generated/
treeview.rs

1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use std::fmt::Write;
4
5use super::traits::Renderable;
6
7pub struct TreeItem {
8    label: String,
9    children: Vec<TreeItem>,
10    expanded: bool,
11}
12
13impl TreeItem {
14    #[inline]
15    pub fn new(label: String) -> TreeItem {
16        TreeItem {
17            label,
18            children: Vec::new(),
19            expanded: false,
20        }
21    }
22    #[inline]
23    pub fn child(mut self, item: TreeItem) -> TreeItem {
24        self.children.push(item);
25        self
26    }
27    #[inline]
28    pub fn expanded(mut self, expanded: bool) -> TreeItem {
29        self.expanded = expanded;
30        self
31    }
32    #[inline]
33    pub fn render(&self, depth: i32) -> String {
34        let indent_px = depth * 20;
35        let icon = {
36            if self.children.len() > 0 {
37                if self.expanded {
38                    "▼"
39                } else {
40                    "▶"
41                }
42            } else {
43                "•"
44            }
45        };
46        let mut html = {
47            let mut __s = String::with_capacity(64);
48            write!(
49                &mut __s,
50                "<div class='wj-tree-item' style='padding-left: {}px;'>
51  <span class='wj-tree-icon'>{}</span>
52  <span>{}</span>
53</div>
54",
55                indent_px, icon, self.label
56            )
57            .unwrap();
58            __s
59        };
60        if self.expanded {
61            let mut i = 0;
62            while i < self.children.len() {
63                let child = &self.children[i];
64                html = format!("{}{}", html, child.render(depth + 1));
65                i += 1;
66            }
67        }
68        html
69    }
70}
71
72pub struct TreeView {
73    items: Vec<TreeItem>,
74}
75
76impl TreeView {
77    #[inline]
78    pub fn new() -> TreeView {
79        TreeView { items: Vec::new() }
80    }
81    #[inline]
82    pub fn item(mut self, item: TreeItem) -> TreeView {
83        self.items.push(item);
84        self
85    }
86}
87
88impl Renderable for TreeView {
89    #[inline]
90    fn render(self) -> String {
91        let mut html = "<div class='wj-tree-view'>
92"
93        .to_string();
94        let mut i = 0;
95        while i < self.items.len() {
96            let item = &self.items[i];
97            html = format!("{}{}", html, item.render(0));
98            i += 1;
99        }
100        format!("{}</div>", html)
101    }
102}