main.rs
 1  use std::fmt::format;
 2  
 3  use cursive::view::{Nameable, Resizable};
 4  use cursive::views::{Button, Dialog, DummyView, EditView, LinearLayout, SelectView};
 5  use cursive::Cursive;
 6  
 7  fn main() {
 8      let mut siv = cursive::default();
 9  
10      let select = SelectView::<String>::new()
11          .on_submit(on_submit)
12          .with_name("select")
13          .fixed_size((10, 5));
14  
15      let buttons = LinearLayout::vertical()
16          .child(Button::new("Add New Name", add_name))
17          .child(Button::new("Delete", delete_name))
18          .child(Button::new("Quit", Cursive::quit));
19  
20      siv.add_layer(
21          Dialog::around(
22              LinearLayout::horizontal()
23                  .child(select)
24                  .child(DummyView)
25                  .child(buttons),
26          )
27          .title("Select a Profile"),
28      );
29  
30      siv.run();
31  }
32  
33  fn add_name(s: &mut Cursive) {
34      fn ok(s: &mut Cursive, name: &str) {
35          s.call_on_name("select", |view: &mut SelectView<String>| {
36              view.add_item_str(name)
37          });
38          s.pop_layer();
39      }
40  
41      s.add_layer(
42          Dialog::around(
43              EditView::new()
44                  .on_submit(ok)
45                  .with_name("name")
46                  .fixed_width(10),
47          )
48          .title("Enter a new name")
49          .button("Ok", |s| {
50              let name = s
51                  .call_on_name("name", |view: &mut EditView| view.get_content())
52                  .unwrap();
53              ok(s, &name);
54          })
55          .button("Cancel", |s| {
56              s.pop_layer();
57          }),
58      );
59  }
60  
61  fn delete_name(s: &mut Cursive) {
62      let mut select = s.find_name::<SelectView<String>>("select").unwrap();
63      match select.selected_id() {
64          None => s.add_layer(Dialog::info("No Name to remove")),
65          Some(focus) => {
66              select.remove_item(focus);
67          }
68      }
69  }
70  
71  fn on_submit(s: &mut Cursive, name: &str) {
72      s.pop_layer();
73      s.add_layer(
74          Dialog::text(format!("Name: {}\nAwesome: Yes", name))
75              .title(format!("{}'s info", name))
76              .button("Quit", Cursive::quit),
77      );
78  }