windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation
#![allow(clippy::all)]
#![allow(noop_method_call)]
use std::fmt::Write;

use super::traits::Renderable;

#[derive(Debug, Clone, Default)]
pub struct TreeItem {
    pub label: String,
    pub children: Vec<TreeItem>,
    pub expanded: bool,
}

impl TreeItem {
    #[inline]
    pub fn new(label: String) -> TreeItem {
        TreeItem {
            label,
            children: Vec::new(),
            expanded: false,
        }
    }
    #[inline]
    pub fn child(mut self, item: TreeItem) -> TreeItem {
        self.children.push(item);
        self
    }
    #[inline]
    pub fn expanded(mut self, expanded: bool) -> TreeItem {
        self.expanded = expanded;
        self
    }
    #[inline]
    pub fn render(&self, depth: i32) -> String {
        let indent_px = depth * 20;
        let icon = {
            if self.children.len() > (0 as usize) {
                if self.expanded {
                    "".to_string()
                } else {
                    "".to_string()
                }
            } else {
                "".to_string()
            }
        };
        let mut html = {
            let mut __s = String::with_capacity(64);
            write!(
                &mut __s,
                "<div class='wj-tree-item' style='padding-left: {}px;'>
  <span class='wj-tree-icon'>{}</span>
  <span>{}</span>
</div>
",
                indent_px, icon, self.label
            )
            .unwrap();
            __s
        };
        if self.expanded {
            let mut i = 0;
            while i < (self.children.len() as i64) {
                let child = &self.children[i as usize];
                html = format!("{}{}", html, child.render(depth + 1));
                i += 1;
            }
        }
        html
    }
}

#[derive(Debug, Clone, Default)]
pub struct TreeView {
    pub items: Vec<TreeItem>,
}

impl TreeView {
    #[inline]
    pub fn new() -> TreeView {
        TreeView { items: Vec::new() }
    }
    #[inline]
    pub fn item(mut self, item: TreeItem) -> TreeView {
        self.items.push(item);
        self
    }
}

impl Renderable for TreeView {
    #[inline]
    fn render(self) -> String {
        let mut html = "<div class='wj-tree-view'>
"
        .to_string();
        let mut i = 0;
        while i < (self.items.len() as i64) {
            let item = &self.items[i as usize];
            html = format!("{}{}", html, item.render(0));
            i += 1;
        }
        format!("{}</div>", html)
    }
}