diff --git a/src/vs/workbench/electron-browser/main.contribution.ts b/src/vs/workbench/electron-browser/main.contribution.ts index 8ff4d6a55bf2ea9dd4d10471a97dd96c8f577bd7..b5b9b6e9ba168e79074ee4abc946645cce382c62 100644 --- a/src/vs/workbench/electron-browser/main.contribution.ts +++ b/src/vs/workbench/electron-browser/main.contribution.ts @@ -306,6 +306,12 @@ configurationRegistry.registerConfiguration({ 'type': 'boolean', 'description': nls.localize('enableNaturalLanguageSettingsSearch', "Controls whether to enable the natural language search mode for settings."), 'default': true + }, + 'workbench.settings.settingsSearchTocBehavior': { + 'type': 'string', + 'enum': ['hide', 'filter', 'show'], + 'description': nls.localize('settingsSearchTocBehavior', "Controls the behavior of the settings editor TOC while searching."), + 'default': 'hide' } } }); diff --git a/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css b/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css index 856c4773c472cb7e550747bb6533435a2ea8bd75..67068eb9e6c64f244e6a8ab9ef9d5d66e78a01ab 100644 --- a/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css +++ b/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css @@ -101,7 +101,6 @@ .settings-editor > .settings-body { display: flex; margin: auto; - margin-top: 5px; max-width: 1000px; } @@ -115,7 +114,7 @@ } .search-mode .settings-toc-container { - /* display: none; */ + display: none; } .settings-editor > .settings-body .settings-toc-container .monaco-tree-row .settings-toc-entry { diff --git a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts index 4b47bd0ae70f080142234198f5af0cf866879ad6..826394a18ef8c3ae1973a51fe571912ef391adb4 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts @@ -468,7 +468,10 @@ export class SettingsEditor2 extends BaseEditor { } private toggleSearchMode(): void { - DOM.toggleClass(this.rootElement, 'search-mode', !!this.searchResultModel); + DOM.removeClass(this.rootElement, 'search-mode'); + if (this.configurationService.getValue('workbench.settings.settingsSearchTocBehavior') === 'hide') { + DOM.toggleClass(this.rootElement, 'search-mode', !!this.searchResultModel); + } } private onConfigUpdate(): TPromise { diff --git a/src/vs/workbench/parts/preferences/browser/tocTree.ts b/src/vs/workbench/parts/preferences/browser/tocTree.ts index 02148d1f2138577eeeb39b21aee14472890072f9..4892f4de1efc97e6d7055475b69df363e8c3093c 100644 --- a/src/vs/workbench/parts/preferences/browser/tocTree.ts +++ b/src/vs/workbench/parts/preferences/browser/tocTree.ts @@ -8,10 +8,12 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IDataSource, IRenderer, ITree } from 'vs/base/parts/tree/browser/tree'; import { SearchResultModel, SettingsTreeElement, SettingsTreeGroupElement, SettingsTreeSettingElement } from 'vs/workbench/parts/preferences/browser/settingsTree'; import { ISetting } from 'vs/workbench/services/preferences/common/preferences'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; const $ = DOM.$; export class TOCTreeModel { + private _currentSearchModel: SearchResultModel; private _settingsTreeRoot: SettingsTreeGroupElement; @@ -67,6 +69,11 @@ export class TOCTreeModel { export type TOCTreeElement = SettingsTreeGroupElement | TOCTreeModel; export class TOCDataSource implements IDataSource { + constructor( + @IConfigurationService private configService: IConfigurationService + ) { + } + getId(tree: ITree, element: SettingsTreeGroupElement): string { return element.id; } @@ -77,7 +84,18 @@ export class TOCDataSource implements IDataSource { } getChildren(tree: ITree, element: TOCTreeElement): TPromise { - return TPromise.as(element.children); + return TPromise.as(this._getChildren(element)); + } + + private _getChildren(element: TOCTreeElement): SettingsTreeElement[] { + if (this.configService.getValue('workbench.settings.settingsSearchTocBehavior') === 'filter') { + const children = element.children as SettingsTreeElement[]; // ???? + return children.filter(group => { + return (group).count !== 0; + }); + } + + return element.children; } getParent(tree: ITree, element: TOCTreeElement): TPromise { @@ -96,6 +114,11 @@ interface ITOCEntryTemplate { } export class TOCRenderer implements IRenderer { + constructor( + @IConfigurationService private configService: IConfigurationService + ) { + } + getHeight(tree: ITree, element: SettingsTreeElement): number { return 22; } @@ -115,7 +138,10 @@ export class TOCRenderer implements IRenderer { `${element.label} (${(element).count})` : element.label; - DOM.toggleClass(template.element, 'no-results', (element).count === 0); + if (this.configService.getValue('workbench.settings.settingsSearchTocBehavior') === 'show') { + DOM.toggleClass(template.element, 'no-results', (element).count === 0); + } + template.element.textContent = label; }