muda_win/builders/
normal.rs1use crate::{accelerator::Accelerator, MenuId, MenuItem};
2
3#[derive(Clone, Debug, Default)]
5pub struct MenuItemBuilder {
6 text: String,
7 enabled: bool,
8 id: Option<MenuId>,
9 accelerator: Option<Accelerator>,
10}
11
12impl MenuItemBuilder {
13 pub fn new() -> Self {
14 Default::default()
15 }
16
17 pub fn id(mut self, id: MenuId) -> Self {
19 self.id.replace(id);
20 self
21 }
22
23 pub fn text<S: Into<String>>(mut self, text: S) -> Self {
27 self.text = text.into();
28 self
29 }
30
31 pub fn enabled(mut self, enabled: bool) -> Self {
33 self.enabled = enabled;
34 self
35 }
36
37 pub fn accelerator<A: TryInto<Accelerator>>(
39 mut self,
40 accelerator: Option<A>,
41 ) -> crate::Result<Self>
42 where
43 crate::Error: From<<A as TryInto<Accelerator>>::Error>,
44 {
45 self.accelerator = accelerator.map(|a| a.try_into()).transpose()?;
46 Ok(self)
47 }
48
49 pub fn build(self) -> MenuItem {
51 if let Some(id) = self.id {
52 MenuItem::with_id(id, self.text, self.enabled, self.accelerator)
53 } else {
54 MenuItem::new(self.text, self.enabled, self.accelerator)
55 }
56 }
57}