From 9dbb46e890c62e2b9247183d463b77b2e9978bf5 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 29 Nov 2019 14:50:28 +0100 Subject: [PATCH] support ThemeIcon in custom view --- src/vs/platform/theme/common/themeService.ts | 4 +-- .../browser/parts/views/customView.ts | 36 ++++++++++--------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/vs/platform/theme/common/themeService.ts b/src/vs/platform/theme/common/themeService.ts index bd010bf1848..7fb9379af6c 100644 --- a/src/vs/platform/theme/common/themeService.ts +++ b/src/vs/platform/theme/common/themeService.ts @@ -45,7 +45,7 @@ export namespace ThemeIcon { return { id: owner + name }; } - const _regexAsClassName = /^codicon\/([a-z-]+)(~[a-z]+)?$/i; + const _regexAsClassName = /^(codicon\/)?([a-z-]+)(~[a-z]+)?$/i; export function asClassName(icon: ThemeIcon): string | undefined { // todo@martin,joh -> this should go into the ThemeService @@ -53,7 +53,7 @@ export namespace ThemeIcon { if (!match) { return undefined; } - const [, name, modifier] = match; + let [, , name, modifier] = match; let className = `codicon codicon-${name}`; if (modifier) { className += ` ${modifier.substr(1)}`; diff --git a/src/vs/workbench/browser/parts/views/customView.ts b/src/vs/workbench/browser/parts/views/customView.ts index 8b08e2fc93a..73a8fa54525 100644 --- a/src/vs/workbench/browser/parts/views/customView.ts +++ b/src/vs/workbench/browser/parts/views/customView.ts @@ -26,7 +26,7 @@ import { ResourceLabels, IResourceLabel } from 'vs/workbench/browser/labels'; import { ActionBar, IActionViewItemProvider, ActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; import { URI } from 'vs/base/common/uri'; import { dirname, basename } from 'vs/base/common/resources'; -import { LIGHT, FileThemeIcon, FolderThemeIcon, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; +import { LIGHT, FileThemeIcon, FolderThemeIcon, registerThemingParticipant, ThemeIcon } from 'vs/platform/theme/common/themeService'; import { FileKind } from 'vs/platform/files/common/files'; import { WorkbenchAsyncDataTree, TreeResourceNavigator2 } from 'vs/platform/list/browser/listService'; import { ViewletPane, IViewletPaneOptions } from 'vs/workbench/browser/parts/views/paneViewlet'; @@ -40,7 +40,7 @@ import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list import { ITreeRenderer, ITreeNode, IAsyncDataSource, ITreeContextMenuEvent } from 'vs/base/browser/ui/tree/tree'; import { FuzzyScore, createMatches } from 'vs/base/common/filters'; import { CollapseAllAction } from 'vs/base/browser/ui/tree/treeDefaults'; -import { escape, isFalsyOrWhitespace } from 'vs/base/common/strings'; +import { isFalsyOrWhitespace } from 'vs/base/common/strings'; import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; export class CustomTreeViewPane extends ViewletPane { @@ -780,7 +780,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer('explorer.decorations'); templateData.resourceLabel.setResource({ name: label, description, resource: resource ? resource : URI.parse('missing:_icon_resource') }, { fileKind: this.getFileKind(node), title, hideIcon: !!iconUrl, fileDecorations, extraClasses: ['custom-view-tree-node-item-resourceLabel'], matches: matches ? matches : createMatches(element.filterData) }); } else { @@ -788,25 +788,19 @@ class TreeRenderer extends Disposable implements ITreeRenderer { - if (cls !== codicon && cls.indexOf('codicon-') === 0) { - list.remove(cls); + } else { + let iconClass: string | undefined; + if (node.themeIcon && !this.isFileKindThemeIcon(node.themeIcon)) { + iconClass = ThemeIcon.asClassName(node.themeIcon); } - }); - if (codicon) { - DOM.addClass(templateData.icon, codicon); + templateData.icon.className = iconClass ? `custom-view-tree-node-item-icon ${iconClass}` : ''; } - templateData.icon.style.backgroundImage = iconUrl && !codicon ? DOM.asCSSUrl(iconUrl) : ''; - templateData.actionBar.context = { $treeViewId: this.treeViewId, $treeItemHandle: node.handle }; templateData.actionBar.push(this.menus.getResourceActions(node), { icon: true, label: false }); if (this._actionRunner) { @@ -820,6 +814,14 @@ class TreeRenderer extends Disposable implements ITreeRenderer