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}