提交 02a90f91 编写于 作者: A Alex Dima

Use URIs for contributed activity bar icons

上级 b43476e6
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { join } from 'vs/base/common/paths'; import * as resources from 'vs/base/common/resources';
import { createCSSRule } from 'vs/base/browser/dom'; import { createCSSRule } from 'vs/base/browser/dom';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
...@@ -29,6 +29,7 @@ import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWo ...@@ -29,6 +29,7 @@ import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWo
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
import URI from 'vs/base/common/uri';
export interface IUserFriendlyViewsContainerDescriptor { export interface IUserFriendlyViewsContainerDescriptor {
id: string; id: string;
...@@ -36,6 +37,12 @@ export interface IUserFriendlyViewsContainerDescriptor { ...@@ -36,6 +37,12 @@ export interface IUserFriendlyViewsContainerDescriptor {
icon: string; icon: string;
} }
export interface IUserFriendlyViewsContainerDescriptor2 {
id: string;
title: string;
icon: URI;
}
const viewsContainerSchema: IJSONSchema = { const viewsContainerSchema: IJSONSchema = {
type: 'object', type: 'object',
properties: { properties: {
...@@ -81,7 +88,7 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -81,7 +88,7 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
private registerTestViewContainer(): void { private registerTestViewContainer(): void {
const title = localize('test', "Test"); const title = localize('test', "Test");
const cssClass = `extensionViewlet-test`; const cssClass = `extensionViewlet-test`;
const icon = require.toUrl('./media/test.svg'); const icon = URI.parse(require.toUrl('./media/test.svg'));
this.registerCustomViewlet({ id: TEST_VIEW_CONTAINER_ID, title, icon }, TEST_VIEW_CONTAINER_ORDER, cssClass); this.registerCustomViewlet({ id: TEST_VIEW_CONTAINER_ID, title, icon }, TEST_VIEW_CONTAINER_ORDER, cssClass);
} }
...@@ -135,13 +142,12 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -135,13 +142,12 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
private registerCustomViewContainers(containers: IUserFriendlyViewsContainerDescriptor[], extension: IExtensionDescription) { private registerCustomViewContainers(containers: IUserFriendlyViewsContainerDescriptor[], extension: IExtensionDescription) {
containers.forEach((descriptor, index) => { containers.forEach((descriptor, index) => {
const cssClass = `extensionViewlet-${descriptor.id}`; const cssClass = `extensionViewlet-${descriptor.id}`;
// TODO@extensionLocation const icon = resources.joinPath(extension.extensionLocation, descriptor.icon);
const icon = join(extension.extensionLocation.fsPath, descriptor.icon);
this.registerCustomViewlet({ id: `workbench.view.extension.${descriptor.id}`, title: descriptor.title, icon }, TEST_VIEW_CONTAINER_ORDER + index + 1, cssClass); this.registerCustomViewlet({ id: `workbench.view.extension.${descriptor.id}`, title: descriptor.title, icon }, TEST_VIEW_CONTAINER_ORDER + index + 1, cssClass);
}); });
} }
private registerCustomViewlet(descriptor: IUserFriendlyViewsContainerDescriptor, order: number, cssClass: string): void { private registerCustomViewlet(descriptor: IUserFriendlyViewsContainerDescriptor2, order: number, cssClass: string): void {
const viewContainersRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry); const viewContainersRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const viewletRegistry = Registry.as<ViewletRegistry>(ViewletExtensions.Viewlets); const viewletRegistry = Registry.as<ViewletRegistry>(ViewletExtensions.Viewlets);
const id = descriptor.id; const id = descriptor.id;
......
...@@ -33,10 +33,11 @@ import { ViewletDescriptor } from 'vs/workbench/browser/viewlet'; ...@@ -33,10 +33,11 @@ import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import URI from 'vs/base/common/uri';
interface IPlaceholderComposite { interface IPlaceholderComposite {
id: string; id: string;
iconUrl: string; iconUrl: URI;
} }
export class ActivitybarPart extends Part { export class ActivitybarPart extends Part {
...@@ -93,7 +94,19 @@ export class ActivitybarPart extends Part { ...@@ -93,7 +94,19 @@ export class ActivitybarPart extends Part {
overflowActionSize: ActivitybarPart.ACTION_HEIGHT overflowActionSize: ActivitybarPart.ACTION_HEIGHT
}); });
const previousState = this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEWLETS, StorageScope.GLOBAL, void 0); const previousState = this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEWLETS, StorageScope.GLOBAL, void 0);
this.placeholderComposites = previousState ? JSON.parse(previousState) : this.compositeBar.getCompositesFromStorage().map(id => (<IPlaceholderComposite>{ id, iconUrl: void 0 })); if (previousState) {
let parsedPreviousState = <IPlaceholderComposite[]>JSON.parse(previousState);
parsedPreviousState.forEach((s) => {
if (typeof s.iconUrl === 'object') {
s.iconUrl = URI.revive(s.iconUrl);
} else {
s.iconUrl = void 0;
}
});
this.placeholderComposites = parsedPreviousState;
} else {
this.placeholderComposites = this.compositeBar.getCompositesFromStorage().map(id => (<IPlaceholderComposite>{ id, iconUrl: void 0 }));
}
this.registerListeners(); this.registerListeners();
this.updateCompositebar(); this.updateCompositebar();
...@@ -351,7 +364,7 @@ export class ActivitybarPart extends Part { ...@@ -351,7 +364,7 @@ export class ActivitybarPart extends Part {
class PlaceHolderViewletActivityAction extends ViewletActivityAction { class PlaceHolderViewletActivityAction extends ViewletActivityAction {
constructor( constructor(
id: string, iconUrl: string, id: string, iconUrl: URI,
@IViewletService viewletService: IViewletService, @IViewletService viewletService: IViewletService,
@IPartService partService: IPartService, @IPartService partService: IPartService,
@ITelemetryService telemetryService: ITelemetryService @ITelemetryService telemetryService: ITelemetryService
......
...@@ -18,6 +18,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; ...@@ -18,6 +18,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IPartService } from 'vs/workbench/services/part/common/partService'; import { IPartService } from 'vs/workbench/services/part/common/partService';
import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
import URI from 'vs/base/common/uri';
export abstract class Viewlet extends Composite implements IViewlet { export abstract class Viewlet extends Composite implements IViewlet {
...@@ -54,12 +55,12 @@ export class ViewletDescriptor extends CompositeDescriptor<Viewlet> { ...@@ -54,12 +55,12 @@ export class ViewletDescriptor extends CompositeDescriptor<Viewlet> {
name: string, name: string,
cssClass?: string, cssClass?: string,
order?: number, order?: number,
private _iconUrl?: string private _iconUrl?: URI
) { ) {
super(ctor, id, name, cssClass, order, id); super(ctor, id, name, cssClass, order, id);
} }
public get iconUrl(): string { public get iconUrl(): URI {
return this._iconUrl; return this._iconUrl;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册