counter2/
counter2.rs

1use fltk::{app, button::Button, frame::Frame, group::Flex, prelude::*, window::Window};
2
3#[derive(Debug, Clone, Copy)]
4pub enum Message {
5    Increment,
6    Decrement,
7}
8
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10    let app = app::App::default();
11    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
12    let mut flex = Flex::default_fill().column();
13    flex.set_margins(30, 40, 30, 40);
14    flex.set_pad(10);
15    let mut but_inc = Button::default().with_label("+");
16    let mut frame = Frame::default().with_label("0");
17    let mut but_dec = Button::default().with_label("-");
18    flex.end();
19    wind.end();
20    wind.show();
21
22    let (s, r) = app::channel::<Message>();
23
24    but_inc.emit(s, Message::Increment);
25    but_dec.emit(s, Message::Decrement);
26
27    while app.wait() {
28        let label: i32 = frame.label().unwrap().parse()?;
29
30        if let Some(msg) = r.recv() {
31            match msg {
32                Message::Increment => frame.set_label(&(label + 1).to_string()),
33                Message::Decrement => frame.set_label(&(label - 1).to_string()),
34            }
35        }
36    }
37    Ok(())
38}