@opensumi/ide-main-layout 3.9.1-next-1748435481.0 → 3.9.1-next-1748523870.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -30
- package/lib/browser/accordion/accordion.service.d.ts +1 -9
- package/lib/browser/accordion/accordion.service.d.ts.map +1 -1
- package/lib/browser/accordion/accordion.service.js +33 -120
- package/lib/browser/accordion/accordion.service.js.map +1 -1
- package/lib/browser/accordion/accordion.view.d.ts.map +1 -1
- package/lib/browser/accordion/accordion.view.js +1 -4
- package/lib/browser/accordion/accordion.view.js.map +1 -1
- package/lib/browser/accordion/section.view.d.ts.map +1 -1
- package/lib/browser/accordion/section.view.js +1 -1
- package/lib/browser/accordion/section.view.js.map +1 -1
- package/lib/browser/accordion/styles.module.less +0 -61
- package/lib/browser/default-config.d.ts.map +1 -1
- package/lib/browser/default-config.js +6 -7
- package/lib/browser/default-config.js.map +1 -1
- package/lib/browser/drop-area/drop-area.d.ts +2 -3
- package/lib/browser/drop-area/drop-area.d.ts.map +1 -1
- package/lib/browser/drop-area/drop-area.js +5 -8
- package/lib/browser/drop-area/drop-area.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/layout.service.d.ts +0 -3
- package/lib/browser/layout.service.d.ts.map +1 -1
- package/lib/browser/layout.service.js +78 -123
- package/lib/browser/layout.service.js.map +1 -1
- package/lib/browser/main-layout.contribution.d.ts +18 -2
- package/lib/browser/main-layout.contribution.d.ts.map +1 -1
- package/lib/browser/main-layout.contribution.js +131 -75
- package/lib/browser/main-layout.contribution.js.map +1 -1
- package/lib/browser/tabbar/bar.view.d.ts.map +1 -1
- package/lib/browser/tabbar/bar.view.js +10 -5
- package/lib/browser/tabbar/bar.view.js.map +1 -1
- package/lib/browser/tabbar/panel.view.js +1 -1
- package/lib/browser/tabbar/panel.view.js.map +1 -1
- package/lib/browser/tabbar/renderer.view.js +4 -4
- package/lib/browser/tabbar/renderer.view.js.map +1 -1
- package/lib/browser/tabbar/tabbar.service.d.ts +19 -8
- package/lib/browser/tabbar/tabbar.service.d.ts.map +1 -1
- package/lib/browser/tabbar/tabbar.service.js +146 -37
- package/lib/browser/tabbar/tabbar.service.js.map +1 -1
- package/lib/common/main-layout.definition.d.ts +3 -4
- package/lib/common/main-layout.definition.d.ts.map +1 -1
- package/lib/common/main-layout.definition.js +4 -5
- package/lib/common/main-layout.definition.js.map +1 -1
- package/package.json +8 -8
- package/src/browser/accordion/accordion.service.ts +35 -152
- package/src/browser/accordion/accordion.view.tsx +2 -4
- package/src/browser/accordion/section.view.tsx +1 -5
- package/src/browser/accordion/styles.module.less +0 -61
- package/src/browser/default-config.ts +7 -8
- package/src/browser/drop-area/drop-area.tsx +3 -6
- package/src/browser/index.ts +0 -1
- package/src/browser/layout.service.ts +66 -137
- package/src/browser/main-layout.contribution.ts +138 -93
- package/src/browser/tabbar/bar.view.tsx +15 -9
- package/src/browser/tabbar/panel.view.tsx +2 -2
- package/src/browser/tabbar/renderer.view.tsx +4 -4
- package/src/browser/tabbar/tabbar.service.ts +161 -52
- package/src/common/main-layout.definition.ts +4 -6
- package/lib/browser/command.d.ts +0 -29
- package/lib/browser/command.d.ts.map +0 -1
- package/lib/browser/command.js +0 -84
- package/lib/browser/command.js.map +0 -1
- package/lib/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
- package/lib/browser/tabbar/tabbar-behavior-handler.d.ts +0 -71
- package/lib/browser/tabbar/tabbar-behavior-handler.d.ts.map +0 -1
- package/lib/browser/tabbar/tabbar-behavior-handler.js +0 -210
- package/lib/browser/tabbar/tabbar-behavior-handler.js.map +0 -1
- package/src/browser/command.ts +0 -99
- package/src/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
- package/src/browser/tabbar/tabbar-behavior-handler.ts +0 -260
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
WithEventBus,
|
|
19
19
|
slotRendererRegistry,
|
|
20
20
|
} from '@opensumi/ide-core-browser';
|
|
21
|
-
import {
|
|
21
|
+
import { fixLayout } from '@opensumi/ide-core-browser/lib/components';
|
|
22
22
|
import { LAYOUT_STATE, LayoutState } from '@opensumi/ide-core-browser/lib/layout/layout-state';
|
|
23
23
|
import { ComponentRegistryInfo } from '@opensumi/ide-core-browser/lib/layout/layout.interface';
|
|
24
24
|
import {
|
|
@@ -29,13 +29,11 @@ import {
|
|
|
29
29
|
MenuId,
|
|
30
30
|
} from '@opensumi/ide-core-browser/lib/menu/next';
|
|
31
31
|
import { Deferred, getDebugLogger, isUndefined } from '@opensumi/ide-core-common';
|
|
32
|
-
import { transaction } from '@opensumi/ide-monaco/lib/common/observable';
|
|
33
32
|
import { ThemeChangedEvent } from '@opensumi/ide-theme';
|
|
34
33
|
|
|
35
34
|
import {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
DROP_VIEW_CONTAINER,
|
|
35
|
+
DROP_BOTTOM_CONTAINER,
|
|
36
|
+
DROP_RIGHT_CONTAINER,
|
|
39
37
|
IMainLayoutService,
|
|
40
38
|
MainLayoutContribution,
|
|
41
39
|
SUPPORT_ACCORDION_LOCATION,
|
|
@@ -47,21 +45,19 @@ import { TabbarService } from './tabbar/tabbar.service';
|
|
|
47
45
|
import { TabBarHandler } from './tabbar-handler';
|
|
48
46
|
|
|
49
47
|
const defaultLayoutState = {
|
|
50
|
-
[SlotLocation.
|
|
48
|
+
[SlotLocation.left]: {
|
|
51
49
|
currentId: undefined,
|
|
52
50
|
size: undefined,
|
|
53
51
|
},
|
|
54
|
-
[SlotLocation.
|
|
52
|
+
[SlotLocation.right]: {
|
|
55
53
|
// 依照下面的恢复逻辑,这里设置为 `''` 时,就不会恢复右侧的 TabBar 的状态(即选中相应的 viewContainer)
|
|
56
54
|
currentId: '',
|
|
57
55
|
size: undefined,
|
|
58
56
|
},
|
|
59
|
-
[SlotLocation.
|
|
57
|
+
[SlotLocation.bottom]: {
|
|
60
58
|
currentId: undefined,
|
|
61
59
|
size: undefined,
|
|
62
60
|
},
|
|
63
|
-
// 存储 Container 的移动信息:containerId -> location
|
|
64
|
-
containerLocations: {},
|
|
65
61
|
};
|
|
66
62
|
|
|
67
63
|
@Injectable()
|
|
@@ -158,7 +154,6 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
158
154
|
currentId,
|
|
159
155
|
size: service.prevSize,
|
|
160
156
|
};
|
|
161
|
-
|
|
162
157
|
this.layoutState.setState(LAYOUT_STATE.MAIN, this.state);
|
|
163
158
|
}
|
|
164
159
|
|
|
@@ -179,89 +174,63 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
179
174
|
|
|
180
175
|
restoreTabbarService = async (service: TabbarService) => {
|
|
181
176
|
this.state = fixLayout(this.layoutState.getState(LAYOUT_STATE.MAIN, defaultLayoutState));
|
|
177
|
+
|
|
182
178
|
const { currentId, size } = this.state[service.location] || {};
|
|
183
179
|
service.prevSize = size;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
180
|
+
let defaultContainer = service.visibleContainers[0] && service.visibleContainers[0].options!.containerId;
|
|
181
|
+
const defaultPanels = this.appConfig.defaultPanels;
|
|
182
|
+
const restorePanel = defaultPanels && defaultPanels[service.location];
|
|
183
|
+
if (defaultPanels && restorePanel !== undefined) {
|
|
184
|
+
if (restorePanel) {
|
|
185
|
+
if (service.containersMap.has(restorePanel)) {
|
|
186
|
+
defaultContainer = restorePanel;
|
|
187
|
+
} else {
|
|
188
|
+
const componentInfo = this.componentRegistry.getComponentRegistryInfo(restorePanel);
|
|
189
|
+
if (
|
|
190
|
+
componentInfo &&
|
|
191
|
+
this.appConfig.layoutConfig[service.location]?.modules &&
|
|
192
|
+
~this.appConfig.layoutConfig[service.location].modules.indexOf(restorePanel)
|
|
193
|
+
) {
|
|
194
|
+
defaultContainer = componentInfo.options!.containerId;
|
|
193
195
|
} else {
|
|
194
|
-
|
|
195
|
-
delete this.state.containerLocations[containerId];
|
|
196
|
-
this.layoutState.setState(LAYOUT_STATE.MAIN, this.state);
|
|
196
|
+
this.logger.warn(`[defaultPanels] No \`${restorePanel}\` view found!`);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
+
} else {
|
|
200
|
+
defaultContainer = '';
|
|
199
201
|
}
|
|
200
202
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const defaultPanels = this.appConfig.defaultPanels;
|
|
208
|
-
const defaultPanel = defaultPanels && defaultPanels[service.location];
|
|
209
|
-
|
|
210
|
-
// 如果配置了默认面板,则使用配置的面板
|
|
211
|
-
if (defaultPanels && defaultPanel !== undefined) {
|
|
212
|
-
if (!defaultPanel) {
|
|
213
|
-
return '';
|
|
214
|
-
}
|
|
215
|
-
if (service.containersMap.has(defaultPanel)) {
|
|
216
|
-
return defaultPanel;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const componentInfo = this.componentRegistry.getComponentRegistryInfo(defaultPanel);
|
|
220
|
-
const isValidModule =
|
|
221
|
-
componentInfo && this.appConfig.layoutConfig[service.location]?.modules?.includes(defaultPanel);
|
|
222
|
-
|
|
223
|
-
if (isValidModule) {
|
|
224
|
-
return componentInfo.options!.containerId;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
this.logger.warn(`[defaultPanels] No \`${defaultPanel}\` view found!`);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// 获取第一个可见容器作为默认值
|
|
231
|
-
return service.visibleContainers[0]?.options?.containerId;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
private restoreContainerId(
|
|
235
|
-
service: TabbarService,
|
|
236
|
-
currentId: string | undefined,
|
|
237
|
-
defaultContainer: string | undefined,
|
|
238
|
-
) {
|
|
203
|
+
/**
|
|
204
|
+
* ContainerId 存在三种值类型,对应的处理模式如下:
|
|
205
|
+
* 1. undefined: 采用首个注册的容器作为当前 containerId
|
|
206
|
+
* 2. string: 非 drop container 直接使用该 containerId 作为当前 containerId
|
|
207
|
+
* 3. '': 直接清空当前 containerId,不展开相应的 viewContainer
|
|
208
|
+
*/
|
|
239
209
|
if (isUndefined(currentId)) {
|
|
240
|
-
// 未指定 currentId 时,使用默认容器或第一个注册的容器
|
|
241
210
|
if (isUndefined(defaultContainer)) {
|
|
211
|
+
// 默认采用首个注册的容器作为当前 containerId
|
|
242
212
|
service.updateNextContainerId();
|
|
243
213
|
} else {
|
|
244
214
|
service.updateCurrentContainerId(defaultContainer);
|
|
245
215
|
}
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (currentId && !this.isDropContainer(currentId)) {
|
|
216
|
+
} else if (currentId && !this.isDropContainer(currentId)) {
|
|
250
217
|
if (service.containersMap.has(currentId)) {
|
|
251
218
|
service.updateCurrentContainerId(currentId);
|
|
252
|
-
|
|
219
|
+
} else {
|
|
220
|
+
// 如果在别的 tabbar 中存在该 containerId,则将其移动到当前 tabbar
|
|
221
|
+
if (this.findTabbarServiceByContainerId(currentId)) {
|
|
222
|
+
this.moveContainerTo(currentId, service.location);
|
|
223
|
+
service.updateCurrentContainerId(currentId);
|
|
224
|
+
} else {
|
|
225
|
+
service.updateCurrentContainerId(defaultContainer);
|
|
226
|
+
// 等待后续新容器注册时,更新当前的 containerId
|
|
227
|
+
service.updateNextContainerId(currentId);
|
|
228
|
+
}
|
|
253
229
|
}
|
|
254
|
-
|
|
255
|
-
// 如果当前 containerId 不存在,则使用默认容器
|
|
256
|
-
service.updateCurrentContainerId(defaultContainer || '');
|
|
257
|
-
service.updateNextContainerId(currentId);
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
if (currentId === '' || this.isDropContainer(currentId)) {
|
|
230
|
+
} else if (currentId === '' || this.isDropContainer(currentId)) {
|
|
262
231
|
service.updateCurrentContainerId('');
|
|
263
232
|
}
|
|
264
|
-
}
|
|
233
|
+
};
|
|
265
234
|
|
|
266
235
|
findTabbarServiceByContainerId(containerId: string): TabbarService | undefined {
|
|
267
236
|
let tabbarService: undefined | TabbarService;
|
|
@@ -287,7 +256,7 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
287
256
|
this.logger.error(`cannot find container: ${containerId}`);
|
|
288
257
|
return;
|
|
289
258
|
}
|
|
290
|
-
if (container.options?.draggable
|
|
259
|
+
if (!container.options?.draggable) {
|
|
291
260
|
this.logger.warn(`container: ${containerId} is not draggable`);
|
|
292
261
|
return;
|
|
293
262
|
}
|
|
@@ -302,59 +271,33 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
302
271
|
toTabbar.dynamicAddContainer(containerId, container);
|
|
303
272
|
const newHandler = this.injector.get(TabBarHandler, [containerId, this.getTabbarService(toTabbar.location)]);
|
|
304
273
|
this.handleMap.set(containerId, newHandler!);
|
|
305
|
-
|
|
306
|
-
// 更新容器位置信息
|
|
307
|
-
if (!this.state.containerLocations) {
|
|
308
|
-
this.state.containerLocations = {};
|
|
309
|
-
}
|
|
310
|
-
this.state.containerLocations[containerId] = to;
|
|
311
|
-
// this.layoutState.setState(LAYOUT_STATE.MAIN, this.state);
|
|
312
274
|
}
|
|
313
275
|
|
|
314
276
|
showDropAreaForContainer(containerId: string): void {
|
|
315
277
|
const tabbarService = this.findTabbarServiceByContainerId(containerId);
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const viewService = this.tabbarServices.get(SlotLocation.view);
|
|
278
|
+
const bottomService = this.tabbarServices.get('bottom');
|
|
279
|
+
const rightService = this.tabbarServices.get('right');
|
|
319
280
|
if (!tabbarService) {
|
|
320
281
|
this.logger.error(`cannot find container: ${containerId}`);
|
|
321
282
|
return;
|
|
322
283
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
const dropContainers = {
|
|
330
|
-
[SlotLocation.panel]: DROP_PANEL_CONTAINER,
|
|
331
|
-
[SlotLocation.extendView]: DROP_EXTEND_VIEW_CONTAINER,
|
|
332
|
-
[SlotLocation.view]: DROP_VIEW_CONTAINER,
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
transaction((tx) => {
|
|
336
|
-
otherServices[tabbarService?.location]?.forEach((service) => {
|
|
337
|
-
service?.updateCurrentContainerId(dropContainers[service?.location], tx);
|
|
338
|
-
});
|
|
339
|
-
});
|
|
284
|
+
if (tabbarService?.location === 'right') {
|
|
285
|
+
bottomService?.updateCurrentContainerId(DROP_BOTTOM_CONTAINER);
|
|
286
|
+
}
|
|
287
|
+
if (tabbarService?.location === 'bottom') {
|
|
288
|
+
rightService?.updateCurrentContainerId(DROP_RIGHT_CONTAINER);
|
|
289
|
+
}
|
|
340
290
|
}
|
|
341
291
|
|
|
342
292
|
hideDropArea(): void {
|
|
343
|
-
const
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
if (extendViewService?.currentContainerId.get() === DROP_EXTEND_VIEW_CONTAINER) {
|
|
352
|
-
extendViewService.updateCurrentContainerId(extendViewService.previousContainerId || '', tx);
|
|
353
|
-
}
|
|
354
|
-
if (viewService?.currentContainerId.get() === DROP_VIEW_CONTAINER) {
|
|
355
|
-
viewService.updateCurrentContainerId(viewService.previousContainerId || '', tx);
|
|
356
|
-
}
|
|
357
|
-
});
|
|
293
|
+
const bottomService = this.tabbarServices.get('bottom');
|
|
294
|
+
const rightService = this.tabbarServices.get('right');
|
|
295
|
+
if (bottomService?.currentContainerId.get() === DROP_BOTTOM_CONTAINER) {
|
|
296
|
+
bottomService.updateCurrentContainerId(bottomService.previousContainerId || '');
|
|
297
|
+
}
|
|
298
|
+
if (rightService?.currentContainerId.get() === DROP_RIGHT_CONTAINER) {
|
|
299
|
+
rightService.updateCurrentContainerId(rightService.previousContainerId || '');
|
|
300
|
+
}
|
|
358
301
|
}
|
|
359
302
|
|
|
360
303
|
isVisible(location: string) {
|
|
@@ -393,7 +336,7 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
393
336
|
}
|
|
394
337
|
|
|
395
338
|
private isDropContainer(containerId: string): boolean {
|
|
396
|
-
return [
|
|
339
|
+
return [DROP_BOTTOM_CONTAINER, DROP_RIGHT_CONTAINER].includes(containerId);
|
|
397
340
|
}
|
|
398
341
|
|
|
399
342
|
private findNonDropContainerId(tabbarService: TabbarService): string {
|
|
@@ -439,7 +382,7 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
439
382
|
});
|
|
440
383
|
const debouncedStoreState = debounce(() => this.storeState(service, service.currentContainerId.get()), 100);
|
|
441
384
|
service.addDispose(service.onSizeChange(debouncedStoreState));
|
|
442
|
-
if (location === SlotLocation.
|
|
385
|
+
if (location === SlotLocation.bottom) {
|
|
443
386
|
// use this getter's side effect to set bottomExpanded contextKey
|
|
444
387
|
const debouncedUpdate = debounce(() => void this.bottomExpanded, 100);
|
|
445
388
|
service.addDispose(service.onSizeChange(() => debouncedUpdate));
|
|
@@ -520,7 +463,6 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
520
463
|
if (Fc) {
|
|
521
464
|
this.debug.warn('collectTabbarComponent api warning: Please move react component into options.component!');
|
|
522
465
|
}
|
|
523
|
-
side = this.mapSideToLocation(side);
|
|
524
466
|
if (options.hideIfEmpty && !views.length && !options.component) {
|
|
525
467
|
this.holdTabbarComponent.set(options.containerId, { views, options, side });
|
|
526
468
|
if (this.tabbarUpdateSet.has(options.containerId)) {
|
|
@@ -553,19 +495,6 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
553
495
|
return options.containerId;
|
|
554
496
|
}
|
|
555
497
|
|
|
556
|
-
private mapSideToLocation(side: string): SlotLocation {
|
|
557
|
-
switch (side) {
|
|
558
|
-
case 'left':
|
|
559
|
-
return SlotLocation.view;
|
|
560
|
-
case 'right':
|
|
561
|
-
return SlotLocation.extendView;
|
|
562
|
-
case 'bottom':
|
|
563
|
-
return SlotLocation.panel;
|
|
564
|
-
default:
|
|
565
|
-
return side;
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
|
|
569
498
|
getViewAccordionService(viewId: string) {
|
|
570
499
|
const containerId = this.viewToContainerMap.get(viewId);
|
|
571
500
|
if (!containerId) {
|
|
@@ -711,7 +640,7 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
711
640
|
|
|
712
641
|
// TODO 这样很耦合,不能做到tab renderer自由拆分
|
|
713
642
|
expandBottom(expand: boolean): void {
|
|
714
|
-
const tabbarService = this.getTabbarService(SlotLocation.
|
|
643
|
+
const tabbarService = this.getTabbarService(SlotLocation.bottom);
|
|
715
644
|
if (!tabbarService.currentContainerId.get()) {
|
|
716
645
|
tabbarService.updateCurrentContainerId(
|
|
717
646
|
tabbarService.currentContainerId.get() ||
|
|
@@ -724,7 +653,7 @@ export class LayoutService extends WithEventBus implements IMainLayoutService {
|
|
|
724
653
|
}
|
|
725
654
|
|
|
726
655
|
get bottomExpanded(): boolean {
|
|
727
|
-
const tabbarService = this.getTabbarService(SlotLocation.
|
|
656
|
+
const tabbarService = this.getTabbarService(SlotLocation.bottom);
|
|
728
657
|
this.contextKeyService.createKey('bottomFullExpanded', tabbarService.isExpanded);
|
|
729
658
|
return tabbarService.isExpanded;
|
|
730
659
|
}
|
|
@@ -39,34 +39,85 @@ import {
|
|
|
39
39
|
MenuId,
|
|
40
40
|
} from '@opensumi/ide-core-browser/lib/menu/next';
|
|
41
41
|
import { ContributionProvider, Domain, IEventBus, WithEventBus, localize } from '@opensumi/ide-core-common';
|
|
42
|
-
import { CommandContribution, CommandRegistry, CommandService } from '@opensumi/ide-core-common/lib/command';
|
|
42
|
+
import { Command, CommandContribution, CommandRegistry, CommandService } from '@opensumi/ide-core-common/lib/command';
|
|
43
43
|
|
|
44
|
-
import {
|
|
44
|
+
import { DROP_BOTTOM_CONTAINER, DROP_RIGHT_CONTAINER, IMainLayoutService } from '../common';
|
|
45
45
|
|
|
46
|
-
import {
|
|
47
|
-
EXPAND_BOTTOM_PANEL,
|
|
48
|
-
EXPAND_PANEL_COMMAND,
|
|
49
|
-
IS_VISIBLE_BOTTOM_PANEL_COMMAND,
|
|
50
|
-
IS_VISIBLE_EXTEND_VIEW_COMMAND,
|
|
51
|
-
IS_VISIBLE_LEFT_PANEL_COMMAND,
|
|
52
|
-
IS_VISIBLE_PANEL_COMMAND,
|
|
53
|
-
IS_VISIBLE_RIGHT_PANEL_COMMAND,
|
|
54
|
-
IS_VISIBLE_VIEW_COMMAND,
|
|
55
|
-
RETRACT_BOTTOM_PANEL,
|
|
56
|
-
RETRACT_PANEL_COMMAND,
|
|
57
|
-
TOGGLE_BOTTOM_PANEL_COMMAND,
|
|
58
|
-
TOGGLE_EXTEND_VIEW_COMMAND,
|
|
59
|
-
TOGGLE_LEFT_PANEL_COMMAND,
|
|
60
|
-
TOGGLE_PANEL_COMMAND,
|
|
61
|
-
TOGGLE_RIGHT_PANEL_COMMAND,
|
|
62
|
-
TOGGLE_VIEW_COMMAND,
|
|
63
|
-
WORKBENCH_ACTION_CLOSEPANEL,
|
|
64
|
-
WORKBENCH_ACTION_CLOSESIDECAR,
|
|
65
|
-
} from './command';
|
|
66
|
-
import { ExtendViewDropArea, PanelDropArea, ViewDropArea } from './drop-area/drop-area';
|
|
46
|
+
import { BottomDropArea, RightDropArea } from './drop-area/drop-area';
|
|
67
47
|
import { ViewQuickOpenHandler } from './quick-open-view';
|
|
68
48
|
import { BottomTabRenderer, LeftTabRenderer, RightTabRenderer } from './tabbar/renderer.view';
|
|
69
49
|
|
|
50
|
+
// NOTE 左右侧面板的展开、折叠命令请使用组合命令 activity-bar.left.toggle,layout命令仅做折叠展开,不处理tab激活逻辑
|
|
51
|
+
export const HIDE_LEFT_PANEL_COMMAND: Command = {
|
|
52
|
+
id: 'main-layout.left-panel.hide',
|
|
53
|
+
label: '%main-layout.left-panel.hide%',
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const WORKBENCH_ACTION_CLOSESIDECAR: Command = {
|
|
57
|
+
id: 'workbench.action.closeSidebar',
|
|
58
|
+
label: '%main-layout.sidebar.hide%',
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const SHOW_LEFT_PANEL_COMMAND: Command = {
|
|
62
|
+
id: 'main-layout.left-panel.show',
|
|
63
|
+
label: '%main-layout.left-panel.show%',
|
|
64
|
+
};
|
|
65
|
+
export const TOGGLE_LEFT_PANEL_COMMAND: MenuCommandDesc = {
|
|
66
|
+
id: 'main-layout.left-panel.toggle',
|
|
67
|
+
label: '%main-layout.left-panel.toggle%',
|
|
68
|
+
};
|
|
69
|
+
export const HIDE_RIGHT_PANEL_COMMAND: Command = {
|
|
70
|
+
id: 'main-layout.right-panel.hide',
|
|
71
|
+
label: '%main-layout.right-panel.hide%',
|
|
72
|
+
};
|
|
73
|
+
export const SHOW_RIGHT_PANEL_COMMAND: Command = {
|
|
74
|
+
id: 'main-layout.right-panel.show',
|
|
75
|
+
label: '%main-layout.right-panel.show%',
|
|
76
|
+
};
|
|
77
|
+
export const TOGGLE_RIGHT_PANEL_COMMAND: MenuCommandDesc = {
|
|
78
|
+
id: 'main-layout.right-panel.toggle',
|
|
79
|
+
label: '%main-layout.right-panel.toggle%',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const HIDE_BOTTOM_PANEL_COMMAND: Command = {
|
|
83
|
+
id: 'main-layout.bottom-panel.hide',
|
|
84
|
+
label: '%main-layout.bottom-panel.hide%',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const WORKBENCH_ACTION_CLOSEPANEL: Command = {
|
|
88
|
+
id: 'workbench.action.closePanel',
|
|
89
|
+
delegate: HIDE_BOTTOM_PANEL_COMMAND.id,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const SHOW_BOTTOM_PANEL_COMMAND: Command = {
|
|
93
|
+
id: 'main-layout.bottom-panel.show',
|
|
94
|
+
label: '%main-layout.bottom-panel.show%',
|
|
95
|
+
};
|
|
96
|
+
export const TOGGLE_BOTTOM_PANEL_COMMAND: Command = {
|
|
97
|
+
id: 'main-layout.bottom-panel.toggle',
|
|
98
|
+
iconClass: getIcon('minus'),
|
|
99
|
+
label: '%layout.tabbar.toggle%',
|
|
100
|
+
};
|
|
101
|
+
export const IS_VISIBLE_BOTTOM_PANEL_COMMAND: Command = {
|
|
102
|
+
id: 'main-layout.bottom-panel.is-visible',
|
|
103
|
+
};
|
|
104
|
+
export const IS_VISIBLE_LEFT_PANEL_COMMAND: Command = {
|
|
105
|
+
id: 'main-layout.left-panel.is-visible',
|
|
106
|
+
};
|
|
107
|
+
export const IS_VISIBLE_RIGHT_PANEL_COMMAND: Command = {
|
|
108
|
+
id: 'main-layout.right-panel.is-visible',
|
|
109
|
+
};
|
|
110
|
+
export const EXPAND_BOTTOM_PANEL: Command = {
|
|
111
|
+
id: 'main-layout.bottom-panel.expand',
|
|
112
|
+
label: '%layout.tabbar.expand%',
|
|
113
|
+
iconClass: getIcon('expand'),
|
|
114
|
+
};
|
|
115
|
+
export const RETRACT_BOTTOM_PANEL: Command = {
|
|
116
|
+
id: 'main-layout.bottom-panel.retract',
|
|
117
|
+
label: '%layout.tabbar.retract%',
|
|
118
|
+
iconClass: getIcon('shrink'),
|
|
119
|
+
};
|
|
120
|
+
|
|
70
121
|
@Domain(
|
|
71
122
|
CommandContribution,
|
|
72
123
|
ClientAppContribution,
|
|
@@ -145,20 +196,15 @@ export class MainLayoutModuleContribution
|
|
|
145
196
|
}
|
|
146
197
|
|
|
147
198
|
registerComponent(registry: ComponentRegistry): void {
|
|
148
|
-
registry.register(
|
|
149
|
-
component:
|
|
150
|
-
hideTab: true,
|
|
151
|
-
containerId: DROP_EXTEND_VIEW_CONTAINER,
|
|
152
|
-
});
|
|
153
|
-
registry.register(DROP_PANEL_CONTAINER, [], {
|
|
154
|
-
component: PanelDropArea,
|
|
199
|
+
registry.register(DROP_RIGHT_CONTAINER, [], {
|
|
200
|
+
component: RightDropArea,
|
|
155
201
|
hideTab: true,
|
|
156
|
-
containerId:
|
|
202
|
+
containerId: DROP_RIGHT_CONTAINER,
|
|
157
203
|
});
|
|
158
|
-
registry.register(
|
|
159
|
-
component:
|
|
204
|
+
registry.register(DROP_BOTTOM_CONTAINER, [], {
|
|
205
|
+
component: BottomDropArea,
|
|
160
206
|
hideTab: true,
|
|
161
|
-
containerId:
|
|
207
|
+
containerId: DROP_BOTTOM_CONTAINER,
|
|
162
208
|
});
|
|
163
209
|
}
|
|
164
210
|
|
|
@@ -171,75 +217,78 @@ export class MainLayoutModuleContribution
|
|
|
171
217
|
}
|
|
172
218
|
|
|
173
219
|
registerRenderer(registry: SlotRendererRegistry) {
|
|
174
|
-
registry.registerSlotRenderer(SlotLocation.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
220
|
+
registry.registerSlotRenderer(SlotLocation.right, RightTabRenderer);
|
|
221
|
+
registry.registerSlotRenderer(SlotLocation.left, LeftTabRenderer);
|
|
222
|
+
registry.registerSlotRenderer(SlotLocation.bottom, BottomTabRenderer);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
registerCommands(commands: CommandRegistry): void {
|
|
226
|
+
// @deprecated
|
|
227
|
+
commands.registerCommand(HIDE_LEFT_PANEL_COMMAND, {
|
|
228
|
+
execute: () => {
|
|
229
|
+
this.mainLayoutService.toggleSlot(SlotLocation.left, false);
|
|
178
230
|
},
|
|
179
231
|
});
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
232
|
+
// @deprecated
|
|
233
|
+
commands.registerCommand(SHOW_LEFT_PANEL_COMMAND, {
|
|
234
|
+
execute: (size?: number) => {
|
|
235
|
+
this.mainLayoutService.toggleSlot(SlotLocation.left, true, size);
|
|
183
236
|
},
|
|
184
237
|
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
expand: true,
|
|
189
|
-
toggle: true,
|
|
238
|
+
commands.registerCommand(TOGGLE_LEFT_PANEL_COMMAND, {
|
|
239
|
+
execute: (show?: boolean, size?: number) => {
|
|
240
|
+
this.mainLayoutService.toggleSlot(SlotLocation.left, show, size);
|
|
190
241
|
},
|
|
191
242
|
});
|
|
192
|
-
}
|
|
193
243
|
|
|
194
|
-
|
|
195
|
-
commands.registerCommand(
|
|
196
|
-
execute: (
|
|
197
|
-
this.mainLayoutService.toggleSlot(SlotLocation.
|
|
244
|
+
// @deprecated
|
|
245
|
+
commands.registerCommand(HIDE_RIGHT_PANEL_COMMAND, {
|
|
246
|
+
execute: () => {
|
|
247
|
+
this.mainLayoutService.toggleSlot(SlotLocation.right, false);
|
|
198
248
|
},
|
|
199
249
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
250
|
+
// @deprecated
|
|
251
|
+
commands.registerCommand(SHOW_RIGHT_PANEL_COMMAND, {
|
|
252
|
+
execute: (size?: number) => {
|
|
253
|
+
this.mainLayoutService.toggleSlot(SlotLocation.right, true, size);
|
|
203
254
|
},
|
|
204
255
|
});
|
|
205
|
-
commands.registerCommand(
|
|
256
|
+
commands.registerCommand(TOGGLE_RIGHT_PANEL_COMMAND, {
|
|
206
257
|
execute: (show?: boolean, size?: number) => {
|
|
207
|
-
this.mainLayoutService.toggleSlot(SlotLocation.
|
|
258
|
+
this.mainLayoutService.toggleSlot(SlotLocation.right, show, size);
|
|
208
259
|
},
|
|
209
260
|
});
|
|
210
|
-
commands.registerCommand(IS_VISIBLE_VIEW_COMMAND, {
|
|
211
|
-
execute: () => this.mainLayoutService.isVisible(SlotLocation.view),
|
|
212
|
-
});
|
|
213
|
-
commands.registerCommand(IS_VISIBLE_EXTEND_VIEW_COMMAND, {
|
|
214
|
-
execute: () => this.mainLayoutService.isVisible(SlotLocation.extendView),
|
|
215
|
-
});
|
|
216
|
-
commands.registerCommand(IS_VISIBLE_PANEL_COMMAND, {
|
|
217
|
-
execute: () => this.mainLayoutService.isVisible(SlotLocation.panel),
|
|
218
|
-
});
|
|
219
|
-
// TODO: 下个版本废弃掉
|
|
220
|
-
commands.registerCommand(TOGGLE_LEFT_PANEL_COMMAND);
|
|
221
|
-
commands.registerCommand(TOGGLE_RIGHT_PANEL_COMMAND);
|
|
222
|
-
commands.registerCommand(TOGGLE_BOTTOM_PANEL_COMMAND);
|
|
223
|
-
commands.registerCommand(EXPAND_BOTTOM_PANEL);
|
|
224
|
-
commands.registerCommand(RETRACT_BOTTOM_PANEL);
|
|
225
|
-
commands.registerCommand(IS_VISIBLE_LEFT_PANEL_COMMAND);
|
|
226
|
-
commands.registerCommand(IS_VISIBLE_RIGHT_PANEL_COMMAND);
|
|
227
|
-
commands.registerCommand(IS_VISIBLE_BOTTOM_PANEL_COMMAND);
|
|
228
261
|
|
|
229
262
|
commands.registerCommand(WORKBENCH_ACTION_CLOSESIDECAR, {
|
|
230
263
|
execute: () =>
|
|
231
264
|
Promise.all([
|
|
232
|
-
this.mainLayoutService.toggleSlot(SlotLocation.
|
|
233
|
-
this.mainLayoutService.toggleSlot(SlotLocation.
|
|
265
|
+
this.mainLayoutService.toggleSlot(SlotLocation.left, false),
|
|
266
|
+
this.mainLayoutService.toggleSlot(SlotLocation.right, false),
|
|
234
267
|
]),
|
|
235
268
|
});
|
|
236
269
|
|
|
237
|
-
commands.registerCommand(
|
|
270
|
+
commands.registerCommand(SHOW_BOTTOM_PANEL_COMMAND, {
|
|
238
271
|
execute: () => {
|
|
239
|
-
this.mainLayoutService.toggleSlot(SlotLocation.
|
|
272
|
+
this.mainLayoutService.toggleSlot(SlotLocation.bottom, true);
|
|
240
273
|
},
|
|
241
274
|
});
|
|
242
275
|
|
|
276
|
+
commands.registerCommand(HIDE_BOTTOM_PANEL_COMMAND, {
|
|
277
|
+
execute: () => {
|
|
278
|
+
this.mainLayoutService.toggleSlot(SlotLocation.bottom, false);
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
commands.registerCommand(WORKBENCH_ACTION_CLOSEPANEL);
|
|
282
|
+
commands.registerCommand(IS_VISIBLE_BOTTOM_PANEL_COMMAND, {
|
|
283
|
+
execute: () => this.mainLayoutService.getTabbarService('bottom').currentContainerId.get() !== '',
|
|
284
|
+
});
|
|
285
|
+
commands.registerCommand(IS_VISIBLE_LEFT_PANEL_COMMAND, {
|
|
286
|
+
execute: () => this.mainLayoutService.isVisible(SlotLocation.left),
|
|
287
|
+
});
|
|
288
|
+
commands.registerCommand(IS_VISIBLE_RIGHT_PANEL_COMMAND, {
|
|
289
|
+
execute: () => this.mainLayoutService.isVisible(SlotLocation.left),
|
|
290
|
+
});
|
|
291
|
+
|
|
243
292
|
commands.registerCommand(
|
|
244
293
|
{
|
|
245
294
|
id: 'view.outward.right-panel.hide',
|
|
@@ -310,14 +359,14 @@ export class MainLayoutModuleContribution
|
|
|
310
359
|
});
|
|
311
360
|
|
|
312
361
|
Object.entries({
|
|
313
|
-
[SlotLocation.
|
|
362
|
+
[SlotLocation.left]: [
|
|
314
363
|
EXPLORER_CONTAINER_ID,
|
|
315
364
|
SEARCH_CONTAINER_ID,
|
|
316
365
|
SCM_CONTAINER_ID,
|
|
317
366
|
DEBUG_CONTAINER_ID,
|
|
318
367
|
EXTENSION_CONTAINER_ID,
|
|
319
368
|
],
|
|
320
|
-
[SlotLocation.
|
|
369
|
+
[SlotLocation.bottom]: [
|
|
321
370
|
MARKER_CONTAINER_ID,
|
|
322
371
|
OUTPUT_CONTAINER_ID,
|
|
323
372
|
DEBUG_CONSOLE_CONTAINER_ID,
|
|
@@ -347,24 +396,24 @@ export class MainLayoutModuleContribution
|
|
|
347
396
|
});
|
|
348
397
|
|
|
349
398
|
menus.registerMenuItem(MenuId.MenubarViewMenu, {
|
|
350
|
-
command:
|
|
399
|
+
command: TOGGLE_LEFT_PANEL_COMMAND,
|
|
351
400
|
group: '5_panel',
|
|
352
401
|
});
|
|
353
402
|
menus.registerMenuItem(MenuId.MenubarViewMenu, {
|
|
354
|
-
command:
|
|
403
|
+
command: TOGGLE_RIGHT_PANEL_COMMAND,
|
|
355
404
|
group: '5_panel',
|
|
356
405
|
});
|
|
357
406
|
menus.registerMenuItem(MenuId.MenubarViewMenu, {
|
|
358
|
-
command:
|
|
407
|
+
command: TOGGLE_BOTTOM_PANEL_COMMAND as MenuCommandDesc,
|
|
359
408
|
group: '5_panel',
|
|
360
409
|
});
|
|
361
410
|
menus.registerMenuItem(MenuId.MenubarViewMenu, {
|
|
362
|
-
command:
|
|
411
|
+
command: EXPAND_BOTTOM_PANEL as MenuCommandDesc,
|
|
363
412
|
group: '5_panel',
|
|
364
413
|
when: '!bottomFullExpanded',
|
|
365
414
|
});
|
|
366
415
|
menus.registerMenuItem(MenuId.MenubarViewMenu, {
|
|
367
|
-
command:
|
|
416
|
+
command: RETRACT_BOTTOM_PANEL as MenuCommandDesc,
|
|
368
417
|
group: '5_panel',
|
|
369
418
|
when: 'bottomFullExpanded',
|
|
370
419
|
});
|
|
@@ -382,24 +431,20 @@ export class MainLayoutModuleContribution
|
|
|
382
431
|
protected registerSideToggleKey() {
|
|
383
432
|
this.keybindingRegistry.registerKeybinding({
|
|
384
433
|
keybinding: 'ctrlcmd+b',
|
|
385
|
-
command:
|
|
386
|
-
});
|
|
387
|
-
this.keybindingRegistry.registerKeybinding({
|
|
388
|
-
keybinding: 'ctrlcmd+alt+b',
|
|
389
|
-
command: TOGGLE_EXTEND_VIEW_COMMAND.id,
|
|
434
|
+
command: TOGGLE_LEFT_PANEL_COMMAND.id,
|
|
390
435
|
});
|
|
391
436
|
this.keybindingRegistry.registerKeybinding({
|
|
392
437
|
keybinding: 'ctrlcmd+j',
|
|
393
|
-
command:
|
|
438
|
+
command: TOGGLE_BOTTOM_PANEL_COMMAND.id,
|
|
394
439
|
});
|
|
395
440
|
this.keybindingRegistry.registerKeybinding({
|
|
396
441
|
keybinding: 'ctrlcmd+shift+j',
|
|
397
|
-
command:
|
|
442
|
+
command: EXPAND_BOTTOM_PANEL.id,
|
|
398
443
|
when: '!bottomFullExpanded',
|
|
399
444
|
});
|
|
400
445
|
this.keybindingRegistry.registerKeybinding({
|
|
401
446
|
keybinding: 'ctrlcmd+shift+j',
|
|
402
|
-
command:
|
|
447
|
+
command: RETRACT_BOTTOM_PANEL.id,
|
|
403
448
|
when: 'bottomFullExpanded',
|
|
404
449
|
});
|
|
405
450
|
}
|