@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
55 lines (49 loc) • 2.26 kB
text/typescript
// *****************************************************************************
// Copyright (C) 2017 TypeFox and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
import { inject, injectable } from 'inversify';
import { Menu } from '../widgets';
import { Anchor, ContextMenuAccess, ContextMenuRenderer, coordinateFromAnchor } from '../context-menu-renderer';
import { BrowserMainMenuFactory } from './browser-menu-plugin';
import { ContextMatcher } from '../context-key-service';
import { CompoundMenuNode, MenuPath } from '../../common';
export class BrowserContextMenuAccess extends ContextMenuAccess {
constructor(
public readonly menu: Menu
) {
super(menu);
}
}
()
export class BrowserContextMenuRenderer extends ContextMenuRenderer {
(BrowserMainMenuFactory) private menuFactory: BrowserMainMenuFactory;
protected doRender(params: {
menuPath: MenuPath,
menu: CompoundMenuNode,
anchor: Anchor,
contextMatcher: ContextMatcher,
args?: unknown[],
context?: HTMLElement,
onHide?: () => void
}): ContextMenuAccess {
const contextMenu = this.menuFactory.createContextMenu(params.menuPath, params.menu, params.contextMatcher, params.args, params.context);
const { x, y } = coordinateFromAnchor(params.anchor);
if (params.onHide) {
contextMenu.aboutToClose.connect(() => params.onHide!());
}
contextMenu.open(x, y, { host: params.context?.ownerDocument.body });
return new BrowserContextMenuAccess(contextMenu);
}
}