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

fix list open

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