![trop[bot]](/assets/img/avatar_default.png)
* docs: add `Menu` module tutorials * link API docs to new tutorials * removed unreferenced fiddles * add wording for new types * fix import sort errors * delete accelerator.md * fixes Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Erick Zhao <ezhao@slack-corp.com>
163 lines
5.6 KiB
Markdown
163 lines
5.6 KiB
Markdown
# Menu
|
|
|
|
## Class: Menu
|
|
|
|
> Create native application menus and context menus.
|
|
|
|
Process: [Main](../glossary.md#main-process)
|
|
|
|
> [!TIP]
|
|
> See also: [A detailed guide about how to implement menus in your application](../tutorial/menus.md).
|
|
|
|
> [!WARNING]
|
|
> Electron's built-in classes cannot be subclassed in user code.
|
|
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
|
|
### `new Menu()`
|
|
|
|
Creates a new menu.
|
|
|
|
### Static Methods
|
|
|
|
The `Menu` class has the following static methods:
|
|
|
|
#### `Menu.setApplicationMenu(menu)`
|
|
|
|
- `menu` Menu | null
|
|
|
|
Sets `menu` as the application menu on macOS. On Windows and Linux, the
|
|
`menu` will be set as each window's top menu.
|
|
|
|
Also on Windows and Linux, you can use a `&` in the top-level item name to
|
|
indicate which letter should get a generated accelerator. For example, using
|
|
`&File` for the file menu would result in a generated `Alt-F` accelerator that
|
|
opens the associated menu. The indicated character in the button label then gets an
|
|
underline, and the `&` character is not displayed on the button label.
|
|
|
|
In order to escape the `&` character in an item name, add a proceeding `&`. For example, `&&File` would result in `&File` displayed on the button label.
|
|
|
|
Passing `null` will suppress the default menu. On Windows and Linux,
|
|
this has the additional effect of removing the menu bar from the window.
|
|
|
|
> [!NOTE]
|
|
> The default menu will be created automatically if the app does not set one.
|
|
> It contains standard items such as `File`, `Edit`, `View`, `Window` and `Help`.
|
|
|
|
#### `Menu.getApplicationMenu()`
|
|
|
|
Returns `Menu | null` - The application menu, if set, or `null`, if not set.
|
|
|
|
> [!NOTE]
|
|
> The returned `Menu` instance doesn't support dynamic addition or
|
|
> removal of menu items. [Instance properties](#instance-properties) can still
|
|
> be dynamically modified.
|
|
|
|
#### `Menu.sendActionToFirstResponder(action)` _macOS_
|
|
|
|
- `action` string
|
|
|
|
Sends the `action` to the first responder of application. This is used for
|
|
emulating default macOS menu behaviors. Usually you would use the
|
|
[`role`](../tutorial/menus.md#roles) property of a [`MenuItem`](menu-item.md).
|
|
|
|
See the [macOS Cocoa Event Handling Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW7)
|
|
for more information on macOS' native actions.
|
|
|
|
#### `Menu.buildFromTemplate(template)`
|
|
|
|
- `template` (MenuItemConstructorOptions | MenuItem)[]
|
|
|
|
Returns `Menu`
|
|
|
|
Generally, the `template` is an array of `options` for constructing a
|
|
[MenuItem](menu-item.md). The usage can be referenced above.
|
|
|
|
You can also attach other fields to the element of the `template` and they will become properties of the constructed menu items.
|
|
|
|
### Instance Methods
|
|
|
|
The `menu` object has the following instance methods:
|
|
|
|
#### `menu.popup([options])`
|
|
|
|
- `options` Object (optional)
|
|
- `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
|
- `frame` [WebFrameMain](web-frame-main.md) (optional) - Provide the relevant frame
|
|
if you want certain OS-level features such as Writing Tools on macOS to function correctly. Typically, this should be `params.frame` from the [`context-menu` event](web-contents.md#event-context-menu) on a WebContents, or the [`focusedFrame` property](web-contents.md#contentsfocusedframe-readonly) of a WebContents.
|
|
- `x` number (optional) - Default is the current mouse cursor position.
|
|
Must be declared if `y` is declared.
|
|
- `y` number (optional) - Default is the current mouse cursor position.
|
|
Must be declared if `x` is declared.
|
|
- `positioningItem` number (optional) _macOS_ - The index of the menu item to
|
|
be positioned under the mouse cursor at the specified coordinates. Default
|
|
is -1.
|
|
- `sourceType` string (optional) _Windows_ _Linux_ - This should map to the `menuSourceType`
|
|
provided by the `context-menu` event. It is not recommended to set this value manually,
|
|
only provide values you receive from other APIs or leave it `undefined`.
|
|
Can be `none`, `mouse`, `keyboard`, `touch`, `touchMenu`, `longPress`, `longTap`, `touchHandle`, `stylus`, `adjustSelection`, or `adjustSelectionReset`.
|
|
- `callback` Function (optional) - Called when menu is closed.
|
|
|
|
Pops up this menu as a context menu in the [`BaseWindow`](base-window.md).
|
|
|
|
> [!TIP]
|
|
> For more details, see the [Context Menu](../tutorial/context-menu.md) guide.
|
|
|
|
#### `menu.closePopup([window])`
|
|
|
|
- `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
|
|
|
Closes the context menu in the `window`.
|
|
|
|
#### `menu.append(menuItem)`
|
|
|
|
- `menuItem` [MenuItem](menu-item.md)
|
|
|
|
Appends the `menuItem` to the menu.
|
|
|
|
#### `menu.getMenuItemById(id)`
|
|
|
|
- `id` string
|
|
|
|
Returns `MenuItem | null` the item with the specified `id`
|
|
|
|
#### `menu.insert(pos, menuItem)`
|
|
|
|
- `pos` Integer
|
|
- `menuItem` [MenuItem](menu-item.md)
|
|
|
|
Inserts the `menuItem` to the `pos` position of the menu.
|
|
|
|
### Instance Events
|
|
|
|
Objects created with `new Menu` or returned by `Menu.buildFromTemplate` emit the following events:
|
|
|
|
> [!NOTE]
|
|
> Some events are only available on specific operating systems and are
|
|
> labeled as such.
|
|
|
|
#### Event: 'menu-will-show'
|
|
|
|
Returns:
|
|
|
|
- `event` Event
|
|
|
|
Emitted when `menu.popup()` is called.
|
|
|
|
#### Event: 'menu-will-close'
|
|
|
|
Returns:
|
|
|
|
- `event` Event
|
|
|
|
Emitted when a popup is closed either manually or with `menu.closePopup()`.
|
|
|
|
### Instance Properties
|
|
|
|
`menu` objects also have the following properties:
|
|
|
|
#### `menu.items`
|
|
|
|
A `MenuItem[]` array containing the menu's items.
|
|
|
|
Each `Menu` consists of multiple [`MenuItem`](menu-item.md) instances and each `MenuItem`
|
|
can nest a `Menu` into its `submenu` property.
|