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