Skip to content

Commit a2a82fa

Browse files
committed
microsoft#90020 remove viewlet semantics from activity bar
1 parent 65a9148 commit a2a82fa

19 files changed

Lines changed: 378 additions & 330 deletions

File tree

src/vs/workbench/browser/actions/layoutActions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ export class ResetViewLocationsAction extends Action {
487487
}
488488

489489
async run(): Promise<void> {
490-
this.viewDescriptorService.getViewContainers().forEach(viewContainer => {
490+
this.viewDescriptorService.viewContainers.forEach(viewContainer => {
491491
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
492492

493493
viewContainerModel.allViewDescriptors.forEach(viewDescriptor => {
@@ -596,7 +596,7 @@ export class MoveFocusedViewAction extends Action {
596596
});
597597
}
598598

599-
const pinnedViewlets = this.activityBarService.getPinnedViewletIds();
599+
const pinnedViewlets = this.activityBarService.getPinnedViewContainerIds();
600600
items.push(...pinnedViewlets
601601
.filter(viewletId => {
602602
if (viewletId === this.viewDescriptorService.getViewContainerByViewId(focusedViewId)!.id) {

src/vs/workbench/browser/actions/workspaceCommands.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import * as nls from 'vs/nls';
77
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
88
import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing';
99
import * as resources from 'vs/base/common/resources';
10-
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
1110
import { CancellationToken } from 'vs/base/common/cancellation';
1211
import { mnemonicButtonLabel } from 'vs/base/common/labels';
1312
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
@@ -19,6 +18,7 @@ import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
1918
import { IModelService } from 'vs/editor/common/services/modelService';
2019
import { IModeService } from 'vs/editor/common/services/modeService';
2120
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
21+
import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
2222

2323
export const ADD_ROOT_FOLDER_COMMAND_ID = 'addRootFolder';
2424
export const ADD_ROOT_FOLDER_LABEL = nls.localize('addFolderToWorkspace', "Add Folder to Workspace...");
@@ -55,7 +55,8 @@ CommandsRegistry.registerCommand({
5555
CommandsRegistry.registerCommand({
5656
id: ADD_ROOT_FOLDER_COMMAND_ID,
5757
handler: async (accessor) => {
58-
const viewletService = accessor.get(IViewletService);
58+
const viewDescriptorService = accessor.get(IViewDescriptorService);
59+
const viewsService = accessor.get(IViewsService);
5960
const workspaceEditingService = accessor.get(IWorkspaceEditingService);
6061
const dialogsService = accessor.get(IFileDialogService);
6162
const folders = await dialogsService.showOpenDialog({
@@ -71,7 +72,7 @@ CommandsRegistry.registerCommand({
7172
}
7273

7374
await workspaceEditingService.addFolders(folders.map(folder => ({ uri: resources.removeTrailingPathSeparator(folder) })));
74-
await viewletService.openViewlet(viewletService.getDefaultViewletId(), true);
75+
await viewsService.openViewContainer(viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)!.id, true);
7576
}
7677
});
7778

src/vs/workbench/browser/layout.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { WINDOW_ACTIVE_BORDER, WINDOW_INACTIVE_BORDER } from 'vs/workbench/commo
4343
import { LineNumbersType } from 'vs/editor/common/config/editorOptions';
4444
import { ActivitybarPart } from 'vs/workbench/browser/parts/activitybar/activitybarPart';
4545
import { URI } from 'vs/base/common/uri';
46+
import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views';
4647

4748
export enum Settings {
4849
ACTIVITYBAR_VISIBLE = 'workbench.activityBar.visible',
@@ -171,6 +172,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
171172
private panelService!: IPanelService;
172173
private titleService!: ITitleService;
173174
private viewletService!: IViewletService;
175+
private viewDescriptorService!: IViewDescriptorService;
174176
private contextService!: IWorkspaceContextService;
175177
private backupFileService!: IBackupFileService;
176178
private notificationService!: INotificationService;
@@ -255,6 +257,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
255257
this.editorGroupService = accessor.get(IEditorGroupsService);
256258
this.panelService = accessor.get(IPanelService);
257259
this.viewletService = accessor.get(IViewletService);
260+
this.viewDescriptorService = accessor.get(IViewDescriptorService);
258261
this.titleService = accessor.get(ITitleService);
259262
this.notificationService = accessor.get(INotificationService);
260263
accessor.get(IStatusbarService); // not used, but called to ensure instantiated
@@ -489,11 +492,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
489492
if (!this.state.sideBar.hidden) {
490493

491494
// Only restore last viewlet if window was reloaded or we are in development mode
492-
let viewletToRestore: string;
495+
let viewletToRestore: string | undefined;
493496
if (!this.environmentService.isBuilt || lifecycleService.startupKind === StartupKind.ReloadedWindow || isWeb) {
494-
viewletToRestore = this.storageService.get(SidebarPart.activeViewletSettingsKey, StorageScope.WORKSPACE, this.viewletService.getDefaultViewletId());
497+
viewletToRestore = this.storageService.get(SidebarPart.activeViewletSettingsKey, StorageScope.WORKSPACE, this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id);
495498
} else {
496-
viewletToRestore = this.viewletService.getDefaultViewletId();
499+
viewletToRestore = this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id;
497500
}
498501

499502
if (viewletToRestore) {
@@ -639,7 +642,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
639642
}
640643

641644
if (sidebarState.length) {
642-
storageService.store(ActivitybarPart.PINNED_VIEWLETS, JSON.stringify(sidebarState), StorageScope.GLOBAL);
645+
storageService.store(ActivitybarPart.PINNED_VIEW_CONTAINERS, JSON.stringify(sidebarState), StorageScope.GLOBAL);
643646
}
644647
}
645648
}
@@ -1344,7 +1347,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
13441347
if (viewletToOpen) {
13451348
const viewlet = this.viewletService.openViewlet(viewletToOpen, true);
13461349
if (!viewlet) {
1347-
this.viewletService.openViewlet(this.viewletService.getDefaultViewletId(), true);
1350+
this.viewletService.openViewlet(this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id, true);
13481351
}
13491352
}
13501353
}

src/vs/workbench/browser/parts/activitybar/activitybarActions.ts

Lines changed: 5 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ import { EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch
1111
import { Action, IAction } from 'vs/base/common/actions';
1212
import { KeyCode } from 'vs/base/common/keyCodes';
1313
import { dispose } from 'vs/base/common/lifecycle';
14-
import { URI } from 'vs/base/common/uri';
1514
import { SyncActionDescriptor, IMenuService, MenuId } from 'vs/platform/actions/common/actions';
1615
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
1716
import { Registry } from 'vs/platform/registry/common/platform';
1817
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
1918
import { activeContrastBorder, focusBorder } from 'vs/platform/theme/common/colorRegistry';
2019
import { ICssStyleCollector, IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
2120
import { ActivityAction, ActivityActionViewItem, ICompositeBar, ICompositeBarColors, ToggleCompositePinnedAction } from 'vs/workbench/browser/parts/compositeBarActions';
22-
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
2321
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
2422
import { IActivity } from 'vs/workbench/common/activity';
2523
import { ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_BACKGROUND } from 'vs/workbench/common/theme';
@@ -30,9 +28,8 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
3028
import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem';
3129
import { ICommandService } from 'vs/platform/commands/common/commands';
3230
import { Codicon } from 'vs/base/common/codicons';
33-
import { isString } from 'vs/base/common/types';
3431

35-
export class ViewletActivityAction extends ActivityAction {
32+
export class ViewContainerActivityAction extends ActivityAction {
3633

3734
private static readonly preventDoubleClickDelay = 300;
3835

@@ -48,7 +45,6 @@ export class ViewletActivityAction extends ActivityAction {
4845
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
4946
@ITelemetryService telemetryService: ITelemetryService
5047
) {
51-
ViewletActivityAction.generateIconCSS(activity);
5248
super(activity);
5349

5450
this.lastRun = 0;
@@ -57,23 +53,7 @@ export class ViewletActivityAction extends ActivityAction {
5753
this.telemetryService = telemetryService;
5854
}
5955

60-
private static generateIconCSS(activity: IActivity): void {
61-
if (activity.iconUrl) {
62-
activity.cssClass = activity.cssClass || `activity-${activity.id.replace(/\./g, '-')}`;
63-
const iconClass = `.monaco-workbench .activitybar .monaco-action-bar .action-label.${activity.cssClass}`;
64-
DOM.createCSSRule(iconClass, `
65-
mask: ${DOM.asCSSUrl(activity.iconUrl)} no-repeat 50% 50%;
66-
mask-size: 24px;
67-
-webkit-mask: ${DOM.asCSSUrl(activity.iconUrl)} no-repeat 50% 50%;
68-
-webkit-mask-size: 24px;
69-
`);
70-
}
71-
}
72-
73-
setActivity(activity: IActivity): void {
74-
if (activity.iconUrl && this.activity.cssClass !== activity.cssClass) {
75-
ViewletActivityAction.generateIconCSS(activity);
76-
}
56+
updateActivity(activity: IActivity): void {
7757
this.activity = activity;
7858
}
7959

@@ -84,7 +64,7 @@ export class ViewletActivityAction extends ActivityAction {
8464

8565
// prevent accident trigger on a doubleclick (to help nervous people)
8666
const now = Date.now();
87-
if (now > this.lastRun /* https://github.com/Microsoft/vscode/issues/25830 */ && now - this.lastRun < ViewletActivityAction.preventDoubleClickDelay) {
67+
if (now > this.lastRun /* https://github.com/Microsoft/vscode/issues/25830 */ && now - this.lastRun < ViewContainerActivityAction.preventDoubleClickDelay) {
8868
return;
8969
}
9070
this.lastRun = now;
@@ -113,30 +93,6 @@ export class ViewletActivityAction extends ActivityAction {
11393
}
11494
}
11595

116-
export class ToggleViewletAction extends Action {
117-
118-
constructor(
119-
private _viewlet: ViewletDescriptor,
120-
@IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService,
121-
@IViewletService private readonly viewletService: IViewletService
122-
) {
123-
super(_viewlet.id, _viewlet.name);
124-
}
125-
126-
async run(): Promise<void> {
127-
const sideBarVisible = this.layoutService.isVisible(Parts.SIDEBAR_PART);
128-
const activeViewlet = this.viewletService.getActiveViewlet();
129-
130-
// Hide sidebar if selected viewlet already visible
131-
if (sideBarVisible && activeViewlet?.getId() === this._viewlet.id) {
132-
this.layoutService.setSideBarHidden(true);
133-
return;
134-
}
135-
136-
await this.viewletService.openViewlet(this._viewlet.id, true);
137-
}
138-
}
139-
14096
export class AccountsActionViewItem extends ActivityActionViewItem {
14197
constructor(
14298
action: ActivityAction,
@@ -248,23 +204,7 @@ export class GlobalActivityActionViewItem extends ActivityActionViewItem {
248204
}
249205
}
250206

251-
export class PlaceHolderViewletActivityAction extends ViewletActivityAction {
252-
253-
constructor(
254-
id: string,
255-
icon: URI | string | undefined,
256-
@IViewletService viewletService: IViewletService,
257-
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
258-
@ITelemetryService telemetryService: ITelemetryService
259-
) {
260-
super({
261-
id,
262-
name: id,
263-
iconUrl: URI.isUri(icon) ? icon : undefined,
264-
cssClass: isString(icon) ? icon : undefined
265-
}, viewletService, layoutService, telemetryService);
266-
}
267-
}
207+
export class PlaceHolderViewContainerActivityAction extends ViewContainerActivityAction { }
268208

269209
export class PlaceHolderToggleCompositePinnedAction extends ToggleCompositePinnedAction {
270210

@@ -289,7 +229,7 @@ class SwitchSideBarViewAction extends Action {
289229
}
290230

291231
async run(offset: number): Promise<void> {
292-
const visibleViewletIds = this.activityBarService.getVisibleViewletIds();
232+
const visibleViewletIds = this.activityBarService.getVisibleViewContainerIds();
293233

294234
const activeViewlet = this.viewletService.getActiveViewlet();
295235
if (!activeViewlet) {

0 commit comments

Comments
 (0)