use crate::{accelerator::Accelerator, CheckMenuItem, MenuId};
#[derive(Clone, Debug, Default)]
pub struct CheckMenuItemBuilder {
text: String,
enabled: bool,
checked: bool,
accelerator: Option<Accelerator>,
id: Option<MenuId>,
}
impl CheckMenuItemBuilder {
pub fn new() -> Self {
Default::default()
}
pub fn id(mut self, id: MenuId) -> Self {
self.id.replace(id);
self
}
pub fn text<S: Into<String>>(mut self, text: S) -> Self {
self.text = text.into();
self
}
pub fn enabled(mut self, enabled: bool) -> Self {
self.enabled = enabled;
self
}
pub fn checked(mut self, checked: bool) -> Self {
self.checked = checked;
self
}
pub fn accelerator<A: TryInto<Accelerator>>(
mut self,
accelerator: Option<A>,
) -> crate::Result<Self>
where
crate::Error: From<<A as TryInto<Accelerator>>::Error>,
{
self.accelerator = accelerator.map(|a| a.try_into()).transpose()?;
Ok(self)
}
pub fn build(self) -> CheckMenuItem {
if let Some(id) = self.id {
CheckMenuItem::with_id(id, self.text, self.enabled, self.checked, self.accelerator)
} else {
CheckMenuItem::new(self.text, self.enabled, self.checked, self.accelerator)
}
}
}