From 78ae98cce5a914bc0a9e58c52f2cae8d134cf86a Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Tue, 18 Jun 2019 12:54:37 +0200 Subject: [PATCH] tree.renderIndentGuides always --- src/vs/base/browser/ui/tree/abstractTree.ts | 21 +++++++++++++++------ src/vs/platform/list/browser/listService.ts | 13 +++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index c110d9b29a9..829b7fb131c 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -195,9 +195,15 @@ interface ITreeListTemplateData { readonly templateData: T; } +export enum RenderIndentGuides { + None = 'none', + OnHover = 'onHover', + Always = 'always' +} + interface ITreeRendererOptions { readonly indent?: number; - readonly renderIndentGuides?: boolean; + readonly renderIndentGuides?: RenderIndentGuides; } interface IRenderData { @@ -236,7 +242,7 @@ class TreeRenderer implements IListRenderer, IRenderData>(); private indent: number = TreeRenderer.DefaultIndent; - private _renderIndentGuides = false; + private _renderIndentGuides: RenderIndentGuides = RenderIndentGuides.None; private renderedIndentGuides = new SetMap, SVGLineElement>(); private activeParentNodes = new Set>(); private indentGuidesDisposable: IDisposable = Disposable.None; @@ -265,7 +271,7 @@ class TreeRenderer implements IListRenderer implements IListRenderer, templateData: ITreeListTemplateData, height: number): void { - if (!this._renderIndentGuides) { + if (this._renderIndentGuides === RenderIndentGuides.None) { clearNode(templateData.indent); return; } @@ -408,7 +414,7 @@ class TreeRenderer implements IListRenderer[]): void { - if (!this._renderIndentGuides) { + if (this._renderIndentGuides === RenderIndentGuides.None) { return; } @@ -1237,6 +1243,7 @@ export abstract class AbstractTree implements IDisposable } this.styleElement = createStyleSheet(this.view.getHTMLElement()); + toggleClass(this.getHTMLElement(), 'always', this._options.renderIndentGuides === RenderIndentGuides.Always); } updateOptions(optionsUpdate: IAbstractTreeOptionsUpdate = {}): void { @@ -1256,6 +1263,8 @@ export abstract class AbstractTree implements IDisposable } this._onDidUpdateOptions.fire(this._options); + + toggleClass(this.getHTMLElement(), 'always', this._options.renderIndentGuides === RenderIndentGuides.Always); } get options(): IAbstractTreeOptions { @@ -1341,7 +1350,7 @@ export abstract class AbstractTree implements IDisposable const content: string[] = []; if (styles.treeIndentGuidesStroke) { - content.push(`.monaco-list${suffix}:hover .monaco-tl-indent > svg > line { stroke: ${styles.treeIndentGuidesStroke.transparent(0.4)}; }`); + content.push(`.monaco-list${suffix}:hover .monaco-tl-indent > svg > line, .monaco-list${suffix}.always .monaco-tl-indent > svg > line { stroke: ${styles.treeIndentGuidesStroke.transparent(0.4)}; }`); content.push(`.monaco-list${suffix} .monaco-tl-indent > svg > line.active { stroke: ${styles.treeIndentGuidesStroke}; }`); } diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index 41c64f35cbd..8ee27a7c085 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -29,7 +29,7 @@ import { ObjectTree, IObjectTreeOptions } from 'vs/base/browser/ui/tree/objectTr import { ITreeEvent, ITreeRenderer, IAsyncDataSource, IDataSource, ITreeMouseEvent } from 'vs/base/browser/ui/tree/tree'; import { AsyncDataTree, IAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree'; import { DataTree, IDataTreeOptions } from 'vs/base/browser/ui/tree/dataTree'; -import { IKeyboardNavigationEventFilter, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree'; +import { IKeyboardNavigationEventFilter, IAbstractTreeOptions, RenderIndentGuides } from 'vs/base/browser/ui/tree/abstractTree'; import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; export type ListWidget = List | PagedList | ITree | ObjectTree | DataTree | AsyncDataTree; @@ -898,7 +898,7 @@ function workbenchTreeDataPreamble( ...computeStyles(themeService.getTheme(), defaultListStyles), ...workbenchListOptions, indent: configurationService.getValue(treeIndentKey), - renderIndentGuides: configurationService.getValue(treeRenderIndentGuidesKey), + renderIndentGuides: configurationService.getValue(treeRenderIndentGuidesKey), automaticKeyboardNavigation: getAutomaticKeyboardNavigation(), simpleKeyboardNavigation: keyboardNavigation === 'simple', filterOnType: keyboardNavigation === 'filter', @@ -980,7 +980,7 @@ class WorkbenchTreeInternals { tree.updateOptions({ indent }); } if (e.affectsConfiguration(treeRenderIndentGuidesKey)) { - const renderIndentGuides = configurationService.getValue(treeRenderIndentGuidesKey); + const renderIndentGuides = configurationService.getValue(treeRenderIndentGuidesKey); tree.updateOptions({ renderIndentGuides }); } if (e.affectsConfiguration(keyboardNavigationSettingKey)) { @@ -1060,9 +1060,10 @@ configurationRegistry.registerConfiguration({ 'description': localize('tree indent setting', "Controls tree indentation in pixels.") }, [treeRenderIndentGuidesKey]: { - type: 'boolean', - default: false, - 'description': localize('render tree indent guides', "Controls whether the tree should render indent guides.") + type: 'string', + enum: ['none', 'onHover', 'always'], + default: 'none', + description: localize('render tree indent guides', "Controls whether the tree should render indent guides.") }, [keyboardNavigationSettingKey]: { 'type': 'string', -- GitLab