cursive/examples/progress.rs
2016-07-26 12:25:06 -07:00

50 lines
1.5 KiB
Rust

extern crate cursive;
use cursive::prelude::*;
use std::thread;
use std::time::Duration;
fn main() {
let mut siv = Cursive::new();
siv.add_layer(Dialog::empty()
.title("Progress bar example")
.padding((0, 0, 1, 1))
.content(Button::new("Start", |s| {
// Number of ticks
let n_max = 1000;
// This is the callback channel
let cb = s.cb_sink().clone();
s.pop_layer();
s.add_layer(Panel::new(FullView::full_width(
ProgressBar::new()
.range(0, n_max)
.with_task(move |ticker| {
// This closure will be called in a separate thread.
for _ in 0..n_max {
thread::sleep(Duration::from_millis(5));
// The ticker method increases the progress value
ticker(1);
}
// When we're done, send a callback through the channel
cb.send(Box::new(move |s| {
s.pop_layer();
s.add_layer(Dialog::empty()
.title("Work done!")
.content(TextView::new("Phew!"))
.button("Finally!", |s| s.quit()));
}))
.unwrap();
})
)));
})));
siv.set_fps(30);
siv.run();
}