cursive/examples/radio.rs

50 lines
1.8 KiB
Rust
Raw Normal View History

2016-10-02 21:55:19 +00:00
extern crate cursive;
use cursive::views::{Dialog, DummyView, LinearLayout, RadioGroup};
2018-06-11 06:29:10 +00:00
use cursive::Cursive;
2016-10-02 21:55:19 +00:00
2018-01-16 02:55:27 +00:00
// This example uses radio buttons.
2016-10-02 21:55:19 +00:00
fn main() {
let mut siv = Cursive::default();
2016-10-02 21:55:19 +00:00
// We need to pre-create the groups for our RadioButtons.
let mut color_group: RadioGroup<String> = RadioGroup::new();
let mut size_group: RadioGroup<u32> = RadioGroup::new();
2017-10-12 23:38:55 +00:00
siv.add_layer(
Dialog::new()
2016-10-02 21:55:19 +00:00
.title("Make your selection")
// We'll have two columns side-by-side
.content(LinearLayout::horizontal()
.child(LinearLayout::vertical()
// The color group uses the label itself as stored value
2018-01-16 02:55:27 +00:00
// By default, the first item is selected.
2016-10-02 21:55:19 +00:00
.child(color_group.button_str("Red"))
.child(color_group.button_str("Green"))
.child(color_group.button_str("Blue")))
2018-01-16 02:55:27 +00:00
// A DummyView is used as a spacer
2016-10-02 21:55:19 +00:00
.child(DummyView)
.child(LinearLayout::vertical()
// For the size, we store a number separately
.child(size_group.button(5, "Small"))
2018-01-16 02:55:27 +00:00
// The initial selection can also be overriden
2016-10-02 21:55:19 +00:00
.child(size_group.button(15, "Medium").selected())
// The large size is out of stock, sorry!
.child(size_group.button(25, "Large").disabled())))
.button("Ok", move |s| {
// We retrieve the stored value for both group.
let color = color_group.selection();
let size = size_group.selection();
s.pop_layer();
// And we simply print the result.
2018-01-16 02:55:27 +00:00
let text = format!("Color: {}\nSize: {}cm", color, size);
s.add_layer(Dialog::text(text)
2016-10-02 21:55:19 +00:00
.button("Ok", |s| s.quit()));
2017-10-12 23:38:55 +00:00
}),
);
2016-10-02 21:55:19 +00:00
siv.run();
}