Crates.io | managarr-tree-widget |
lib.rs | managarr-tree-widget |
version | 0.24.0 |
source | src |
created_at | 2024-11-18 21:48:22.149852 |
updated_at | 2024-11-18 21:48:22.149852 |
description | Tree Widget for Managarr |
homepage | |
repository | https://github.com/Dark-Alex-17/managarr-tree-widget |
max_upload_size | |
id | 1452692 |
size | 91,067 |
Ratatui Widget built to show Tree Data structures.
Add this widget to your project using the following command:
cargo add managarr-tree-widget
To run the example widget, simply run:
cargo run --example example
The following is an example of how to create a tree of strings (namely one like the one used in the example):
fn draw(&mut self, frame: &mut Frame) {
let area = frame.area();
let tree_items = vec![
TreeItem::new_leaf("Alfa"),
TreeItem::new(
"Bravo",
vec![
TreeItem::new_leaf("Charlie"),
TreeItem::new(
"Delta",
vec![TreeItem::new_leaf("Echo"), TreeItem::new_leaf("Foxtrot")],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("Golf"),
],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("Hotel"),
];
let widget = Tree::new(&tree_items)
.expect("all item identifiers are unique")
.block(
Block::bordered()
.title("Tree Widget"),
)
.highlight_style(
Style::new()
.fg(Color::Black)
.bg(Color::LightGreen)
.add_modifier(Modifier::BOLD),
)
.highlight_symbol(">> ");
frame.render_stateful_widget(widget, area, &mut self.state);
}
This will generate the following tree structure:
┌── Alfa
├── Bravo
│ ├── Charlie
│ ├── Delta
│ │ ├── Echo
│ │ └── Foxtrot
│ └── Golf
└── Hotel
This example assumes the existence of a self.state
field that is initialized with TreeState::default()
. The TreeItem
struct is used to create a tree of items, and the Tree
struct is used to create the widget itself.
A more detailed and feature-complete example is available in the example file.
The original project for this widget is the Ratatui Tree Widget, which was purpose built for the specific use
case of mqttui
.
The updated version of the tree widget that allows more generic types is created by me, Alex Clarke.