提交 987073d1 编写于 作者: R Rob Lourens

Settings search - show tab result counts for folder settings

上级 7941b1b0
......@@ -382,7 +382,7 @@ class PreferencesRenderersController extends Disposable {
private _settingsNavigator: SettingsNavigator;
private _remoteFilterInProgress: TPromise<any>;
private _prefsModelsForSearch = new Map<SettingsTarget, ISettingsEditorModel>();
private _prefsModelsForSearch = new Map<string, ISettingsEditorModel>();
private _currentLocalSearchProvider: ISearchProvider;
private _currentRemoteSearchProvider: ISearchProvider;
......@@ -396,6 +396,7 @@ class PreferencesRenderersController extends Disposable {
@IPreferencesSearchService private preferencesSearchService: IPreferencesSearchService,
@ITelemetryService private telemetryService: ITelemetryService,
@IPreferencesService private preferencesService: IPreferencesService,
@IWorkspaceContextService private workspaceContextService: IWorkspaceContextService
) {
super();
}
......@@ -473,17 +474,12 @@ class PreferencesRenderersController extends Disposable {
const filterPs = [];
if (!editableContentOnly) {
filterPs.push(this._filterOrSearchPreferences(query, this.defaultPreferencesRenderer, searchProvider, groupId, groupLabel, groupOrder));
filterPs.push(
this._filterOrSearchPreferences(query, this.defaultPreferencesRenderer, searchProvider, groupId, groupLabel, groupOrder));
}
filterPs.push(this._filterOrSearchPreferences(query, this.editablePreferencesRenderer, searchProvider, groupId, groupLabel, groupOrder));
const something = [
this.searchSettingsTarget(searchProvider, ConfigurationTarget.WORKSPACE, groupId, groupLabel, groupOrder),
this.searchSettingsTarget(searchProvider, ConfigurationTarget.USER, groupId, groupLabel, groupOrder)
];
// for (const folder of this.workspaceContextService.getWorkspace().folders) {
// const folderSettingsResource = this.preferencesService.getFolderSettingsResource(folder.uri);
filterPs.push(this._filterOrSearchPreferences(query, this.editablePreferencesRenderer, searchProvider, groupId, groupLabel, groupOrder),
this.updateSettingsTargetCounts(query, searchProvider, groupId, groupLabel, groupOrder));
return TPromise.join(filterPs).then(results => {
const [defaultFilterResult, editableFilterResult] = results;
......@@ -498,6 +494,21 @@ class PreferencesRenderersController extends Disposable {
});
}
private updateSettingsTargetCounts(query: string, searchProvider: ISearchProvider, groupId: string, groupLabel: string, groupOrder: number): TPromise<void> {
const searchPs = [
this.searchSettingsTarget(searchProvider, ConfigurationTarget.WORKSPACE, groupId, groupLabel, groupOrder),
this.searchSettingsTarget(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));
}
return TPromise.join(searchPs).then(() => { });
}
private searchSettingsTarget(provider: ISearchProvider, target: SettingsTarget, groupId: string, groupLabel: string, groupOrder: number): TPromise<void> {
return this.getPreferencesEditorModel(target).then(model => {
return this._filterOrSearchPreferencesModel('', <ISettingsEditorModel>model, provider, groupId, groupLabel, groupOrder);
......@@ -518,12 +529,13 @@ class PreferencesRenderersController extends Disposable {
target === ConfigurationTarget.WORKSPACE ? this.preferencesService.workspaceSettingsResource :
target;
if (!this._prefsModelsForSearch.has(target)) {
const model = await this.preferencesService.createPreferencesEditorModel(resource);
this._prefsModelsForSearch.set(target, <ISettingsEditorModel>model);
const targetKey = resource.toString();
if (!this._prefsModelsForSearch.has(targetKey)) {
const model = this._register(await this.preferencesService.createPreferencesEditorModel(resource));
this._prefsModelsForSearch.set(targetKey, <ISettingsEditorModel>model);
}
return this._prefsModelsForSearch.get(target);
return this._prefsModelsForSearch.get(targetKey);
}
focusNextPreference(forward: boolean = true) {
......@@ -549,15 +561,15 @@ class PreferencesRenderersController extends Disposable {
}
private _filterOrSearchPreferences(filter: string, preferencesRenderer: IPreferencesRenderer<ISetting>, provider: ISearchProvider, groupId: string, groupLabel: string, groupOrder: number): TPromise<IFilterResult> {
if (preferencesRenderer) {
const model = <ISettingsEditorModel>preferencesRenderer.preferencesModel;
return this._filterOrSearchPreferencesModel(filter, model, provider, groupId, groupLabel, groupOrder).then(filterResult => {
preferencesRenderer.filterPreferences(filterResult);
return filterResult;
});
if (!preferencesRenderer) {
return TPromise.wrap(null);
}
return TPromise.wrap(null);
const model = <ISettingsEditorModel>preferencesRenderer.preferencesModel;
return this._filterOrSearchPreferencesModel(filter, model, provider, groupId, groupLabel, groupOrder).then(filterResult => {
preferencesRenderer.filterPreferences(filterResult);
return filterResult;
});
}
private _filterOrSearchPreferencesModel(filter: string, model: ISettingsEditorModel, provider: ISearchProvider, groupId: string, groupLabel: string, groupOrder: number): TPromise<IFilterResult> {
......
......@@ -281,6 +281,7 @@ export class SettingsGroupTitleWidget extends Widget implements IViewZone {
export class FolderSettingsActionItem extends BaseActionItem {
private _folder: IWorkspaceFolder;
private _count: number;
private container: HTMLElement;
private anchorElement: HTMLElement;
......@@ -310,6 +311,11 @@ export class FolderSettingsActionItem extends BaseActionItem {
this.update();
}
public setCount(value: number): void {
this._count = value;
this.update();
}
public render(container: HTMLElement): void {
this.builder = $(container);
......@@ -381,10 +387,18 @@ export class FolderSettingsActionItem extends BaseActionItem {
if (this._folder) {
this.labelElement.textContent = this._folder.name;
this.anchorElement.title = this._folder.name;
this.detailsElement.textContent = this._action.label;
let detailsText = this._action.label;
if (this._count) {
detailsText += ` (${this._count})`;
}
this.detailsElement.textContent = detailsText;
DOM.toggleClass(this.dropDownElement, 'hide', workspace.folders.length === 1 || !this._action.checked);
} else {
this.labelElement.textContent = this._action.label;
let labelText = this._action.label;
if (this._count) {
labelText += ` (${this._count})`;
}
this.labelElement.textContent = labelText;
this.detailsElement.textContent = '';
this.anchorElement.title = this._action.label;
DOM.removeClass(this.dropDownElement, 'hide');
......@@ -436,6 +450,7 @@ export class SettingsTargetsWidget extends Widget {
private userSettings: Action;
private workspaceSettings: Action;
private folderSettings: FolderSettingsActionItem;
private folderSettingCounts = new Map<string, number>();
private _settingsTarget: SettingsTarget;
......@@ -507,6 +522,12 @@ 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);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册