windjammer_ui/components/generated/
treeview.rs1#![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}