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() -> Result<(), ()> {
9    let mut cursive = default();
10
11    let mut tree = SimpleTreeBackend::tree_view();
12
13    // A few roots
14
15    tree.model.add_root(NodeKind::Leaf, (), "Hello");
16    tree.model.add_root(NodeKind::Branch, (), "World");
17
18    // Add 10 children to "World"
19
20    let world = tree.model.at_path_mut([1].into()).expect("at_path_mut");
21    for i in 0..10 {
22        world.add_child(NodeKind::Leaf, (), format!("Child #{}", i + 1));
23    }
24
25    // Add 10 grandchildren each to "Child #5" -> "Child #10"
26    // Note that we change them to branch in order to support having children
27
28    let mut gc = 0;
29    for c in 4..10 {
30        let child = tree.model.at_path_mut([1, c].into()).expect("at_path_mut");
31        child.kind = NodeKind::Branch;
32        for _ in 0..10 {
33            child.add_child(NodeKind::Leaf, (), format!("Grandchild #{}", gc + 1));
34            gc += 1;
35        }
36    }
37
38    // Expand all nodes
39
40    tree.model.expand(None)?;
41
42    cursive.add_fullscreen_layer(Panel::new(tree.scrollable()));
43    cursive.add_global_callback('q', |cursive| cursive.quit());
44
45    cursive.run();
46
47    Ok(())
48}