提交 91db9a6a 编写于 作者: S Sandeep Somavarapu

Hide the contributed viewlet if no views are registered

上级 33108e1b
...@@ -91,7 +91,7 @@ activityGroupExtensionPoint.setHandler((extensions) => { ...@@ -91,7 +91,7 @@ activityGroupExtensionPoint.setHandler((extensions) => {
const id = `workbench.view.extension.${descriptor.id}`; const id = `workbench.view.extension.${descriptor.id}`;
const title = descriptor.title; const title = descriptor.title;
const cssClass = `extensionViewlet-${descriptor.id}`; const cssClass = `extensionViewlet-${descriptor.id}`;
const location: ViewLocation = ViewLocation.register(id); const location: ViewLocation = ViewLocation.register(id, true);
// Generate CSS to show the icon in the activity bar // Generate CSS to show the icon in the activity bar
const iconClass = `.monaco-workbench > .activitybar .monaco-action-bar .action-label.${cssClass}`; const iconClass = `.monaco-workbench > .activitybar .monaco-action-bar .action-label.${cssClass}`;
......
...@@ -33,6 +33,8 @@ import { isMacintosh } from 'vs/base/common/platform'; ...@@ -33,6 +33,8 @@ import { isMacintosh } from 'vs/base/common/platform';
import { ILifecycleService, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { ILifecycleService, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
import { Dimension, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; import { Dimension, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom';
import { Color } from 'vs/base/common/color'; import { Color } from 'vs/base/common/color';
import { ViewLocation, ViewsRegistry } from 'vs/workbench/common/views';
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
export class ActivitybarPart extends Part { export class ActivitybarPart extends Part {
...@@ -83,11 +85,14 @@ export class ActivitybarPart extends Part { ...@@ -83,11 +85,14 @@ export class ActivitybarPart extends Part {
}); });
this.registerListeners(); this.registerListeners();
this.updateCompositebar();
} }
private registerListeners(): void { private registerListeners(): void {
this.toUnbind.push(this.viewletService.onDidViewletRegister(viewletDescriptor => this.compositeBar.addComposite(viewletDescriptor, false))); this.toUnbind.push(this.viewletService.onDidViewletRegister(() => this.updateCompositebar()));
this.toUnbind.push(ViewsRegistry.onViewsRegistered(() => this.updateCompositebar()));
this.toUnbind.push(ViewsRegistry.onViewsDeregistered(() => this.updateCompositebar()));
// Activate viewlet action on opening of a viewlet // Activate viewlet action on opening of a viewlet
this.toUnbind.push(this.viewletService.onDidViewletOpen(viewlet => this.compositeBar.activateComposite(viewlet.getId()))); this.toUnbind.push(this.viewletService.onDidViewletOpen(viewlet => this.compositeBar.activateComposite(viewlet.getId())));
...@@ -183,7 +188,9 @@ export class ActivitybarPart extends Part { ...@@ -183,7 +188,9 @@ export class ActivitybarPart extends Part {
private showContextMenu(e: MouseEvent): void { private showContextMenu(e: MouseEvent): void {
const event = new StandardMouseEvent(e); const event = new StandardMouseEvent(e);
const actions: Action[] = this.viewletService.getViewlets().map(viewlet => this.instantiationService.createInstance(ToggleCompositePinnedAction, viewlet, this.compositeBar)); const actions: Action[] = this.viewletService.getViewlets()
.filter(viewlet => this.canShow(viewlet))
.map(viewlet => this.instantiationService.createInstance(ToggleCompositePinnedAction, viewlet, this.compositeBar));
actions.push(new Separator()); actions.push(new Separator());
actions.push(this.instantiationService.createInstance(ToggleActivityBarVisibilityAction, ToggleActivityBarVisibilityAction.ID, nls.localize('hideActivitBar', "Hide Activity Bar"))); actions.push(this.instantiationService.createInstance(ToggleActivityBarVisibilityAction, ToggleActivityBarVisibilityAction.ID, nls.localize('hideActivitBar', "Hide Activity Bar")));
...@@ -215,6 +222,26 @@ export class ActivitybarPart extends Part { ...@@ -215,6 +222,26 @@ export class ActivitybarPart extends Part {
}); });
} }
private updateCompositebar(): void {
const viewlets = this.viewletService.getViewlets();
for (const viewlet of viewlets) {
const canShow = this.canShow(viewlet);
if (canShow) {
this.compositeBar.addComposite(viewlet, false);
} else {
this.compositeBar.removeComposite(viewlet.id);
}
}
}
private canShow(viewlet: ViewletDescriptor): boolean {
const viewLocation = ViewLocation.get(viewlet.id);
if (viewLocation && viewLocation.contributed) {
return ViewsRegistry.getViews(viewLocation).length > 0;
}
return true;
}
public getPinned(): string[] { public getPinned(): string[] {
return this.viewletService.getViewlets().map(v => v.id).filter(id => this.compositeBar.isPinned(id)); return this.viewletService.getViewlets().map(v => v.id).filter(id => this.compositeBar.isPinned(id));
} }
......
...@@ -18,8 +18,8 @@ import { ThemeIcon } from 'vs/platform/theme/common/themeService'; ...@@ -18,8 +18,8 @@ import { ThemeIcon } from 'vs/platform/theme/common/themeService';
export class ViewLocation { export class ViewLocation {
private static locations: Map<string, ViewLocation> = new Map<string, ViewLocation>(); private static locations: Map<string, ViewLocation> = new Map<string, ViewLocation>();
static register(id: string): ViewLocation { static register(id: string, contributed: boolean): ViewLocation {
const viewLocation = new ViewLocation(id); const viewLocation = new ViewLocation(id, contributed);
ViewLocation.locations.set(id, viewLocation); ViewLocation.locations.set(id, viewLocation);
return viewLocation; return viewLocation;
} }
...@@ -27,12 +27,13 @@ export class ViewLocation { ...@@ -27,12 +27,13 @@ export class ViewLocation {
return ViewLocation.locations.get(value); return ViewLocation.locations.get(value);
} }
static readonly Explorer: ViewLocation = ViewLocation.register('workbench.view.explorer'); static readonly Explorer: ViewLocation = ViewLocation.register('workbench.view.explorer', false);
static readonly Debug: ViewLocation = ViewLocation.register('workbench.view.debug'); static readonly Debug: ViewLocation = ViewLocation.register('workbench.view.debug', false);
static readonly Extensions: ViewLocation = ViewLocation.register('workbench.view.extensions'); static readonly Extensions: ViewLocation = ViewLocation.register('workbench.view.extensions', false);
private constructor(private _id: string) { } private constructor(private _id: string, private _contributed: boolean) { }
get id(): string { return this._id; } get id(): string { return this._id; }
get contributed(): boolean { return this._contributed; }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册