mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-17 09:23:32 +01:00
Settings search - show individual Folder settings counts in dropdown
This commit is contained in:
@@ -488,26 +488,27 @@ class PreferencesRenderersController extends Disposable {
|
||||
}
|
||||
|
||||
private searchAllSettingsTargets(query: string, searchProvider: ISearchProvider, groupId: string, groupLabel: string, groupOrder: number): TPromise<void> {
|
||||
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<void> {
|
||||
private searchSettingsTarget(query: string, provider: ISearchProvider, target: SettingsTarget, groupId: string, groupLabel: string, groupOrder: number): TPromise<void> {
|
||||
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('', <ISettingsEditorModel>model, provider, groupId, groupLabel, groupOrder);
|
||||
}).then(result => {
|
||||
|
||||
@@ -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<string, number>();
|
||||
|
||||
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 <IAction>{
|
||||
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<string, number>();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user