use crate::{
error::OsError,
event_loop::EventLoopWindowTarget,
menu::ContextMenu,
platform_impl::{
SystemTray as SystemTrayPlatform, SystemTrayBuilder as SystemTrayBuilderPlatform,
},
TrayId,
};
pub use crate::icon::{BadIcon, Icon};
pub struct SystemTrayBuilder {
pub(crate) platform_tray_builder: SystemTrayBuilderPlatform,
tooltip: Option<String>,
id: TrayId,
}
impl SystemTrayBuilder {
pub fn new(icon: Icon, tray_menu: Option<ContextMenu>) -> Self {
Self {
platform_tray_builder: SystemTrayBuilderPlatform::new(
icon,
tray_menu.map(|m| m.0.menu_platform),
),
tooltip: None,
id: TrayId::EMPTY,
}
}
pub fn with_id(mut self, id: TrayId) -> Self {
self.id = id;
self
}
pub fn with_tooltip(mut self, tooltip: &str) -> Self {
self.tooltip = Some(tooltip.to_string());
self
}
pub fn build<T: 'static>(
self,
window_target: &EventLoopWindowTarget<T>,
) -> Result<SystemTray, OsError> {
self
.platform_tray_builder
.build(window_target, self.id, self.tooltip)
}
}
pub struct SystemTray(pub SystemTrayPlatform);
impl SystemTray {
pub fn set_icon(&mut self, icon: Icon) {
self.0.set_icon(icon)
}
pub fn set_menu(&mut self, tray_menu: &ContextMenu) {
self.0.set_menu(&tray_menu.0.menu_platform)
}
pub fn set_tooltip(&mut self, tooltip: &str) {
self.0.set_tooltip(tooltip);
}
}