#[derive(Clone, Debug)]
pub struct TreeItem {
pub id: usize,
pub parent: Option<usize>,
pub depth: usize,
pub collapsible: bool,
pub row_count: usize,
}
impl TreeItem {
pub fn new(id: usize) -> Self {
Self {
id,
parent: None,
depth: 0,
collapsible: false,
row_count: 1,
}
}
pub fn with_parent(mut self, parent: usize) -> Self {
self.parent = Some(parent);
self
}
pub fn with_depth(mut self, depth: usize) -> Self {
self.depth = depth;
self
}
pub fn collapsible(mut self) -> Self {
self.collapsible = true;
self
}
pub fn with_row_count(mut self, count: usize) -> Self {
self.row_count = count;
self
}
}
#[derive(Clone, Debug)]
pub struct TreeIcons {
pub selected: &'static str,
pub collapsed: &'static str,
pub expanded: &'static str,
pub blank: &'static str,
}
impl Default for TreeIcons {
fn default() -> Self {
Self {
selected: ">",
collapsed: "▶",
expanded: "▼",
blank: " ",
}
}
}
impl TreeIcons {
#[inline]
pub fn selection(&self, is_selected: bool) -> &'static str {
if is_selected {
self.selected
} else {
self.blank
}
}
#[inline]
pub fn collapse(&self, is_collapsed: bool) -> &'static str {
if is_collapsed {
self.collapsed
} else {
self.expanded
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct Indent {
pub unit: u16,
}
impl Default for Indent {
fn default() -> Self {
Self { unit: 2 }
}
}
impl Indent {
pub fn new(unit: u16) -> Self {
Self { unit }
}
#[inline]
pub fn level(&self, n: u16) -> u16 {
n * self.unit
}
#[inline]
pub fn at(&self, level: usize) -> u16 {
(level as u16) * self.unit
}
}