Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/browser/parts/paneCompositePartService.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Event } from '../../../base/common/event.js';
7
import { assertReturnsDefined } from '../../../base/common/types.js';
8
import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js';
9
import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';
10
import { IProgressIndicator } from '../../../platform/progress/common/progress.js';
11
import { PaneCompositeDescriptor } from '../panecomposite.js';
12
import { AuxiliaryBarPart } from './auxiliarybar/auxiliaryBarPart.js';
13
import { PanelPart } from './panel/panelPart.js';
14
import { SidebarPart } from './sidebar/sidebarPart.js';
15
import { IPaneComposite } from '../../common/panecomposite.js';
16
import { ViewContainerLocation, ViewContainerLocations } from '../../common/views.js';
17
import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js';
18
import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';
19
import { IPaneCompositePart } from './paneCompositePart.js';
20
21
export class PaneCompositePartService extends Disposable implements IPaneCompositePartService {
22
23
declare readonly _serviceBrand: undefined;
24
25
readonly onDidPaneCompositeOpen: Event<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>;
26
readonly onDidPaneCompositeClose: Event<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>;
27
28
private readonly paneCompositeParts = new Map<ViewContainerLocation, IPaneCompositePart>();
29
30
constructor(
31
@IInstantiationService instantiationService: IInstantiationService,
32
) {
33
super();
34
35
const panelPart = instantiationService.createInstance(PanelPart);
36
const sideBarPart = instantiationService.createInstance(SidebarPart);
37
const auxiliaryBarPart = instantiationService.createInstance(AuxiliaryBarPart);
38
39
this.paneCompositeParts.set(ViewContainerLocation.Panel, panelPart);
40
this.paneCompositeParts.set(ViewContainerLocation.Sidebar, sideBarPart);
41
this.paneCompositeParts.set(ViewContainerLocation.AuxiliaryBar, auxiliaryBarPart);
42
43
const eventDisposables = this._register(new DisposableStore());
44
this.onDidPaneCompositeOpen = Event.any(...ViewContainerLocations.map(loc => Event.map(this.paneCompositeParts.get(loc)!.onDidPaneCompositeOpen, composite => { return { composite, viewContainerLocation: loc }; }, eventDisposables)));
45
this.onDidPaneCompositeClose = Event.any(...ViewContainerLocations.map(loc => Event.map(this.paneCompositeParts.get(loc)!.onDidPaneCompositeClose, composite => { return { composite, viewContainerLocation: loc }; }, eventDisposables)));
46
}
47
48
openPaneComposite(id: string | undefined, viewContainerLocation: ViewContainerLocation, focus?: boolean): Promise<IPaneComposite | undefined> {
49
return this.getPartByLocation(viewContainerLocation).openPaneComposite(id, focus);
50
}
51
52
getActivePaneComposite(viewContainerLocation: ViewContainerLocation): IPaneComposite | undefined {
53
return this.getPartByLocation(viewContainerLocation).getActivePaneComposite();
54
}
55
56
getPaneComposite(id: string, viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor | undefined {
57
return this.getPartByLocation(viewContainerLocation).getPaneComposite(id);
58
}
59
60
getPaneComposites(viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor[] {
61
return this.getPartByLocation(viewContainerLocation).getPaneComposites();
62
}
63
64
getPinnedPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
65
return this.getPartByLocation(viewContainerLocation).getPinnedPaneCompositeIds();
66
}
67
68
getVisiblePaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
69
return this.getPartByLocation(viewContainerLocation).getVisiblePaneCompositeIds();
70
}
71
72
getPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
73
return this.getPartByLocation(viewContainerLocation).getPaneCompositeIds();
74
}
75
76
getProgressIndicator(id: string, viewContainerLocation: ViewContainerLocation): IProgressIndicator | undefined {
77
return this.getPartByLocation(viewContainerLocation).getProgressIndicator(id);
78
}
79
80
hideActivePaneComposite(viewContainerLocation: ViewContainerLocation): void {
81
this.getPartByLocation(viewContainerLocation).hideActivePaneComposite();
82
}
83
84
getLastActivePaneCompositeId(viewContainerLocation: ViewContainerLocation): string {
85
return this.getPartByLocation(viewContainerLocation).getLastActivePaneCompositeId();
86
}
87
88
private getPartByLocation(viewContainerLocation: ViewContainerLocation): IPaneCompositePart {
89
return assertReturnsDefined(this.paneCompositeParts.get(viewContainerLocation));
90
}
91
92
}
93
94
registerSingleton(IPaneCompositePartService, PaneCompositePartService, InstantiationType.Delayed);
95
96