From 02a90f9167c9abd4efdded8a5665958164c74046 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 14 Jun 2018 12:01:17 +0200 Subject: [PATCH] Use URIs for contributed activity bar icons --- .../browser/viewsContainersExtensionPoint.ts | 16 +++++++++++----- .../parts/activitybar/activitybarPart.ts | 19 ++++++++++++++++--- src/vs/workbench/browser/viewlet.ts | 5 +++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/api/browser/viewsContainersExtensionPoint.ts b/src/vs/workbench/api/browser/viewsContainersExtensionPoint.ts index 45a415522da..56c7e90b3f2 100644 --- a/src/vs/workbench/api/browser/viewsContainersExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsContainersExtensionPoint.ts @@ -7,7 +7,7 @@ import { localize } from 'vs/nls'; import { IJSONSchema } from 'vs/base/common/jsonSchema'; 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 { Registry } from 'vs/platform/registry/common/platform'; import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; @@ -29,6 +29,7 @@ import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWo import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; +import URI from 'vs/base/common/uri'; export interface IUserFriendlyViewsContainerDescriptor { id: string; @@ -36,6 +37,12 @@ export interface IUserFriendlyViewsContainerDescriptor { icon: string; } +export interface IUserFriendlyViewsContainerDescriptor2 { + id: string; + title: string; + icon: URI; +} + const viewsContainerSchema: IJSONSchema = { type: 'object', properties: { @@ -81,7 +88,7 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { private registerTestViewContainer(): void { const title = localize('test', "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); } @@ -135,13 +142,12 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { private registerCustomViewContainers(containers: IUserFriendlyViewsContainerDescriptor[], extension: IExtensionDescription) { containers.forEach((descriptor, index) => { const cssClass = `extensionViewlet-${descriptor.id}`; - // TODO@extensionLocation - const icon = join(extension.extensionLocation.fsPath, descriptor.icon); + const icon = resources.joinPath(extension.extensionLocation, descriptor.icon); 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(ViewContainerExtensions.ViewContainersRegistry); const viewletRegistry = Registry.as(ViewletExtensions.Viewlets); const id = descriptor.id; diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index d95518e088f..e323439ee9a 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -33,10 +33,11 @@ import { ViewletDescriptor } from 'vs/workbench/browser/viewlet'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import URI from 'vs/base/common/uri'; interface IPlaceholderComposite { id: string; - iconUrl: string; + iconUrl: URI; } export class ActivitybarPart extends Part { @@ -93,7 +94,19 @@ export class ActivitybarPart extends Part { overflowActionSize: ActivitybarPart.ACTION_HEIGHT }); const previousState = this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEWLETS, StorageScope.GLOBAL, void 0); - this.placeholderComposites = previousState ? JSON.parse(previousState) : this.compositeBar.getCompositesFromStorage().map(id => ({ id, iconUrl: void 0 })); + if (previousState) { + let parsedPreviousState = 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 => ({ id, iconUrl: void 0 })); + } this.registerListeners(); this.updateCompositebar(); @@ -351,7 +364,7 @@ export class ActivitybarPart extends Part { class PlaceHolderViewletActivityAction extends ViewletActivityAction { constructor( - id: string, iconUrl: string, + id: string, iconUrl: URI, @IViewletService viewletService: IViewletService, @IPartService partService: IPartService, @ITelemetryService telemetryService: ITelemetryService diff --git a/src/vs/workbench/browser/viewlet.ts b/src/vs/workbench/browser/viewlet.ts index b67b491a4b1..90e103c10bb 100644 --- a/src/vs/workbench/browser/viewlet.ts +++ b/src/vs/workbench/browser/viewlet.ts @@ -18,6 +18,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IPartService } from 'vs/workbench/services/part/common/partService'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; +import URI from 'vs/base/common/uri'; export abstract class Viewlet extends Composite implements IViewlet { @@ -54,12 +55,12 @@ export class ViewletDescriptor extends CompositeDescriptor { name: string, cssClass?: string, order?: number, - private _iconUrl?: string + private _iconUrl?: URI ) { super(ctor, id, name, cssClass, order, id); } - public get iconUrl(): string { + public get iconUrl(): URI { return this._iconUrl; } } -- GitLab