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 }