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();
}