提交 64abf86a 编写于 作者: J Joao Moreno

EventDelayer -> EventBufferer

上级 e5a268d1
...@@ -7,7 +7,7 @@ import 'vs/css!./list'; ...@@ -7,7 +7,7 @@ import 'vs/css!./list';
import { IDisposable, dispose, disposeAll } from 'vs/base/common/lifecycle'; import { IDisposable, dispose, disposeAll } from 'vs/base/common/lifecycle';
import { isNumber } from 'vs/base/common/types'; import { isNumber } from 'vs/base/common/types';
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import Event, { Emitter, mapEvent, EventDelayer } from 'vs/base/common/event'; import Event, { Emitter, mapEvent, EventBufferer } from 'vs/base/common/event';
import { IDelegate, IRenderer, IListMouseEvent, IFocusChangeEvent, ISelectionChangeEvent } from './list'; import { IDelegate, IRenderer, IListMouseEvent, IFocusChangeEvent, ISelectionChangeEvent } from './list';
import { ListView } from './listView'; import { ListView } from './listView';
...@@ -128,16 +128,16 @@ export class List<T> implements IDisposable { ...@@ -128,16 +128,16 @@ export class List<T> implements IDisposable {
private focus: Trait; private focus: Trait;
private selection: Trait; private selection: Trait;
private eventDelayer: EventDelayer; private eventBufferer: EventBufferer;
private view: ListView<T>; private view: ListView<T>;
private controller: Controller<T>; private controller: Controller<T>;
get onFocusChange(): Event<IFocusChangeEvent<T>> { get onFocusChange(): Event<IFocusChangeEvent<T>> {
return this.eventDelayer.delay(mapEvent(this.focus.onChange, e => this.toListEvent(e))); return this.eventBufferer.wrapEvent(mapEvent(this.focus.onChange, e => this.toListEvent(e)));
} }
get onSelectionChange(): Event<ISelectionChangeEvent<T>> { get onSelectionChange(): Event<ISelectionChangeEvent<T>> {
return this.eventDelayer.delay(mapEvent(this.selection.onChange, e => this.toListEvent(e))); return this.eventBufferer.wrapEvent(mapEvent(this.selection.onChange, e => this.toListEvent(e)));
} }
constructor( constructor(
...@@ -147,7 +147,7 @@ export class List<T> implements IDisposable { ...@@ -147,7 +147,7 @@ export class List<T> implements IDisposable {
) { ) {
this.focus = new Trait('focused'); this.focus = new Trait('focused');
this.selection = new Trait('selected'); this.selection = new Trait('selected');
this.eventDelayer = new EventDelayer(); this.eventBufferer = new EventBufferer();
renderers = renderers.map(r => { renderers = renderers.map(r => {
r = this.focus.wrapRenderer(r); r = this.focus.wrapRenderer(r);
...@@ -160,7 +160,7 @@ export class List<T> implements IDisposable { ...@@ -160,7 +160,7 @@ export class List<T> implements IDisposable {
} }
splice(start: number, deleteCount: number, ...elements: T[]): void { splice(start: number, deleteCount: number, ...elements: T[]): void {
this.eventDelayer.wrap(() => { this.eventBufferer.bufferEvents(() => {
this.focus.splice(start, deleteCount, elements.length); this.focus.splice(start, deleteCount, elements.length);
this.selection.splice(start, deleteCount, elements.length); this.selection.splice(start, deleteCount, elements.length);
this.view.splice(start, deleteCount, ...elements); this.view.splice(start, deleteCount, ...elements);
...@@ -180,7 +180,7 @@ export class List<T> implements IDisposable { ...@@ -180,7 +180,7 @@ export class List<T> implements IDisposable {
} }
setSelection(...indexes: number[]): void { setSelection(...indexes: number[]): void {
this.eventDelayer.wrap(() => { this.eventBufferer.bufferEvents(() => {
indexes = indexes.concat(this.selection.set(...indexes)); indexes = indexes.concat(this.selection.set(...indexes));
indexes.forEach(i => this.view.splice(i, 1, this.view.element(i))); indexes.forEach(i => this.view.splice(i, 1, this.view.element(i)));
}); });
...@@ -204,7 +204,7 @@ export class List<T> implements IDisposable { ...@@ -204,7 +204,7 @@ export class List<T> implements IDisposable {
} }
setFocus(...indexes: number[]): void { setFocus(...indexes: number[]): void {
this.eventDelayer.wrap(() => { this.eventBufferer.bufferEvents(() => {
indexes = indexes.concat(this.focus.set(...indexes)); indexes = indexes.concat(this.focus.set(...indexes));
indexes.forEach(i => this.view.splice(i, 1, this.view.element(i))); indexes.forEach(i => this.view.splice(i, 1, this.view.element(i)));
}); });
......
...@@ -181,12 +181,12 @@ enum EventDelayerState { ...@@ -181,12 +181,12 @@ enum EventDelayerState {
* // event will only be fired at this point * // event will only be fired at this point
* ``` * ```
*/ */
export class EventDelayer { export class EventBufferer {
private state = EventDelayerState.Idle; private state = EventDelayerState.Idle;
private buffer: Function[] = []; private buffer: Function[] = [];
delay<T>(event: Event<T>): Event<T> { wrapEvent<T>(event: Event<T>): Event<T> {
return (listener, thisArgs?, disposables?) => { return (listener, thisArgs?, disposables?) => {
return event(i => { return event(i => {
if (this.state === EventDelayerState.Idle) { if (this.state === EventDelayerState.Idle) {
...@@ -198,7 +198,7 @@ export class EventDelayer { ...@@ -198,7 +198,7 @@ export class EventDelayer {
}; };
} }
wrap(fn: () => void): void { bufferEvents(fn: () => void): void {
this.state = EventDelayerState.Running; this.state = EventDelayerState.Running;
fn(); fn();
this.buffer.forEach(flush => flush()); this.buffer.forEach(flush => flush());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册