use crate::{gtk::prelude::*, model::model::*};

impl<F, C> EventHandler<F, C>
where
    F: Fn(&C) + FnOnce(&C) + FnMut(&C),
{
    pub fn new(component: C, callback: F) -> EventHandler<F, C> {
        Self {
            component,
            callback,
        }
    }
}

pub trait BtnEventHandler {
    fn on_click(self) -> ();
}

impl<F, C> BtnEventHandler for EventHandler<F, C>
where
    F: Fn(&C) + FnOnce(&C) + FnMut(&C) + 'static,
    C: ButtonExt + WidgetExt,
{
    fn on_click(self) -> () {
        self.component
            .connect_clicked(move |button| (self.callback)(button));
    }
}