Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/sessions/browser/paneCompositePartService.ts
13388 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 { Emitter } from '../../base/common/event.js';
7
import { assertReturnsDefined } from '../../base/common/types.js';
8
import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js';
9
import { IProgressIndicator } from '../../platform/progress/common/progress.js';
10
import { IPaneComposite } from '../../workbench/common/panecomposite.js';
11
import { ViewContainerLocation } from '../../workbench/common/views.js';
12
import { IPaneCompositePartService } from '../../workbench/services/panecomposite/browser/panecomposite.js';
13
import { Disposable } from '../../base/common/lifecycle.js';
14
import { PaneCompositeDescriptor } from '../../workbench/browser/panecomposite.js';
15
import { IPaneCompositePart } from '../../workbench/browser/parts/paneCompositePart.js';
16
import { SINGLE_WINDOW_PARTS } from '../../workbench/services/layout/browser/layoutService.js';
17
import { PanelPart } from './parts/panelPart.js';
18
import { SidebarPart } from './parts/sidebarPart.js';
19
import { AuxiliaryBarPart } from './parts/auxiliaryBarPart.js';
20
import { ChatBarPart } from './parts/chatBarPart.js';
21
import { MobilePanelPart } from './parts/mobile/mobilePanelPart.js';
22
import { MobileSidebarPart } from './parts/mobile/mobileSidebarPart.js';
23
import { MobileAuxiliaryBarPart } from './parts/mobile/mobileAuxiliaryBarPart.js';
24
import { MobileChatBarPart } from './parts/mobile/mobileChatBarPart.js';
25
import { getClientArea } from '../../base/browser/dom.js';
26
import { mainWindow } from '../../base/browser/window.js';
27
import { InstantiationType, registerSingleton } from '../../platform/instantiation/common/extensions.js';
28
29
export class AgenticPaneCompositePartService extends Disposable implements IPaneCompositePartService {
30
31
declare readonly _serviceBrand: undefined;
32
33
private readonly _onDidPaneCompositeOpen = this._register(new Emitter<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>());
34
readonly onDidPaneCompositeOpen = this._onDidPaneCompositeOpen.event;
35
36
private readonly _onDidPaneCompositeClose = this._register(new Emitter<{ composite: IPaneComposite; viewContainerLocation: ViewContainerLocation }>());
37
readonly onDidPaneCompositeClose = this._onDidPaneCompositeClose.event;
38
39
private readonly paneCompositeParts = new Map<ViewContainerLocation, IPaneCompositePart>();
40
41
constructor(
42
@IInstantiationService instantiationService: IInstantiationService
43
) {
44
super();
45
46
const { width } = getClientArea(mainWindow.document.body);
47
const isPhoneLayout = width < 640;
48
49
this.registerPart(ViewContainerLocation.Panel, instantiationService.createInstance(isPhoneLayout ? MobilePanelPart : PanelPart));
50
this.registerPart(ViewContainerLocation.Sidebar, instantiationService.createInstance(isPhoneLayout ? MobileSidebarPart : SidebarPart));
51
this.registerPart(ViewContainerLocation.AuxiliaryBar, instantiationService.createInstance(isPhoneLayout ? MobileAuxiliaryBarPart : AuxiliaryBarPart));
52
this.registerPart(ViewContainerLocation.ChatBar, instantiationService.createInstance(isPhoneLayout ? MobileChatBarPart : ChatBarPart));
53
}
54
55
private registerPart(location: ViewContainerLocation, part: IPaneCompositePart): void {
56
this.paneCompositeParts.set(location, part);
57
this._register(part.onDidPaneCompositeOpen(composite => this._onDidPaneCompositeOpen.fire({ composite, viewContainerLocation: location })));
58
this._register(part.onDidPaneCompositeClose(composite => this._onDidPaneCompositeClose.fire({ composite, viewContainerLocation: location })));
59
}
60
61
getRegistryId(viewContainerLocation: ViewContainerLocation): string {
62
return this.getPartByLocation(viewContainerLocation).registryId;
63
}
64
65
getPartId(viewContainerLocation: ViewContainerLocation): SINGLE_WINDOW_PARTS {
66
return this.getPartByLocation(viewContainerLocation).partId;
67
}
68
69
openPaneComposite(id: string | undefined, viewContainerLocation: ViewContainerLocation, focus?: boolean): Promise<IPaneComposite | undefined> {
70
return this.getPartByLocation(viewContainerLocation).openPaneComposite(id, focus);
71
}
72
73
getActivePaneComposite(viewContainerLocation: ViewContainerLocation): IPaneComposite | undefined {
74
return this.getPartByLocation(viewContainerLocation).getActivePaneComposite();
75
}
76
77
getPaneComposite(id: string, viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor | undefined {
78
return this.getPartByLocation(viewContainerLocation).getPaneComposite(id);
79
}
80
81
getPaneComposites(viewContainerLocation: ViewContainerLocation): PaneCompositeDescriptor[] {
82
return this.getPartByLocation(viewContainerLocation).getPaneComposites();
83
}
84
85
getPinnedPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
86
return this.getPartByLocation(viewContainerLocation).getPinnedPaneCompositeIds();
87
}
88
89
getVisiblePaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
90
return this.getPartByLocation(viewContainerLocation).getVisiblePaneCompositeIds();
91
}
92
93
getPaneCompositeIds(viewContainerLocation: ViewContainerLocation): string[] {
94
return this.getPartByLocation(viewContainerLocation).getPaneCompositeIds();
95
}
96
97
getProgressIndicator(id: string, viewContainerLocation: ViewContainerLocation): IProgressIndicator | undefined {
98
return this.getPartByLocation(viewContainerLocation).getProgressIndicator(id);
99
}
100
101
hideActivePaneComposite(viewContainerLocation: ViewContainerLocation): void {
102
this.getPartByLocation(viewContainerLocation).hideActivePaneComposite();
103
}
104
105
getLastActivePaneCompositeId(viewContainerLocation: ViewContainerLocation): string {
106
return this.getPartByLocation(viewContainerLocation).getLastActivePaneCompositeId();
107
}
108
109
private getPartByLocation(viewContainerLocation: ViewContainerLocation): IPaneCompositePart {
110
return assertReturnsDefined(this.paneCompositeParts.get(viewContainerLocation));
111
}
112
113
}
114
115
registerSingleton(IPaneCompositePartService, AgenticPaneCompositePartService, InstantiationType.Delayed);
116
117