Skip to main content

simple/
simple.rs

1use {
2    cursive::{view::*, views::*, *},
3    cursive_tree::*,
4};
5
6// In this example we'll be using SimpleTreeBackend and manually adding nodes
7
8fn main() {
9    let mut cursive = Cursive::default();
10
11    let mut tree = SimpleTreeBackend::tree_view(());
12
13    // A few roots
14
15    tree.model.add_root(NodeKind::Leaf, (), "Hello".into());
16    tree.model.add_root(NodeKind::Branch, (), "World".into());
17
18    // Add 10 children to "World"
19    // and expand it
20
21    let world = tree.model.at_path_mut([1].into()).unwrap();
22    for i in 0..10 {
23        world.add_child(NodeKind::Leaf, (), format!("Child #{}", i + 1).into());
24    }
25    world.expand_branch(()).unwrap();
26
27    // Add 10 grandchildren each to "Child #5" -> "Child #10"
28    // Note that we change them to branch in order to support having children
29
30    let mut gc = 0;
31    for c in 4..10 {
32        let child = tree.model.at_path_mut([1, c].into()).unwrap();
33        child.kind = NodeKind::Branch;
34        for _ in 0..10 {
35            child.add_child(NodeKind::Leaf, (), format!("Grandchild #{}", gc + 1).into());
36            gc += 1;
37        }
38    }
39
40    cursive.add_fullscreen_layer(Panel::new(tree.scrollable()));
41    cursive.add_global_callback('q', |cursive| cursive.quit());
42
43    cursive.run();
44}