1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use fltk::{prelude::*, *};
use std::ops::{Deref, DerefMut};

struct MyButton {
    grp: group::Group,
}

impl MyButton {
    pub fn new(w: i32, h: i32) -> MyButton {
        let mut grp = group::Group::new(0, 0, w, h, None);
        grp.set_frame(enums::FrameType::RFlatBox);
        grp.set_color(enums::Color::from_u32(0x01579b));
        grp.set_align(enums::Align::Center);
        let mut btn = button::Button::new(grp.x() + 420, grp.y() + 35, 30, 25, "@1+");
        btn.set_frame(enums::FrameType::OFlatFrame);
        btn.set_color(enums::Color::from_u32(0xf49da9));
        btn.set_callback(move |b| b.parent().unwrap().hide());
        grp.end();
        grp.handle(|g, ev| match ev {
            enums::Event::Push => {
                g.do_callback();
                true
            }
            _ => false,
        });
        MyButton { grp }
    }
}

impl Deref for MyButton {
    type Target = group::Group;
    fn deref(&self) -> &Self::Target {
        &self.grp
    }
}
impl DerefMut for MyButton {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.grp
    }
}

fn main() {
    let app = app::App::default();
    app::set_visible_focus(false);
    let mut win = window::Window::default().with_size(500, 400);
    win.make_resizable(true);
    win.set_color(enums::Color::Black);
    let mut col = group::Flex::default_fill().column();
    col.set_margin(20);
    col.set_pad(10);

    for i in 0..3 {
        let label = format!("Button {}", i + 1);
        let mut but = MyButton::new(500, 100);
        but.set_label(&label);
        but.set_callback(move |_| println!("{label}"));
    }

    col.end();
    win.end();
    win.show();
    app.run().unwrap();
}