Skip to content

Commit 7299d52

Browse files
committed
Settings editor as tree - Fix "show all settings" button and cleanup
1 parent 304b0ab commit 7299d52

2 files changed

Lines changed: 27 additions & 54 deletions

File tree

src/vs/workbench/parts/preferences/browser/settingsEditor2.ts

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,30 @@
55

66
import * as DOM from 'vs/base/browser/dom';
77
import { Button } from 'vs/base/browser/ui/button/button';
8-
import { IAction } from 'vs/base/common/actions';
98
import * as arrays from 'vs/base/common/arrays';
109
import { Delayer, ThrottledDelayer } from 'vs/base/common/async';
1110
import { Color } from 'vs/base/common/color';
1211
import { getErrorMessage, isPromiseCanceledError } from 'vs/base/common/errors';
12+
import { KeyCode } from 'vs/base/common/keyCodes';
1313
import { TPromise } from 'vs/base/common/winjs.base';
1414
import 'vs/css!./media/settingsEditor2';
1515
import { localize } from 'vs/nls';
1616
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
17-
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
18-
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
1917
import { IEditor } from 'vs/platform/editor/common/editor';
2018
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
21-
import { WorkbenchList, WorkbenchTree } from 'vs/platform/list/browser/listService';
19+
import { WorkbenchTree } from 'vs/platform/list/browser/listService';
2220
import { ILogService } from 'vs/platform/log/common/log';
2321
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
24-
import { registerColor } from 'vs/platform/theme/common/colorRegistry';
25-
import { attachButtonStyler, attachInputBoxStyler, attachSelectBoxStyler, attachStyler } from 'vs/platform/theme/common/styler';
26-
import { IThemeService, registerThemingParticipant, ICssStyleCollector, ITheme } from 'vs/platform/theme/common/themeService';
22+
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
23+
import { IThemeService } from 'vs/platform/theme/common/themeService';
2724
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
2825
import { EditorOptions } from 'vs/workbench/common/editor';
2926
import { SearchWidget, SettingsTarget, SettingsTargetsWidget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets';
30-
import { IPreferencesService, ISearchResult, ISetting, ISettingsEditorModel, ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences';
27+
import { ISettingsEditorViewState, SearchResultIdx, SearchResultModel, SettingsAccessibilityProvider, SettingsDataSource, SettingsRenderer, SettingsTreeController, SettingsTreeFilter, TreeElement, TreeItemType } from 'vs/workbench/parts/preferences/browser/settingsTree';
28+
import { IPreferencesSearchService, ISearchProvider } from 'vs/workbench/parts/preferences/common/preferences';
29+
import { IPreferencesService, ISearchResult, ISettingsEditorModel } from 'vs/workbench/services/preferences/common/preferences';
3130
import { SettingsEditor2Input } from 'vs/workbench/services/preferences/common/preferencesEditorInput';
3231
import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels';
33-
import { IPreferencesSearchService, ISearchProvider } from 'vs/workbench/parts/preferences/common/preferences';
34-
import { KeyCode } from 'vs/base/common/keyCodes';
35-
import { SettingsRenderer, SettingsDataSource, SettingsTreeController, SettingsAccessibilityProvider, TreeElement, TreeItemType, ISettingsEditorViewState, SearchResultModel, SearchResultIdx, SettingsTreeFilter } from 'vs/workbench/parts/preferences/browser/settingsTree';
3632

3733
const $ = DOM.$;
3834

@@ -52,17 +48,11 @@ export class SettingsEditor2 extends BaseEditor {
5248
private settingsTree: WorkbenchTree;
5349
private treeDataSource: SettingsDataSource;
5450

55-
private dimension: DOM.Dimension;
56-
private searchFocusContextKey: IContextKey<boolean>;
57-
5851
private delayedModifyLogging: Delayer<void>;
5952
private delayedFilterLogging: Delayer<void>;
6053
private localSearchDelayer: Delayer<void>;
6154
private remoteSearchThrottle: ThrottledDelayer<void>;
6255

63-
private currentLocalSearchProvider: ISearchProvider;
64-
private currentRemoteSearchProvider: ISearchProvider;
65-
6656
private pendingSettingModifiedReport: { key: string, value: any };
6757

6858
private focusedElement: TreeElement;
@@ -74,7 +64,6 @@ export class SettingsEditor2 extends BaseEditor {
7464
@ITelemetryService telemetryService: ITelemetryService,
7565
@IConfigurationService private configurationService: IConfigurationService,
7666
@IThemeService themeService: IThemeService,
77-
@IContextMenuService contextMenuService: IContextMenuService,
7867
@IPreferencesService private preferencesService: IPreferencesService,
7968
@IInstantiationService private instantiationService: IInstantiationService,
8069
@IPreferencesSearchService private preferencesSearchService: IPreferencesSearchService,
@@ -107,34 +96,15 @@ export class SettingsEditor2 extends BaseEditor {
10796
});
10897
}
10998

110-
clearInput(): void {
111-
super.clearInput();
112-
}
113-
11499
layout(dimension: DOM.Dimension): void {
115-
this.dimension = dimension;
116100
this.searchWidget.layout(dimension);
117-
118-
this.layoutSettingsList();
101+
this.layoutSettingsList(dimension);
119102
}
120103

121104
focus(): void {
122105
this.searchWidget.focus();
123106
}
124107

125-
getSecondaryActions(): IAction[] {
126-
return <IAction[]>[
127-
];
128-
}
129-
130-
search(filter: string): void {
131-
this.searchWidget.focus();
132-
}
133-
134-
clearSearchResults(): void {
135-
this.searchWidget.clear();
136-
}
137-
138108
private createHeader(parent: HTMLElement): void {
139109
this.headerContainer = DOM.append(parent, $('.settings-header'));
140110

@@ -159,8 +129,7 @@ export class SettingsEditor2 extends BaseEditor {
159129
const searchContainer = DOM.append(this.headerContainer, $('.search-container'));
160130
this.searchWidget = this._register(this.instantiationService.createInstance(SearchWidget, searchContainer, {
161131
ariaLabel: localize('SearchSettings.AriaLabel', "Search settings"),
162-
placeholder: localize('SearchSettings.Placeholder', "Search settings"),
163-
focusKey: this.searchFocusContextKey
132+
placeholder: localize('SearchSettings.Placeholder', "Search settings")
164133
}));
165134
this._register(this.searchWidget.onDidChange(() => this.onSearchInputChanged()));
166135
this._register(DOM.addStandardDisposableListener(this.searchWidget.domNode, 'keydown', e => {
@@ -294,6 +263,7 @@ export class SettingsEditor2 extends BaseEditor {
294263

295264
private onDidClickShowAllSettings(): void {
296265
this.viewState.showAllSettings = !this.viewState.showAllSettings;
266+
this.refreshTree();
297267
}
298268

299269
private reportModifiedSetting(props: { key: string, query: string, searchResults: ISearchResult[], rawResults: ISearchResult[], showConfiguredOnly: boolean, isReset: boolean, settingsTarget: SettingsTarget }): void {
@@ -443,13 +413,13 @@ export class SettingsEditor2 extends BaseEditor {
443413
}
444414

445415
private localFilterPreferences(query: string): TPromise<void> {
446-
this.currentLocalSearchProvider = this.preferencesSearchService.getLocalSearchProvider(query);
447-
return this.filterOrSearchPreferences(query, SearchResultIdx.Local, this.currentLocalSearchProvider);
416+
const localSearchProvider = this.preferencesSearchService.getLocalSearchProvider(query);
417+
return this.filterOrSearchPreferences(query, SearchResultIdx.Local, localSearchProvider);
448418
}
449419

450420
private remoteSearchPreferences(query: string): TPromise<void> {
451-
this.currentRemoteSearchProvider = this.preferencesSearchService.getRemoteSearchProvider(query);
452-
return this.filterOrSearchPreferences(query, SearchResultIdx.Remote, this.currentRemoteSearchProvider);
421+
const remoteSearchProvider = this.preferencesSearchService.getRemoteSearchProvider(query);
422+
return this.filterOrSearchPreferences(query, SearchResultIdx.Remote, remoteSearchProvider);
453423
}
454424

455425
private filterOrSearchPreferences(query: string, type: SearchResultIdx, searchProvider: ISearchProvider): TPromise<void> {
@@ -491,8 +461,8 @@ export class SettingsEditor2 extends BaseEditor {
491461
});
492462
}
493463

494-
private layoutSettingsList(): void {
495-
const listHeight = this.dimension.height - (DOM.getDomNodePagePosition(this.headerContainer).height + 12 /*padding*/);
464+
private layoutSettingsList(dimension: DOM.Dimension): void {
465+
const listHeight = dimension.height - (DOM.getDomNodePagePosition(this.headerContainer).height + 12 /*padding*/);
496466
this.settingsTreeContainer.style.height = `${listHeight}px`;
497467
this.settingsTree.layout(listHeight, 800);
498468
}

src/vs/workbench/parts/preferences/browser/settingsTree.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import * as objects from 'vs/base/common/objects';
76
import * as DOM from 'vs/base/browser/dom';
87
import { Button } from 'vs/base/browser/ui/button/button';
98
import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
109
import { SelectBox } from 'vs/base/browser/ui/selectBox/selectBox';
1110
import { Color } from 'vs/base/common/color';
11+
import { Emitter, Event } from 'vs/base/common/event';
1212
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
13+
import * as objects from 'vs/base/common/objects';
1314
import { TPromise } from 'vs/base/common/winjs.base';
14-
import { IAccessibilityProvider, IDataSource, IRenderer, ITree, IFilter } from 'vs/base/parts/tree/browser/tree';
15+
import { IAccessibilityProvider, IDataSource, IFilter, IRenderer, ITree } from 'vs/base/parts/tree/browser/tree';
1516
import { localize } from 'vs/nls';
1617
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
1718
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
@@ -20,9 +21,8 @@ import { registerColor } from 'vs/platform/theme/common/colorRegistry';
2021
import { attachButtonStyler, attachInputBoxStyler, attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
2122
import { ICssStyleCollector, ITheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
2223
import { SettingsTarget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets';
23-
import { ISetting, ISettingsGroup, ISearchResult } from 'vs/workbench/services/preferences/common/preferences';
24+
import { ISearchResult, ISetting, ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences';
2425
import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels';
25-
import { Emitter, Event } from 'vs/base/common/event';
2626

2727
const $ = DOM.$;
2828

@@ -330,7 +330,8 @@ export class SettingsRenderer implements IRenderer {
330330

331331
button
332332
};
333-
toDispose.push(button.onDidClick(e => this._onDidClickButton.fire(template.entry && template.entry.id)));
333+
template.toDispose.push(attachButtonStyler(button, this.themeService));
334+
template.toDispose.push(button.onDidClick(e => this._onDidClickButton.fire(template.entry && template.entry.id)));
334335

335336
return template;
336337
}
@@ -494,7 +495,9 @@ export class SettingsRenderer implements IRenderer {
494495
}
495496

496497
private renderButtonRowElement(element: IButtonElement, template: IButtonRowTemplate): void {
497-
template.button.label = 'Show all settings';
498+
template.button.label = this.viewState.showAllSettings ?
499+
localize('showFewerSettings', "Show Fewer Settings") :
500+
localize('showAllSettings', "Show All Settings");
498501
}
499502

500503
disposeTemplate(tree: ITree, templateId: string, template: IDisposableTemplate): void {
@@ -548,10 +551,10 @@ export class SettingsAccessibilityProvider implements IAccessibilityProvider {
548551
}
549552

550553
// getPosInSet(tree: ITree, element: any): string {
551-
// throw new Error('Method not implemented.');
554+
// throw new Error('Method not implemented.');
552555
// }
553556
// getSetSize(): string {
554-
// throw new Error('Method not implemented.');
557+
// throw new Error('Method not implemented.');
555558
// }
556559
}
557560

0 commit comments

Comments
 (0)