Skip to content

Instantly share code, notes, and snippets.

@jcbritobr
Created October 11, 2020 21:31
Show Gist options
  • Save jcbritobr/8af426a62be2fd00dfdac05aeffd0610 to your computer and use it in GitHub Desktop.
Save jcbritobr/8af426a62be2fd00dfdac05aeffd0610 to your computer and use it in GitHub Desktop.
Cursive ui, iteration and mutation of values in rust
use cursive::{
self, traits::Boxable, traits::Nameable, views::Button, views::Dialog, views::DummyView,
views::EditView, views::LinearLayout, views::SelectView, Cursive,
};
fn main() {
let mut siv = cursive::default();
let select = SelectView::<String>::new()
.on_submit(on_submit)
.with_name("select")
.fixed_size((10, 5));
let buttons = LinearLayout::vertical()
.child(Button::new("Add new", add_name))
.child(Button::new("Delete", delete_name))
.child(DummyView)
.child(Button::new("Quit", Cursive::quit));
siv.add_layer(
Dialog::around(
LinearLayout::horizontal()
.child(select)
.child(DummyView)
.child(buttons),
)
.title("Select a profile"),
);
siv.run();
}
fn add_name(s: &mut Cursive) {
fn ok(s: &mut Cursive, name: &str) {
s.call_on_name("select", |view: &mut SelectView<String>| {
view.add_item_str(name)
});
s.pop_layer();
}
let edt_view = EditView::new()
.on_submit(ok)
.with_name("name")
.fixed_width(10);
let dialog = Dialog::around(edt_view)
.title("Enter a new name")
.button("Ok", |s| {
let name = s
.call_on_name("name", |view: &mut EditView| view.get_content())
.unwrap();
ok(s, &name);
})
.button("Cancel", |s| {
s.pop_layer();
});
s.add_layer(dialog);
}
fn delete_name(s: &mut Cursive) {
let mut select = s.find_name::<SelectView<String>>("select").unwrap();
match select.selected_id() {
None => s.add_layer(Dialog::info("No name to remove")),
Some(focus) => {
select.remove_item(focus);
}
}
}
fn on_submit(s: &mut Cursive, name: &str) {
s.pop_layer();
let dialog = Dialog::text(format!("Name: {}\nAwesome: yes", name))
.title(format!("{}'s info", name))
.button("Quit", Cursive::quit);
s.add_layer(dialog);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment