Path: blob/main/src/vs/workbench/browser/parts/paneCompositePartService.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 { Event } from '../../../base/common/event.js';6import { assertReturnsDefined } from '../../../base/common/types.js';7import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js';8import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';9import { IProgressIndicator } from '../../../platform/progress/common/progress.js';10import { PaneCompositeDescriptor } from '../panecomposite.js';11import { AuxiliaryBarPart } from './auxiliarybar/auxiliaryBarPart.js';12import { PanelPart } from './panel/panelPart.js';13import { SidebarPart } from './sidebar/sidebarPart.js';14import { IPaneComposite } from '../../common/panecomposite.js';15import { ViewContainerLocation, ViewContainerLocations } from '../../common/views.js';16import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js';17import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';18import { IPaneCompositePart } from './paneCompositePart.js';1920export class PaneCompositePartService extends Disposable implements IPaneCompositePartService {2122declare readonly _serviceBrand: undefined;2324readonly onDidPaneCompositeOpen: Event<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>;25readonly onDidPaneCompositeClose: Event<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>;2627private readonly paneCompositeParts = new Map<ViewContainerLocation, IPaneCompositePart>();2829constructor(30@IInstantiationService instantiationService: IInstantiationService,31) {32super();3334const panelPart = instantiationService.createInstance(PanelPart);35const sideBarPart = instantiationService.createInstance(SidebarPart);36const auxiliaryBarPart = instantiationService.createInstance(AuxiliaryBarPart);3738this.paneCompositeParts.set(ViewContainerLocation.Panel, panelPart);39this.paneCompositeParts.set(ViewContainerLocation.Sidebar, sideBarPart);40this.paneCompositeParts.set(ViewContainerLocation.AuxiliaryBar, auxiliaryBarPart);4142const eventDisposables = this._register(new DisposableStore());43this.onDidPaneCompositeOpen = Event.any(...ViewContainerLocations.map(loc => Event.map(this.paneCompositeParts.get(loc)!.onDidPaneCompositeOpen, composite => { return { composite, viewContainerLocation: loc }; }, eventDisposables)));44this.onDidPaneCompositeClose = Event.any(...ViewContainerLocations.map(loc => Event.map(this.paneCompositeParts.get(loc)!.onDidPaneCompositeClose, composite => { return { composite, viewContainerLocation: loc }; }, eventDisposables)));45}4647openPaneComposite(id: string | undefined, viewContainerLocation: ViewContainerLocation, focus?: boolean): Promise<IPaneComposite | undefined> {48return this.getPartByLocation(viewContainerLocation).openPaneComposite(id, focus);49}5051getActivePaneComposite(viewContainerLocation: ViewContainerLocation): IPaneComposite | undefined {52return this.getPartByLocation(viewContainerLocation).getActivePaneComposite();53}5455getPaneComposite(id: string, viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor | undefined {56return this.getPartByLocation(viewContainerLocation).getPaneComposite(id);57}5859getPaneComposites(viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor[] {60return this.getPartByLocation(viewContainerLocation).getPaneComposites();61}6263getPinnedPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {64return this.getPartByLocation(viewContainerLocation).getPinnedPaneCompositeIds();65}6667getVisiblePaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {68return this.getPartByLocation(viewContainerLocation).getVisiblePaneCompositeIds();69}7071getPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {72return this.getPartByLocation(viewContainerLocation).getPaneCompositeIds();73}7475getProgressIndicator(id: string, viewContainerLocation: ViewContainerLocation): IProgressIndicator | undefined {76return this.getPartByLocation(viewContainerLocation).getProgressIndicator(id);77}7879hideActivePaneComposite(viewContainerLocation: ViewContainerLocation): void {80this.getPartByLocation(viewContainerLocation).hideActivePaneComposite();81}8283getLastActivePaneCompositeId(viewContainerLocation: ViewContainerLocation): string {84return this.getPartByLocation(viewContainerLocation).getLastActivePaneCompositeId();85}8687private getPartByLocation(viewContainerLocation: ViewContainerLocation): IPaneCompositePart {88return assertReturnsDefined(this.paneCompositeParts.get(viewContainerLocation));89}9091}9293registerSingleton(IPaneCompositePartService, PaneCompositePartService, InstantiationType.Delayed);949596