提交 f2f8d082 编写于 作者: S Sandeep Somavarapu 提交者: GitHub

Merge pull request #22556 from hoovercj/searchBackwardsInPreferences

Add backwards search to preferences view
......@@ -128,7 +128,7 @@ export class PreferencesEditor extends BaseEditor {
placeholder: nls.localize('SearchSettingsWidget.Placeholder', "Search Settings")
}));
this._register(this.searchWidget.onDidChange(value => this.filterPreferences(value.trim())));
this._register(this.searchWidget.onEnter(value => this.preferencesRenderers.focusNextPreference()));
this._register(this.searchWidget.onEnter(shift => this.preferencesRenderers.focusNextPreference(!shift)));
this.settingsTabsWidget = this._register(this.instantiationService.createInstance(SettingsTabsWidget, this.headerContainer));
this._register(this.settingsTabsWidget.onSwitch(() => this.switchSettings()));
......@@ -269,8 +269,8 @@ class PreferencesRenderers extends Disposable {
return this._getCount(filterResult ? filterResult.filteredGroups : (this._defaultPreferencesRenderer ? (<ISettingsEditorModel>this._defaultPreferencesRenderer.preferencesModel).settingsGroups : []));
}
public focusNextPreference() {
const setting = this._defaultPreferencesRenderer.iterator.next();
public focusNextPreference(forward: boolean = true) {
const setting = forward ? this._defaultPreferencesRenderer.iterator.next() : this._defaultPreferencesRenderer.iterator.previous();
this._focusPreference(setting, this._defaultPreferencesRenderer);
this._focusPreference(setting, this._editablePreferencesRenderer);
}
......
......@@ -9,7 +9,7 @@ import * as DOM from 'vs/base/browser/dom';
import { Delayer } from 'vs/base/common/async';
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
import { flatten, distinct } from 'vs/base/common/arrays';
import { ArrayNavigator, IIterator } from 'vs/base/common/iterator';
import { ArrayNavigator, INavigator } from 'vs/base/common/iterator';
import { IAction } from 'vs/base/common/actions';
import { IJSONSchema } from 'vs/base/common/jsonSchema';
import Event, { Emitter } from 'vs/base/common/event';
......@@ -36,7 +36,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
export interface IPreferencesRenderer<T> extends IDisposable {
preferencesModel: IPreferencesEditorModel<T>;
associatedPreferencesModel: IPreferencesEditorModel<T>;
iterator: IIterator<T>;
iterator: INavigator<T>;
onFocusPreference: Event<T>;
onClearFocusPreference: Event<T>;
......@@ -86,7 +86,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend
this._register(this.editor.getModel().onDidChangeContent(() => this.modelChangeDelayer.trigger(() => this.onModelChanged())));
}
public get iterator(): IIterator<ISetting> {
public get iterator(): INavigator<ISetting> {
return null;
}
......@@ -230,7 +230,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
this._register(this.settingsGroupTitleRenderer.onHiddenAreasChanged(() => this.hiddenAreasRenderer.render()));
}
public get iterator(): IIterator<ISetting> {
public get iterator(): INavigator<ISetting> {
return this.filteredSettingsNavigationRenderer;
}
......@@ -577,7 +577,7 @@ export class HighlightPreferencesRenderer extends Disposable {
}
}
class FilteredSettingsNavigationRenderer extends Disposable implements IIterator<ISetting> {
class FilteredSettingsNavigationRenderer extends Disposable implements INavigator<ISetting> {
private iterator: ArrayNavigator<ISetting>;
......@@ -589,6 +589,26 @@ class FilteredSettingsNavigationRenderer extends Disposable implements IIterator
return this.iterator.next() || this.iterator.first();
}
public previous(): ISetting {
return this.iterator.previous() || this.iterator.last();
}
public parent(): ISetting {
return this.iterator.parent();
}
public first(): ISetting {
return this.iterator.first();
}
public last(): ISetting {
return this.iterator.last();
}
public current(): ISetting {
return this.iterator.current();
}
public render(filteredGroups: ISettingsGroup[]) {
this.settingHighlighter.clear(true);
const settings: ISetting[] = [];
......
......@@ -235,8 +235,8 @@ export class SearchWidget extends Widget {
private _onDidChange = this._register(new Emitter<string>());
public onDidChange: Event<string> = this._onDidChange.event;
private _onEnter = this._register(new Emitter<void>());
public onEnter: Event<void> = this._onEnter.event;
private _onEnter = this._register(new Emitter<boolean>());
public onEnter: Event<boolean> = this._onEnter.event;
constructor(parent: HTMLElement, protected options: IInputOptions,
@IContextViewService private contextViewService: IContextViewService,
......@@ -299,7 +299,7 @@ export class SearchWidget extends Widget {
let handled = false;
switch (keyboardEvent.keyCode) {
case KeyCode.Enter:
this._onEnter.fire();
this._onEnter.fire(keyboardEvent.shiftKey);
handled = true;
break;
case KeyCode.Escape:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册