diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index 09772b8958be1e82e8279778f56fe6026d9f25a2..90af8b7b47ed472076d3e16cb340bf5f4e14f848 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -488,26 +488,27 @@ class PreferencesRenderersController extends Disposable { } private searchAllSettingsTargets(query: string, searchProvider: ISearchProvider, groupId: string, groupLabel: string, groupOrder: number): TPromise { - if (!query) { - // Don't open the other settings targets when query is empty - return TPromise.wrap(null); - } - const searchPs = [ - this.searchSettingsTarget(searchProvider, ConfigurationTarget.WORKSPACE, groupId, groupLabel, groupOrder), - this.searchSettingsTarget(searchProvider, ConfigurationTarget.USER, groupId, groupLabel, groupOrder) + this.searchSettingsTarget(query, searchProvider, ConfigurationTarget.WORKSPACE, groupId, groupLabel, groupOrder), + this.searchSettingsTarget(query, searchProvider, ConfigurationTarget.USER, groupId, groupLabel, groupOrder) ]; for (const folder of this.workspaceContextService.getWorkspace().folders) { const folderSettingsResource = this.preferencesService.getFolderSettingsResource(folder.uri); - searchPs.push(this.searchSettingsTarget(searchProvider, folderSettingsResource, groupId, groupLabel, groupOrder)); + searchPs.push(this.searchSettingsTarget(query, searchProvider, folderSettingsResource, groupId, groupLabel, groupOrder)); } return TPromise.join(searchPs).then(() => { }); } - private searchSettingsTarget(provider: ISearchProvider, target: SettingsTarget, groupId: string, groupLabel: string, groupOrder: number): TPromise { + private searchSettingsTarget(query: string, provider: ISearchProvider, target: SettingsTarget, groupId: string, groupLabel: string, groupOrder: number): TPromise { + if (!query) { + // Don't open the other settings targets when query is empty + this._onDidFilterResultsCountChange.fire({ target, count: 0 }); + return TPromise.wrap(null); + } + return this.getPreferencesEditorModel(target).then(model => { return this._filterOrSearchPreferencesModel('', model, provider, groupId, groupLabel, groupOrder); }).then(result => { diff --git a/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts b/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts index 54e0f675b06089535ee904416e5106a33f5f24ad..ca16ad965d45e66c9b76cda3b187242627b921fd 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts @@ -281,7 +281,7 @@ export class SettingsGroupTitleWidget extends Widget implements IViewZone { export class FolderSettingsActionItem extends BaseActionItem { private _folder: IWorkspaceFolder; - private _count: number; + private _folderSettingCounts = new Map(); private container: HTMLElement; private anchorElement: HTMLElement; @@ -311,8 +311,9 @@ export class FolderSettingsActionItem extends BaseActionItem { this.update(); } - public setCount(value: number): void { - this._count = value; + public setCount(settingsTarget: URI, count: number): void { + const folder = this.contextService.getWorkspaceFolder(settingsTarget).uri; + this._folderSettingCounts.set(folder.toString(), count); this.update(); } @@ -383,21 +384,18 @@ export class FolderSettingsActionItem extends BaseActionItem { } private update(): void { + let total = 0; + this._folderSettingCounts.forEach(n => total += n); + const workspace = this.contextService.getWorkspace(); if (this._folder) { this.labelElement.textContent = this._folder.name; this.anchorElement.title = this._folder.name; - let detailsText = this._action.label; - if (this._count) { - detailsText += ` (${this._count})`; - } + const detailsText = this.labelWithCount(this._action.label, total); this.detailsElement.textContent = detailsText; DOM.toggleClass(this.dropDownElement, 'hide', workspace.folders.length === 1 || !this._action.checked); } else { - let labelText = this._action.label; - if (this._count) { - labelText += ` (${this._count})`; - } + const labelText = this.labelWithCount(this._action.label, total); this.labelElement.textContent = labelText; this.detailsElement.textContent = ''; this.anchorElement.title = this._action.label; @@ -424,9 +422,10 @@ export class FolderSettingsActionItem extends BaseActionItem { if (this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE && workspaceFolders.length > 0) { actions.push(new Separator()); actions.push(...workspaceFolders.map((folder, index) => { + const folderCount = this._folderSettingCounts.get(folder.uri.toString()); return { id: 'folderSettingsTarget' + index, - label: folder.name, + label: this.labelWithCount(folder.name, folderCount), checked: this.folder && this.folder.uri.toString() === folder.uri.toString(), enabled: true, run: () => this._action.run(folder) @@ -436,6 +435,15 @@ export class FolderSettingsActionItem extends BaseActionItem { return actions; } + private labelWithCount(label: string, count: number | undefined): string { + // Append the count if it's >0 and not undefined + if (count) { + label += ` (${count})`; + } + + return label; + } + public dispose(): void { dispose(this.disposables); super.dispose(); @@ -450,7 +458,6 @@ export class SettingsTargetsWidget extends Widget { private userSettings: Action; private workspaceSettings: Action; private folderSettings: FolderSettingsActionItem; - private folderSettingCounts = new Map(); private _settingsTarget: SettingsTarget; @@ -523,11 +530,7 @@ export class SettingsTargetsWidget extends Widget { this.userSettings.label = label; } else if (settingsTarget instanceof URI) { - this.folderSettingCounts.set(settingsTarget.toString(), count); - - let total = 0; - this.folderSettingCounts.forEach(count => total += count); - this.folderSettings.setCount(total); + this.folderSettings.setCount(settingsTarget, count); } }