Skip to content

Commit

Permalink
T extends QuickPickItem (#49340)
Browse files Browse the repository at this point in the history
  • Loading branch information
chrmarti committed Jun 21, 2018
1 parent ede8a0f commit aae3357
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 46 deletions.
14 changes: 7 additions & 7 deletions src/vs/platform/quickinput/common/quickInput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ export interface IQuickInput {
dispose(): void;
}

export interface IQuickPick extends IQuickInput {
export interface IQuickPick<T extends IQuickPickItem> extends IQuickInput {

value: string;

Expand All @@ -123,21 +123,21 @@ export interface IQuickPick extends IQuickInput {

readonly onDidTriggerButton: Event<IQuickInputButton>;

items: ReadonlyArray<IQuickPickItem>;
items: ReadonlyArray<T>;

canSelectMany: boolean;

matchOnDescription: boolean;

matchOnDetail: boolean;

activeItems: ReadonlyArray<IQuickPickItem>;
activeItems: ReadonlyArray<T>;

readonly onDidChangeActive: Event<IQuickPickItem[]>;
readonly onDidChangeActive: Event<T[]>;

selectedItems: ReadonlyArray<IQuickPickItem>;
selectedItems: ReadonlyArray<T>;

readonly onDidChangeSelection: Event<IQuickPickItem[]>;
readonly onDidChangeSelection: Event<T[]>;
}

export interface IInputBox extends IQuickInput {
Expand Down Expand Up @@ -186,7 +186,7 @@ export interface IQuickInputService {

backButton: IQuickInputButton;

createQuickPick(): IQuickPick;
createQuickPick<T extends IQuickPickItem>(): IQuickPick<T>;
createInputBox(): IInputBox;

focus(): void;
Expand Down
14 changes: 7 additions & 7 deletions src/vs/vscode.proposed.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ declare module 'vscode' {

export const quickInputBackButton: QuickInputButton;

export function createQuickPick(): QuickPick;
export function createQuickPick<T extends QuickPickItem>(): QuickPick<T>;

export function createInputBox(): InputBox;
}
Expand Down Expand Up @@ -553,7 +553,7 @@ declare module 'vscode' {
dispose(): void;
}

export interface QuickPick extends QuickInput {
export interface QuickPick<T extends QuickPickItem> extends QuickInput {

value: string;

Expand All @@ -567,21 +567,21 @@ declare module 'vscode' {

readonly onDidTriggerButton: Event<QuickInputButton>;

items: ReadonlyArray<QuickPickItem>;
items: ReadonlyArray<T>;

canSelectMany: boolean;

matchOnDescription: boolean;

matchOnDetail: boolean;

activeItems: ReadonlyArray<QuickPickItem>;
activeItems: ReadonlyArray<T>;

readonly onDidChangeActive: Event<QuickPickItem[]>;
readonly onDidChangeActive: Event<T[]>;

selectedItems: ReadonlyArray<QuickPickItem>;
selectedItems: ReadonlyArray<T>;

readonly onDidChangeSelection: Event<QuickPickItem[]>;
readonly onDidChangeSelection: Event<T[]>;
}

export interface InputBox extends QuickInput {
Expand Down
2 changes: 1 addition & 1 deletion src/vs/workbench/api/node/extHost.api.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ export function createApiFactory(
return extHostQuickOpen.backButton;
})();
},
createQuickPick: proposedApiFunction(extension, (): vscode.QuickPick => {
createQuickPick: proposedApiFunction(extension, <T extends vscode.QuickPickItem>(): vscode.QuickPick<T> => {
return extHostQuickOpen.createQuickPick(extension.id);
}),
createInputBox: proposedApiFunction(extension, (): vscode.InputBox => {
Expand Down
24 changes: 12 additions & 12 deletions src/vs/workbench/api/node/extHostQuickOpen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ export class ExtHostQuickOpen implements ExtHostQuickOpenShape {

backButton = backButton;

createQuickPick(extensionId: string): QuickPick {
createQuickPick<T extends QuickPickItem>(extensionId: string): QuickPick<T> {
const session = new ExtHostQuickPick(this._proxy, extensionId, () => this._sessions.delete(session._id));
this._sessions.set(session._id, session);
return session;
Expand Down Expand Up @@ -451,18 +451,18 @@ function getIconUri(iconPath: string | URI) {
return URI.file(iconPath);
}

class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
class ExtHostQuickPick<T extends QuickPickItem> extends ExtHostQuickInput implements QuickPick<T> {

private _items: QuickPickItem[] = [];
private _handlesToItems = new Map<number, QuickPickItem>();
private _itemsToHandles = new Map<QuickPickItem, number>();
private _items: T[] = [];
private _handlesToItems = new Map<number, T>();
private _itemsToHandles = new Map<T, number>();
private _canSelectMany = false;
private _matchOnDescription = true;
private _matchOnDetail = true;
private _activeItems: QuickPickItem[] = [];
private _onDidChangeActiveEmitter = new Emitter<QuickPickItem[]>();
private _selectedItems: QuickPickItem[] = [];
private _onDidChangeSelectionEmitter = new Emitter<QuickPickItem[]>();
private _activeItems: T[] = [];
private _onDidChangeActiveEmitter = new Emitter<T[]>();
private _selectedItems: T[] = [];
private _onDidChangeSelectionEmitter = new Emitter<T[]>();

constructor(proxy: MainThreadQuickOpenShape, extensionId: string, onDispose: () => void) {
super(proxy, extensionId, onDispose);
Expand All @@ -477,7 +477,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._items;
}

set items(items: QuickPickItem[]) {
set items(items: T[]) {
this._items = items.slice();
this._handlesToItems.clear();
this._itemsToHandles.clear();
Expand Down Expand Up @@ -527,7 +527,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._activeItems;
}

set activeItems(activeItems: QuickPickItem[]) {
set activeItems(activeItems: T[]) {
this._activeItems = activeItems.filter(item => this._itemsToHandles.has(item));
this.update({ activeItems: this._activeItems.map(item => this._itemsToHandles.get(item)) });
}
Expand All @@ -538,7 +538,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._selectedItems;
}

set selectedItems(selectedItems: QuickPickItem[]) {
set selectedItems(selectedItems: T[]) {
this._selectedItems = selectedItems.filter(item => this._itemsToHandles.has(item));
this.update({ selectedItems: this._selectedItems.map(item => this._itemsToHandles.get(item)) });
}
Expand Down
38 changes: 19 additions & 19 deletions src/vs/workbench/browser/parts/quickinput/quickInput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,23 +276,23 @@ class QuickInput implements IQuickInput {
}
}

class QuickPick extends QuickInput implements IQuickPick {
class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPick<T> {

private _value = '';
private _placeholder;
private onDidChangeValueEmitter = new Emitter<string>();
private onDidAcceptEmitter = new Emitter<string>();
private _items: IQuickPickItem[] = [];
private _items: T[] = [];
private itemsUpdated = false;
private _canSelectMany = false;
private _matchOnDescription = true;
private _matchOnDetail = true;
private _activeItems: IQuickPickItem[] = [];
private _activeItems: T[] = [];
private activeItemsUpdated = false;
private onDidChangeActiveEmitter = new Emitter<IQuickPickItem[]>();
private _selectedItems: IQuickPickItem[] = [];
private onDidChangeActiveEmitter = new Emitter<T[]>();
private _selectedItems: T[] = [];
private selectedItemsUpdated = false;
private onDidChangeSelectionEmitter = new Emitter<IQuickPickItem[]>();
private onDidChangeSelectionEmitter = new Emitter<T[]>();
private quickNavigate = false;

constructor(ui: QuickInputUI) {
Expand Down Expand Up @@ -331,7 +331,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._items;
}

set items(items: IQuickPickItem[]) {
set items(items: T[]) {
this._items = items;
this.itemsUpdated = true;
this.update();
Expand Down Expand Up @@ -368,7 +368,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._activeItems;
}

set activeItems(activeItems: IQuickPickItem[]) {
set activeItems(activeItems: T[]) {
this._activeItems = activeItems;
this.activeItemsUpdated = true;
this.update();
Expand All @@ -380,7 +380,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._selectedItems;
}

set selectedItems(selectedItems: IQuickPickItem[]) {
set selectedItems(selectedItems: T[]) {
this._selectedItems = selectedItems;
this.selectedItemsUpdated = true;
this.update();
Expand Down Expand Up @@ -433,8 +433,8 @@ class QuickPick extends QuickInput implements IQuickPick {
if (!focusedItems.length && !this._activeItems.length) {
return;
}
this._activeItems = focusedItems;
this.onDidChangeActiveEmitter.fire(focusedItems);
this._activeItems = focusedItems as T[];
this.onDidChangeActiveEmitter.fire(focusedItems as T[]);
}),
this.ui.list.onDidChangeSelection(selectedItems => {
if (this.canSelectMany) {
Expand All @@ -444,16 +444,16 @@ class QuickPick extends QuickInput implements IQuickPick {
if (!selectedItems.length && !this._selectedItems.length) {
return;
}
this._selectedItems = selectedItems;
this.onDidChangeSelectionEmitter.fire(selectedItems);
this._selectedItems = selectedItems as T[];
this.onDidChangeSelectionEmitter.fire(selectedItems as T[]);
this.onDidAcceptEmitter.fire();
}),
this.ui.list.onChangedCheckedElements(checkedItems => {
if (!this.canSelectMany) {
return;
}
this._selectedItems = checkedItems;
this.onDidChangeSelectionEmitter.fire(checkedItems);
this._selectedItems = checkedItems as T[];
this.onDidChangeSelectionEmitter.fire(checkedItems as T[]);
}),
);
}
Expand Down Expand Up @@ -893,12 +893,12 @@ export class QuickInputService extends Component implements IQuickInputService {
resolve(undefined);
return;
}
const input = this.createQuickPick();
const input = this.createQuickPick<T>();
const disposables = [
input,
input.onDidAccept(() => {
if (input.canSelectMany) {
resolve(<any>input.selectedItems); // TODO: generify interface to use T extends IQuickPickItem
resolve(<any>input.selectedItems.slice());
input.hide();
} else {
const result = input.activeItems[0];
Expand Down Expand Up @@ -1005,9 +1005,9 @@ export class QuickInputService extends Component implements IQuickInputService {

backButton = backButton;

createQuickPick(): IQuickPick {
createQuickPick<T extends IQuickPickItem>(): IQuickPick<T> {
this.create();
return new QuickPick(this.ui);
return new QuickPick<T>(this.ui);
}

createInputBox(): IInputBox {
Expand Down

0 comments on commit aae3357

Please sign in to comment.