Skip to main content

simple/
simple.rs

1use {
2    cursive::{view::*, *},
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" to "Child #10"
28    // Note that we change then to a branch in order to support having children
29
30    for c in 4..10 {
31        let child = tree.model.at_path_mut([1, c].into()).unwrap();
32        child.kind = NodeKind::Branch;
33        for gc in 0..10 {
34            child.add_child(NodeKind::Leaf, (), format!("Grandchild #{}", gc + 1).into());
35        }
36    }
37
38    cursive.add_fullscreen_layer(tree.scrollable());
39    cursive.add_global_callback('q', |cursive| cursive.quit());
40
41    cursive.run();
42}