pub struct Tray {
pub(crate) icon: Option<String>,
pub(crate) menus: Vec<TrayMenu>,
pub(crate) hovered_text: String,
}
impl Tray {
pub fn new() -> Tray {
Tray {
icon: None,
menus: vec![],
hovered_text: "".to_string(),
}
}
pub fn icon(mut self, icon: impl ToString) -> Tray {
self.icon = Some(icon.to_string());
self
}
pub fn hovered_text(mut self, text: impl ToString) -> Tray {
self.hovered_text = text.to_string();
self
}
pub fn add_menu(&mut self, label: impl ToString, icon: Option<String>) -> &mut TrayMenu {
self.menus.push(TrayMenu {
id: crate::unique_id_u32(),
label: label.to_string(),
icon,
callback: Box::new(|| {}),
children: vec![],
});
self.menus.last_mut().unwrap()
}
}
pub struct TrayMenu {
pub(crate) id: u32,
pub(crate) label: String,
pub(crate) icon: Option<String>,
pub(crate) callback: Box<dyn Fn()>,
pub(crate) children: Vec<TrayMenu>,
}
impl TrayMenu {
pub fn set_callback(&mut self, callback: impl Fn() + 'static) {
self.callback = Box::new(callback);
}
pub fn add_child(&mut self, label: impl ToString, icon: Option<String>) -> &mut TrayMenu {
self.children.push(TrayMenu {
id: crate::unique_id_u32(),
label: label.to_string(),
icon,
callback: Box::new(|| {}),
children: vec![],
});
self.children.last_mut().unwrap()
}
pub fn set_icon(&mut self, icon: impl ToString) {
self.icon=Some(icon.to_string());
}
}