Path: blob/main/src/vs/sessions/browser/paneCompositePartService.ts
13388 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 { Emitter } from '../../base/common/event.js';6import { assertReturnsDefined } from '../../base/common/types.js';7import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js';8import { IProgressIndicator } from '../../platform/progress/common/progress.js';9import { IPaneComposite } from '../../workbench/common/panecomposite.js';10import { ViewContainerLocation } from '../../workbench/common/views.js';11import { IPaneCompositePartService } from '../../workbench/services/panecomposite/browser/panecomposite.js';12import { Disposable } from '../../base/common/lifecycle.js';13import { PaneCompositeDescriptor } from '../../workbench/browser/panecomposite.js';14import { IPaneCompositePart } from '../../workbench/browser/parts/paneCompositePart.js';15import { SINGLE_WINDOW_PARTS } from '../../workbench/services/layout/browser/layoutService.js';16import { PanelPart } from './parts/panelPart.js';17import { SidebarPart } from './parts/sidebarPart.js';18import { AuxiliaryBarPart } from './parts/auxiliaryBarPart.js';19import { ChatBarPart } from './parts/chatBarPart.js';20import { MobilePanelPart } from './parts/mobile/mobilePanelPart.js';21import { MobileSidebarPart } from './parts/mobile/mobileSidebarPart.js';22import { MobileAuxiliaryBarPart } from './parts/mobile/mobileAuxiliaryBarPart.js';23import { MobileChatBarPart } from './parts/mobile/mobileChatBarPart.js';24import { getClientArea } from '../../base/browser/dom.js';25import { mainWindow } from '../../base/browser/window.js';26import { InstantiationType, registerSingleton } from '../../platform/instantiation/common/extensions.js';2728export class AgenticPaneCompositePartService extends Disposable implements IPaneCompositePartService {2930declare readonly _serviceBrand: undefined;3132private readonly _onDidPaneCompositeOpen = this._register(new Emitter<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>());33readonly onDidPaneCompositeOpen = this._onDidPaneCompositeOpen.event;3435private readonly _onDidPaneCompositeClose = this._register(new Emitter<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>());36readonly onDidPaneCompositeClose = this._onDidPaneCompositeClose.event;3738private readonly paneCompositeParts = new Map<ViewContainerLocation, IPaneCompositePart>();3940constructor(41@IInstantiationService instantiationService: IInstantiationService42) {43super();4445const { width } = getClientArea(mainWindow.document.body);46const isPhoneLayout = width < 640;4748this.registerPart(ViewContainerLocation.Panel, instantiationService.createInstance(isPhoneLayout ? MobilePanelPart : PanelPart));49this.registerPart(ViewContainerLocation.Sidebar, instantiationService.createInstance(isPhoneLayout ? MobileSidebarPart : SidebarPart));50this.registerPart(ViewContainerLocation.AuxiliaryBar, instantiationService.createInstance(isPhoneLayout ? MobileAuxiliaryBarPart : AuxiliaryBarPart));51this.registerPart(ViewContainerLocation.ChatBar, instantiationService.createInstance(isPhoneLayout ? MobileChatBarPart : ChatBarPart));52}5354private registerPart(location: ViewContainerLocation, part: IPaneCompositePart): void {55this.paneCompositeParts.set(location, part);56this._register(part.onDidPaneCompositeOpen(composite => this._onDidPaneCompositeOpen.fire({ composite, viewContainerLocation: location })));57this._register(part.onDidPaneCompositeClose(composite => this._onDidPaneCompositeClose.fire({ composite, viewContainerLocation: location })));58}5960getRegistryId(viewContainerLocation: ViewContainerLocation): string {61return this.getPartByLocation(viewContainerLocation).registryId;62}6364getPartId(viewContainerLocation: ViewContainerLocation): SINGLE_WINDOW_PARTS {65return this.getPartByLocation(viewContainerLocation).partId;66}6768openPaneComposite(id: string | undefined, viewContainerLocation: ViewContainerLocation, focus?: boolean): Promise<IPaneComposite | undefined> {69return this.getPartByLocation(viewContainerLocation).openPaneComposite(id, focus);70}7172getActivePaneComposite(viewContainerLocation: ViewContainerLocation): IPaneComposite | undefined {73return this.getPartByLocation(viewContainerLocation).getActivePaneComposite();74}7576getPaneComposite(id: string, viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor | undefined {77return this.getPartByLocation(viewContainerLocation).getPaneComposite(id);78}7980getPaneComposites(viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor[] {81return this.getPartByLocation(viewContainerLocation).getPaneComposites();82}8384getPinnedPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {85return this.getPartByLocation(viewContainerLocation).getPinnedPaneCompositeIds();86}8788getVisiblePaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {89return this.getPartByLocation(viewContainerLocation).getVisiblePaneCompositeIds();90}9192getPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {93return this.getPartByLocation(viewContainerLocation).getPaneCompositeIds();94}9596getProgressIndicator(id: string, viewContainerLocation: ViewContainerLocation): IProgressIndicator | undefined {97return this.getPartByLocation(viewContainerLocation).getProgressIndicator(id);98}99100hideActivePaneComposite(viewContainerLocation: ViewContainerLocation): void {101this.getPartByLocation(viewContainerLocation).hideActivePaneComposite();102}103104getLastActivePaneCompositeId(viewContainerLocation: ViewContainerLocation): string {105return this.getPartByLocation(viewContainerLocation).getLastActivePaneCompositeId();106}107108private getPartByLocation(viewContainerLocation: ViewContainerLocation): IPaneCompositePart {109return assertReturnsDefined(this.paneCompositeParts.get(viewContainerLocation));110}111112}113114registerSingleton(IPaneCompositePartService, AgenticPaneCompositePartService, InstantiationType.Delayed);115116117