1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
// Copyright 2019 The Druid Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use crate::backend::menu as backend;
use crate::hotkey::HotKey;
/// A menu object.
///
/// This may be a window menu, an application menu (macOS) or a context (right-click)
/// menu.
///
/// # Configuring menus
///
/// Currently, a menu and its items cannot be changed once created. If you need
/// to change anything about a menu (for instance, disabling or selecting items)
/// you need to create a new menu with the desired properties.
pub struct Menu(pub(crate) backend::Menu);
impl Menu {
/// Create a new empty window or application menu.
pub fn new() -> Menu {
Menu(backend::Menu::new())
}
/// Create a new empty context menu.
///
/// Some platforms distinguish between these types of menus, and some
/// do not.
pub fn new_for_popup() -> Menu {
Menu(backend::Menu::new_for_popup())
}
/// Consume this `Menu`, returning the platform menu object.
pub(crate) fn into_inner(self) -> backend::Menu {
self.0
}
/// Add the provided `Menu` as a submenu of self, with the provided title.
pub fn add_dropdown(&mut self, menu: Menu, text: &str, enabled: bool) {
self.0.add_dropdown(menu.0, text, enabled)
}
/// Add an item to this menu.
///
/// The `id` should uniquely identify this item. If the user selects this
/// item, the responsible [`WindowHandler`]'s [`command()`] method will
/// be called with this `id`. If the `enabled` argument is false, the menu
/// item will be grayed out; the hotkey will also be disabled.
/// If the `selected` argument is `true`, the menu will have a checkmark
/// or platform appropriate equivalent indicating that it is currently selected.
/// The `key` argument is an optional [`HotKey`] that will be registered
/// with the system.
///
///
/// [`WindowHandler`]: trait.WindowHandler.html
/// [`command()`]: trait.WindowHandler.html#tymethod.command
/// [`HotKey`]: struct.HotKey.html
pub fn add_item(
&mut self,
id: u32,
text: &str,
key: Option<&HotKey>,
enabled: bool,
selected: bool,
) {
self.0.add_item(id, text, key, enabled, selected)
}
/// Add a seperator to the menu.
pub fn add_separator(&mut self) {
self.0.add_separator()
}
}