diff --git a/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css b/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css index ad311e185dc8dad4f05a64ed1aac383d70588f16..996becb45fa5ffdcec01fb73a51ab6561c0a3a79 100644 --- a/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css +++ b/src/vs/workbench/parts/preferences/browser/media/settingsEditor2.css @@ -126,6 +126,11 @@ width: 200px; } +.settings-editor > .settings-body .settings-toc-container .monaco-tree-row .settings-toc-entry { + overflow: hidden; + text-overflow: ellipsis; +} + .settings-editor > .settings-body .settings-tree-container { flex: 1; border-spacing: 0; diff --git a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts index 943b6e1f350229db623331c5e43ecf81993d9ff5..c4826ba9c07bbb65ae0228e8c7855bfd7a476bd5 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts @@ -239,8 +239,10 @@ export class SettingsEditor2 extends BaseEditor { }); this._register(this.tocTree.onDidChangeSelection(e => { - const element = this.settingsTreeModel.getElementById(e.selection[0] && e.selection[0].id); - this.settingsTree.reveal(element, 0); + if (this.settingsTreeModel) { + const element = this.settingsTreeModel.getElementById(e.selection[0] && e.selection[0].id); + this.settingsTree.reveal(element, 0); + } })); } diff --git a/src/vs/workbench/parts/preferences/browser/settingsTree.ts b/src/vs/workbench/parts/preferences/browser/settingsTree.ts index 0cff11828d8289d946410c1854a18fc6effb3344..51ff7006be0998bffec92e388a35a854394ac60f 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsTree.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsTree.ts @@ -47,7 +47,7 @@ registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => { export abstract class SettingsTreeElement { id: string; - parent: SettingsTreeElement; + parent: any; // SearchResultModel or group element... TODO search should be more similar to the normal case } export class SettingsTreeGroupElement extends SettingsTreeElement { @@ -108,38 +108,43 @@ export class SettingsTreeModel { } private createSettingsTreeSettingElement(setting: ISetting, parent: SettingsTreeGroupElement): SettingsTreeSettingElement { - const element = new SettingsTreeSettingElement(); - element.id = setting.key; - element.parent = parent; + const element = createSettingsTreeSettingElement(setting, parent, this.viewState.settingsTarget, this.configurationService); + this._treeElementsById.set(element.id, element); + return element; + } +} - const { isConfigured, inspected, targetSelector } = inspectSetting(setting.key, this.viewState.settingsTarget, this.configurationService); +function createSettingsTreeSettingElement(setting: ISetting, parent: any, settingsTarget: SettingsTarget, configurationService: IConfigurationService): SettingsTreeSettingElement { + const element = new SettingsTreeSettingElement(); + element.id = setting.key; + element.parent = parent; - const displayValue = isConfigured ? inspected[targetSelector] : inspected.default; - const overriddenScopeList = []; - if (targetSelector === 'user' && typeof inspected.workspace !== 'undefined') { - overriddenScopeList.push(localize('workspace', "Workspace")); - } + const { isConfigured, inspected, targetSelector } = inspectSetting(setting.key, settingsTarget, configurationService); - if (targetSelector === 'workspace' && typeof inspected.user !== 'undefined') { - overriddenScopeList.push(localize('user', "User")); - } + const displayValue = isConfigured ? inspected[targetSelector] : inspected.default; + const overriddenScopeList = []; + if (targetSelector === 'user' && typeof inspected.workspace !== 'undefined') { + overriddenScopeList.push(localize('workspace', "Workspace")); + } - const displayKeyFormat = settingKeyToDisplayFormat(setting.key, parent.id); - element.setting = setting; - element.displayLabel = displayKeyFormat.label; - element.displayCategory = displayKeyFormat.category; - element.isExpanded = false; + if (targetSelector === 'workspace' && typeof inspected.user !== 'undefined') { + overriddenScopeList.push(localize('user', "User")); + } - element.value = displayValue; - element.isConfigured = isConfigured; - element.overriddenScopeList = overriddenScopeList; - element.description = setting.description.join('\n'); - element.enum = setting.enum; - element.valueType = setting.type; + const displayKeyFormat = settingKeyToDisplayFormat(setting.key, parent.id); + element.setting = setting; + element.displayLabel = displayKeyFormat.label; + element.displayCategory = displayKeyFormat.category; + element.isExpanded = false; - this._treeElementsById.set(element.id, element); - return element; - } + element.value = displayValue; + element.isConfigured = isConfigured; + element.overriddenScopeList = overriddenScopeList; + element.description = setting.description.join('\n'); + element.enum = setting.enum; + element.valueType = setting.type; + + return element; } function inspectSetting(key: string, target: SettingsTarget, configurationService: IConfigurationService): { isConfigured: boolean, inspected: any, targetSelector: string } { @@ -214,6 +219,12 @@ function getFlatSettings(settingsGroups: ISettingsGroup[]) { export class SettingsDataSource implements IDataSource { + constructor( + private viewState: ISettingsEditorViewState, + @IConfigurationService private configurationService: IConfigurationService + ) { + } + getId(tree: ITree, element: SettingsTreeElement): string { return element.id; } @@ -232,7 +243,7 @@ export class SettingsDataSource implements IDataSource { private getSearchResultChildren(searchResult: SearchResultModel): SettingsTreeSettingElement[] { return searchResult.getFlatSettings() - .map(s => this.getSettingElement(s, searchResult, 'searchResult')); + .map(s => createSettingsTreeSettingElement(s, searchResult, this.viewState.settingsTarget, this.configurationService)); } getChildren(tree: ITree, element: SettingsTreeElement): TPromise {