Struct MenuItem

Source
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>

Source

pub fn new(title: impl Into<LabelText<T>>) -> MenuItem<T>

Create a new menu item with a given name.

Examples found in repository?
examples/multiwin.rs (lines 217-220)
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}
Source

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?
examples/multiwin.rs (line 221)
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}
Source

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.

Source

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))

Source

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.

Source

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?
examples/multiwin.rs (line 222)
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}
Source

pub fn enabled(self, enabled: bool) -> Self

Enable or disable this menu item.

Examples found in repository?
examples/markdown_preview.rs (line 256)
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}
Source

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?
examples/multiwin.rs (line 223)
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}
Source

pub fn selected(self, selected: bool) -> Self

Select or deselect this menu item.

Source

pub fn lens<S: Data>(self, lens: impl Lens<S, T> + 'static) -> MenuEntry<S>

Wraps this menu item in a lens, so that it can be added to a Menu<S>.

Trait Implementations§

Source§

impl<T: Data> From<MenuItem<T>> for MenuEntry<T>

Source§

fn from(i: MenuItem<T>) -> MenuEntry<T>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<T> Freeze for MenuItem<T>

§

impl<T> !RefUnwindSafe for MenuItem<T>

§

impl<T> !Send for MenuItem<T>

§

impl<T> !Sync for MenuItem<T>

§

impl<T> Unpin for MenuItem<T>

§

impl<T> !UnwindSafe for MenuItem<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RoundFrom<T> for T

Source§

fn round_from(x: T) -> T

Performs the conversion.
Source§

impl<T, U> RoundInto<U> for T
where U: RoundFrom<T>,

Source§

fn round_into(self) -> U

Performs the conversion.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more