pub struct MenuItem<T> { /* private fields */ }
Expand description
An item in a menu.
See the module level documentation for more on how to use menus.
Implementations§
Source§impl<T: Data> MenuItem<T>
impl<T: Data> MenuItem<T>
Sourcepub fn new(title: impl Into<LabelText<T>>) -> MenuItem<T>
pub fn new(title: impl Into<LabelText<T>>) -> MenuItem<T>
Create a new menu item with a given name.
Examples found in repository?
197fn make_menu(_: Option<WindowId>, state: &State, _: &Env) -> Menu<State> {
198 let mut base = Menu::empty();
199 #[cfg(target_os = "macos")]
200 {
201 base = druid::platform_menus::mac::menu_bar();
202 }
203 #[cfg(any(
204 target_os = "windows",
205 target_os = "freebsd",
206 target_os = "linux",
207 target_os = "openbsd"
208 ))]
209 {
210 base = base.entry(druid::platform_menus::win::file::default());
211 }
212 if state.menu_count != 0 {
213 let mut custom = Menu::new(LocalizedString::new("Custom"));
214
215 for i in 1..=state.menu_count {
216 custom = custom.entry(
217 MenuItem::new(
218 LocalizedString::new("hello-counter")
219 .with_arg("count", move |_: &State, _| i.into()),
220 )
221 .on_activate(move |_ctx, data, _env| data.selected = i)
222 .enabled_if(move |_data, _env| i % 3 != 0)
223 .selected_if(move |data, _env| i == data.selected),
224 );
225 }
226 base = base.entry(custom);
227 }
228 base.rebuild_on(|old_data, data, _env| old_data.menu_count != data.menu_count)
229}
230
231fn make_context_menu() -> Menu<State> {
232 Menu::empty()
233 .entry(
234 MenuItem::new(LocalizedString::new("Increment"))
235 .on_activate(|_ctx, data: &mut State, _env| data.menu_count += 1),
236 )
237 .entry(
238 MenuItem::new(LocalizedString::new("Decrement")).on_activate(
239 |_ctx, data: &mut State, _env| data.menu_count = data.menu_count.saturating_sub(1),
240 ),
241 )
242 .entry(
243 MenuItem::new(LocalizedString::new("Glow when hot"))
244 .on_activate(|_ctx, data: &mut State, _env| data.glow_hot = !data.glow_hot),
245 )
246}
Sourcepub fn on_activate(
self,
on_activate: impl FnMut(&mut MenuEventCtx<'_>, &mut T, &Env) + 'static,
) -> Self
pub fn on_activate( self, on_activate: impl FnMut(&mut MenuEventCtx<'_>, &mut T, &Env) + 'static, ) -> Self
Provide a callback that will be invoked when this menu item is chosen.
Examples found in repository?
197fn make_menu(_: Option<WindowId>, state: &State, _: &Env) -> Menu<State> {
198 let mut base = Menu::empty();
199 #[cfg(target_os = "macos")]
200 {
201 base = druid::platform_menus::mac::menu_bar();
202 }
203 #[cfg(any(
204 target_os = "windows",
205 target_os = "freebsd",
206 target_os = "linux",
207 target_os = "openbsd"
208 ))]
209 {
210 base = base.entry(druid::platform_menus::win::file::default());
211 }
212 if state.menu_count != 0 {
213 let mut custom = Menu::new(LocalizedString::new("Custom"));
214
215 for i in 1..=state.menu_count {
216 custom = custom.entry(
217 MenuItem::new(
218 LocalizedString::new("hello-counter")
219 .with_arg("count", move |_: &State, _| i.into()),
220 )
221 .on_activate(move |_ctx, data, _env| data.selected = i)
222 .enabled_if(move |_data, _env| i % 3 != 0)
223 .selected_if(move |data, _env| i == data.selected),
224 );
225 }
226 base = base.entry(custom);
227 }
228 base.rebuild_on(|old_data, data, _env| old_data.menu_count != data.menu_count)
229}
230
231fn make_context_menu() -> Menu<State> {
232 Menu::empty()
233 .entry(
234 MenuItem::new(LocalizedString::new("Increment"))
235 .on_activate(|_ctx, data: &mut State, _env| data.menu_count += 1),
236 )
237 .entry(
238 MenuItem::new(LocalizedString::new("Decrement")).on_activate(
239 |_ctx, data: &mut State, _env| data.menu_count = data.menu_count.saturating_sub(1),
240 ),
241 )
242 .entry(
243 MenuItem::new(LocalizedString::new("Glow when hot"))
244 .on_activate(|_ctx, data: &mut State, _env| data.glow_hot = !data.glow_hot),
245 )
246}
Sourcepub fn command(self, cmd: impl Into<Command>) -> Self
pub fn command(self, cmd: impl Into<Command>) -> Self
Provide a Command
that will be sent when this menu item is chosen.
This is equivalent to self.on_activate(move |ctx, _data, _env| ctx.submit_command(cmd))
.
If the command’s target is Target::Auto
, it will be sent to the menu’s window if the
menu is associated with a window, or to Target::Global
if the menu is not associated
with a window.
Sourcepub fn hotkey(self, mods: impl Into<Option<RawMods>>, key: impl IntoKey) -> Self
pub fn hotkey(self, mods: impl Into<Option<RawMods>>, key: impl IntoKey) -> Self
Provide a hotkey for activating this menu item.
This is equivalent to
self.dynamic_hotkey(move |_, _| Some(HotKey::new(mods, key))
Sourcepub fn dynamic_hotkey(
self,
hotkey: impl FnMut(&T, &Env) -> Option<HotKey> + 'static,
) -> Self
pub fn dynamic_hotkey( self, hotkey: impl FnMut(&T, &Env) -> Option<HotKey> + 'static, ) -> Self
Provide a dynamic hotkey for activating this menu item.
The hotkey can change depending on the data.
Sourcepub fn enabled_if(self, enabled: impl FnMut(&T, &Env) -> bool + 'static) -> Self
pub fn enabled_if(self, enabled: impl FnMut(&T, &Env) -> bool + 'static) -> Self
Provide a callback for determining whether this menu item should be enabled.
Whenever the callback returns true
, the item will be enabled.
Examples found in repository?
197fn make_menu(_: Option<WindowId>, state: &State, _: &Env) -> Menu<State> {
198 let mut base = Menu::empty();
199 #[cfg(target_os = "macos")]
200 {
201 base = druid::platform_menus::mac::menu_bar();
202 }
203 #[cfg(any(
204 target_os = "windows",
205 target_os = "freebsd",
206 target_os = "linux",
207 target_os = "openbsd"
208 ))]
209 {
210 base = base.entry(druid::platform_menus::win::file::default());
211 }
212 if state.menu_count != 0 {
213 let mut custom = Menu::new(LocalizedString::new("Custom"));
214
215 for i in 1..=state.menu_count {
216 custom = custom.entry(
217 MenuItem::new(
218 LocalizedString::new("hello-counter")
219 .with_arg("count", move |_: &State, _| i.into()),
220 )
221 .on_activate(move |_ctx, data, _env| data.selected = i)
222 .enabled_if(move |_data, _env| i % 3 != 0)
223 .selected_if(move |data, _env| i == data.selected),
224 );
225 }
226 base = base.entry(custom);
227 }
228 base.rebuild_on(|old_data, data, _env| old_data.menu_count != data.menu_count)
229}
Sourcepub fn enabled(self, enabled: bool) -> Self
pub fn enabled(self, enabled: bool) -> Self
Enable or disable this menu item.
Examples found in repository?
236fn make_menu<T: Data>(_window_id: Option<WindowId>, _app_state: &AppState, _env: &Env) -> Menu<T> {
237 let mut base = Menu::empty();
238 #[cfg(target_os = "macos")]
239 {
240 base = base.entry(druid::platform_menus::mac::application::default())
241 }
242 #[cfg(any(
243 target_os = "windows",
244 target_os = "freebsd",
245 target_os = "linux",
246 target_os = "openbsd"
247 ))]
248 {
249 base = base.entry(druid::platform_menus::win::file::default());
250 }
251 base.entry(
252 Menu::new(LocalizedString::new("common-menu-edit-menu"))
253 .entry(druid::platform_menus::common::undo())
254 .entry(druid::platform_menus::common::redo())
255 .separator()
256 .entry(druid::platform_menus::common::cut().enabled(false))
257 .entry(druid::platform_menus::common::copy())
258 .entry(druid::platform_menus::common::paste()),
259 )
260}
Sourcepub fn selected_if(
self,
selected: impl FnMut(&T, &Env) -> bool + 'static,
) -> Self
pub fn selected_if( self, selected: impl FnMut(&T, &Env) -> bool + 'static, ) -> Self
Provide a callback for determining whether this menu item should be selected.
Whenever the callback returns true
, the item will be selected.
Examples found in repository?
197fn make_menu(_: Option<WindowId>, state: &State, _: &Env) -> Menu<State> {
198 let mut base = Menu::empty();
199 #[cfg(target_os = "macos")]
200 {
201 base = druid::platform_menus::mac::menu_bar();
202 }
203 #[cfg(any(
204 target_os = "windows",
205 target_os = "freebsd",
206 target_os = "linux",
207 target_os = "openbsd"
208 ))]
209 {
210 base = base.entry(druid::platform_menus::win::file::default());
211 }
212 if state.menu_count != 0 {
213 let mut custom = Menu::new(LocalizedString::new("Custom"));
214
215 for i in 1..=state.menu_count {
216 custom = custom.entry(
217 MenuItem::new(
218 LocalizedString::new("hello-counter")
219 .with_arg("count", move |_: &State, _| i.into()),
220 )
221 .on_activate(move |_ctx, data, _env| data.selected = i)
222 .enabled_if(move |_data, _env| i % 3 != 0)
223 .selected_if(move |data, _env| i == data.selected),
224 );
225 }
226 base = base.entry(custom);
227 }
228 base.rebuild_on(|old_data, data, _env| old_data.menu_count != data.menu_count)
229}