提交 3ab33cac 编写于 作者: J Joao Moreno

fix list open

上级 e63560b2
......@@ -21,17 +21,12 @@ export interface IListElementEvent<T, E> {
event: E;
}
export interface IListMouseEvent<T> extends MouseEvent {
element: T;
index: number;
}
export interface IFocusChangeEvent<T> {
export interface IListEvent<T> {
elements: T[];
indexes: number[];
}
export interface ISelectionChangeEvent<T> {
elements: T[];
indexes: number[];
export interface IListMouseEvent<T> extends MouseEvent {
element: T;
index: number;
}
\ No newline at end of file
......@@ -6,7 +6,7 @@
import 'vs/css!./list';
import { IDisposable } from 'vs/base/common/lifecycle';
import { range } from 'vs/base/common/arrays';
import { IDelegate, IRenderer, IFocusChangeEvent, ISelectionChangeEvent } from './list';
import { IDelegate, IRenderer, IListEvent } from './list';
import { List, IListOptions } from './listWidget';
import { IPagedModel } from 'vs/base/common/paging';
import Event, { mapEvent } from 'vs/base/common/event';
......@@ -77,11 +77,11 @@ export class PagedList<T> {
return this.list;
}
get onFocusChange(): Event<IFocusChangeEvent<T>> {
get onFocusChange(): Event<IListEvent<T>> {
return mapEvent(this.list.onFocusChange, ({ elements, indexes }) => ({ elements: elements.map(e => this._model.get(e)), indexes }));
}
get onSelectionChange(): Event<ISelectionChangeEvent<T>> {
get onSelectionChange(): Event<IListEvent<T>> {
return mapEvent(this.list.onSelectionChange, ({ elements, indexes }) => ({ elements: elements.map(e => this._model.get(e)), indexes }));
}
......
......@@ -13,7 +13,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import Event, { Emitter, EventBufferer, chain, mapEvent, fromCallback } from 'vs/base/common/event';
import { domEvent } from 'vs/base/browser/event';
import { IDelegate, IRenderer, IListMouseEvent, IFocusChangeEvent, ISelectionChangeEvent } from './list';
import { IDelegate, IRenderer, IListEvent, IListMouseEvent } from './list';
import { ListView, IListViewOptions } from './listView';
export interface IIdentityProvider<T> {
......@@ -183,7 +183,7 @@ class KeyboardController<T> implements IDisposable {
private onEnter(e: StandardKeyboardEvent): void {
e.preventDefault();
e.stopPropagation();
this.list.setSelection(this.list.getFocus());
this.list.open(this.list.getFocus());
}
private onUpArrow(e: StandardKeyboardEvent): void {
......@@ -224,6 +224,7 @@ class KeyboardController<T> implements IDisposable {
}
class MouseController<T> implements IDisposable {
private disposables: IDisposable[];
constructor(
......@@ -246,7 +247,7 @@ class MouseController<T> implements IDisposable {
e.stopPropagation();
this.view.domNode.focus();
this.list.setFocus([e.index]);
this.list.setSelection([e.index]);
this.list.open([e.index]);
}
dispose() {
......@@ -278,21 +279,23 @@ export class List<T> implements ISpliceable<T>, IDisposable {
private spliceable: ISpliceable<T>;
private disposables: IDisposable[];
@memoize
get onFocusChange(): Event<IFocusChangeEvent<T>> {
@memoize get onFocusChange(): Event<IListEvent<T>> {
return mapEvent(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e));
}
@memoize
get onSelectionChange(): Event<ISelectionChangeEvent<T>> {
@memoize get onSelectionChange(): Event<IListEvent<T>> {
return mapEvent(this.eventBufferer.wrapEvent(this.selection.onChange), e => this.toListEvent(e));
}
@memoize
get onContextMenu(): Event<IListMouseEvent<T>> {
@memoize get onContextMenu(): Event<IListMouseEvent<T>> {
return fromCallback(handler => this.view.addListener('contextmenu', handler));
}
private _onOpen = new Emitter<number[]>();
@memoize get onOpen(): Event<IListEvent<T>> {
return mapEvent(this._onOpen.event, indexes => this.toListEvent({ indexes }));
}
private _onDOMFocus = new Emitter<void>();
get onDOMFocus(): Event<void> { return this._onDOMFocus.event; }
......@@ -500,7 +503,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
}
}
getElementDomId(index: number): string {
private getElementDomId(index: number): string {
return `${this.idPrefix}_${index}`;
}
......@@ -512,6 +515,11 @@ export class List<T> implements ISpliceable<T>, IDisposable {
return this.view.domNode;
}
open(indexes: number[]): void {
this.setSelection(indexes);
this._onOpen.fire(indexes);
}
private toListEvent({ indexes }: ITraitChangeEvent) {
return { indexes, elements: indexes.map(i => this.view.element(i)) };
}
......
......@@ -14,7 +14,7 @@ import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
import { addClass, append, $, hide, removeClass, show, toggleClass } from 'vs/base/browser/dom';
import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
import { IDelegate, IFocusChangeEvent, IRenderer, ISelectionChangeEvent } from 'vs/base/browser/ui/list/list';
import { IDelegate, IListEvent, IRenderer } from 'vs/base/browser/ui/list/list';
import { List } from 'vs/base/browser/ui/list/listWidget';
import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
......@@ -407,7 +407,7 @@ export class SuggestWidget implements IContentWidget, IDelegate<ICompletionItem>
});
}
private onListSelection(e: ISelectionChangeEvent<ICompletionItem>): void {
private onListSelection(e: IListEvent<ICompletionItem>): void {
if (!e.elements.length) {
return;
}
......@@ -439,7 +439,7 @@ export class SuggestWidget implements IContentWidget, IDelegate<ICompletionItem>
}
}
private onListFocus(e: IFocusChangeEvent<ICompletionItem>): void {
private onListFocus(e: IListEvent<ICompletionItem>): void {
if (!e.elements.length) {
if (this.currentSuggestionDetails) {
this.currentSuggestionDetails.cancel();
......@@ -591,7 +591,7 @@ export class SuggestWidget implements IContentWidget, IDelegate<ICompletionItem>
this.completionModel = null;
} else {
const {stats} = this.completionModel;
const { stats } = this.completionModel;
stats['wasAutomaticallyTriggered'] = !!isAuto;
this.telemetryService.publicLog('suggestWidget', stats);
......
......@@ -266,8 +266,7 @@ export function registerCommands(): void {
// List
if (focused instanceof List) {
const list = focused;
list.setSelection(list.getFocus());
list.open(list.getFocus());
}
// Tree
......
......@@ -222,7 +222,7 @@ export class SCMViewlet extends Viewlet {
this.disposables.push(this.listService.register(this.list));
chain(this.list.onSelectionChange)
chain(this.list.onOpen)
.map(e => e.elements[0])
.filter(e => !!e && isSCMResource(e))
.on(this.open, this, this.disposables);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册