Path: blob/main/src/vs/platform/contextview/browser/contextViewService.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { ContextView, ContextViewDOMPosition, IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js';6import { Disposable } from '../../../base/common/lifecycle.js';7import { ILayoutService } from '../../layout/browser/layoutService.js';8import { IContextViewDelegate, IContextViewService, IOpenContextView } from './contextView.js';9import { getWindow } from '../../../base/browser/dom.js';1011export class ContextViewHandler extends Disposable implements IContextViewProvider {1213private openContextView: IOpenContextView | undefined;14protected readonly contextView: ContextView;1516constructor(17@ILayoutService private readonly layoutService: ILayoutService18) {19super();2021this.contextView = this._register(new ContextView(this.layoutService.mainContainer, ContextViewDOMPosition.ABSOLUTE));2223this.layout();24this._register(layoutService.onDidLayoutContainer(() => this.layout()));25}2627// ContextView2829showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IOpenContextView {30let domPosition: ContextViewDOMPosition;31if (container) {32if (container === this.layoutService.getContainer(getWindow(container))) {33domPosition = ContextViewDOMPosition.ABSOLUTE;34} else if (shadowRoot) {35domPosition = ContextViewDOMPosition.FIXED_SHADOW;36} else {37domPosition = ContextViewDOMPosition.FIXED;38}39} else {40domPosition = ContextViewDOMPosition.ABSOLUTE;41}4243this.contextView.setContainer(container ?? this.layoutService.activeContainer, domPosition);4445this.contextView.show(delegate);4647const openContextView: IOpenContextView = {48close: () => {49if (this.openContextView === openContextView) {50this.hideContextView();51}52}53};5455this.openContextView = openContextView;56return openContextView;57}5859layout(): void {60this.contextView.layout();61}6263hideContextView(data?: any): void {64this.contextView.hide(data);65this.openContextView = undefined;66}67}6869export class ContextViewService extends ContextViewHandler implements IContextViewService {7071declare readonly _serviceBrand: undefined;7273getContextViewElement(): HTMLElement {74return this.contextView.getViewElement();75}76}777879