import { Disposable } from '../disposable'; import { CommandRegistry, Command } from '../command'; import { ContributionProvider } from '../contribution-provider'; import { CompositeMenuNode } from './composite-menu-node'; import { MenuAction, MenuNode, MenuPath, MutableCompoundMenuNode, SubMenuOptions } from './menu-types'; export declare const MenuContribution: unique symbol; /** * Representation of a menu contribution. * * Note that there are also convenience classes which combine multiple contributions into one. * For example to register a view together with a menu and keybinding you could use * {@link AbstractViewContribution} instead. * * ### Example usage * * ```ts * import { MenuContribution, MenuModelRegistry, MAIN_MENU_BAR } from '@theia/core'; * * @injectable() * export class NewMenuContribution implements MenuContribution { * registerMenus(menus: MenuModelRegistry): void { * const menuPath = [...MAIN_MENU_BAR, '99_mymenu']; * menus.registerSubmenu(menuPath, 'My Menu'); * * menus.registerMenuAction(menuPath, { * commandId: MyCommand.id, * label: 'My Action' * }); * } * } * ``` */ export interface MenuContribution { /** * Registers menus. * @param menus the menu model registry. */ registerMenus(menus: MenuModelRegistry): void; } /** * The MenuModelRegistry allows to register and unregister menus, submenus and actions * via strings and {@link MenuAction}s without the need to access the underlying UI * representation. */ export declare class MenuModelRegistry { protected readonly contributions: ContributionProvider; protected readonly commands: CommandRegistry; protected readonly root: CompositeMenuNode; protected readonly independentSubmenus: Map; constructor(contributions: ContributionProvider, commands: CommandRegistry); onStart(): void; /** * Adds the given menu action to the menu denoted by the given path. * * @returns a disposable which, when called, will remove the menu action again. */ registerMenuAction(menuPath: MenuPath, item: MenuAction): Disposable; /** * Adds the given menu node to the menu denoted by the given path. * * @returns a disposable which, when called, will remove the menu node again. */ registerMenuNode(menuPath: MenuPath | string, menuNode: MenuNode, group?: string): Disposable; getMenuNode(menuPath: MenuPath | string, group?: string): MutableCompoundMenuNode; /** * Register a new menu at the given path with the given label. * (If the menu already exists without a label, iconClass or order this method can be used to set them.) * * @param menuPath the path for which a new submenu shall be registered. * @param label the label to be used for the new submenu. * @param options optionally allows to set an icon class and specify the order of the new menu. * * @returns if the menu was successfully created a disposable will be returned which, * when called, will remove the menu again. If the menu already existed a no-op disposable * will be returned. * * Note that if the menu already existed and was registered with a different label an error * will be thrown. */ registerSubmenu(menuPath: MenuPath, label: string, options?: SubMenuOptions): Disposable; registerIndependentSubmenu(id: string, label: string, options?: SubMenuOptions): Disposable; linkSubmenu(parentPath: MenuPath | string, childId: string | MenuPath, options?: SubMenuOptions, group?: string): Disposable; /** * Unregister all menu nodes with the same id as the given menu action. * * @param item the item whose id will be used. * @param menuPath if specified only nodes within the path will be unregistered. */ unregisterMenuAction(item: MenuAction, menuPath?: MenuPath): void; /** * Unregister all menu nodes with the same id as the given command. * * @param command the command whose id will be used. * @param menuPath if specified only nodes within the path will be unregistered. */ unregisterMenuAction(command: Command, menuPath?: MenuPath): void; /** * Unregister all menu nodes with the given id. * * @param id the id which shall be removed. * @param menuPath if specified only nodes within the path will be unregistered. */ unregisterMenuAction(id: string, menuPath?: MenuPath): void; /** * Recurse all menus, removing any menus matching the `id`. * * @param id technical identifier of the `MenuNode`. */ unregisterMenuNode(id: string): void; /** * Finds a submenu as a descendant of the `root` node. * See {@link MenuModelRegistry.findSubMenu findSubMenu}. */ protected findGroup(menuPath: MenuPath, options?: SubMenuOptions): MutableCompoundMenuNode; /** * Finds or creates a submenu as an immediate child of `current`. * @throws if a node with the given `menuId` exists but is not a {@link MutableCompoundMenuNode}. */ protected findSubMenu(current: MutableCompoundMenuNode, menuId: string, options?: SubMenuOptions): MutableCompoundMenuNode; /** * Returns the menu at the given path. * * @param menuPath the path specifying the menu to return. If not given the empty path will be used. * * @returns the root menu when `menuPath` is empty. If `menuPath` is not empty the specified menu is * returned if it exists, otherwise an error is thrown. */ getMenu(menuPath?: MenuPath): MutableCompoundMenuNode; /** * Returns the {@link MenuPath path} at which a given menu node can be accessed from this registry, if it can be determined. * Returns `undefined` if the `parent` of any node in the chain is unknown. */ getPath(node: MenuNode): MenuPath | undefined; } //# sourceMappingURL=menu-model-registry.d.ts.map