Finalize tree drag and drop API

Fixes #32592
This commit is contained in:
Alex Ross
2022-03-02 15:34:55 +01:00
parent 38c2e5860d
commit c468903ff7
7 changed files with 108 additions and 135 deletions

View File

@@ -1303,8 +1303,8 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
TestTag: extHostTypes.TestTag,
TestRunProfileKind: extHostTypes.TestRunProfileKind,
TextSearchCompleteMessageType: TextSearchCompleteMessageType,
TreeDataTransfer: extHostTypes.TreeDataTransfer,
TreeDataTransferItem: extHostTypes.TreeDataTransferItem,
DataTransfer: extHostTypes.DataTransfer,
DataTransferItem: extHostTypes.DataTransferItem,
CoveredCount: extHostTypes.CoveredCount,
FileCoverage: extHostTypes.FileCoverage,
StatementCoverage: extHostTypes.StatementCoverage,

View File

@@ -50,7 +50,7 @@ function toTreeItemLabel(label: any, extension: IExtensionDescription): ITreeIte
export class ExtHostTreeViews implements ExtHostTreeViewsShape {
private treeViews: Map<string, ExtHostTreeView<any>> = new Map<string, ExtHostTreeView<any>>();
private treeDragAndDropService: ITreeViewsService<vscode.TreeDataTransfer, any, any> = new TreeviewsService<vscode.TreeDataTransfer, any, any>();
private treeDragAndDropService: ITreeViewsService<vscode.DataTransfer, any, any> = new TreeviewsService<vscode.DataTransfer, any, any>();
constructor(
private _proxy: MainThreadTreeViewsShape,
@@ -296,10 +296,8 @@ class ExtHostTreeView<T> extends Disposable {
}
this.dataProvider = options.treeDataProvider;
this.dndController = options.dragAndDropController;
if (this.dataProvider.onDidChangeTreeData2) {
this._register(this.dataProvider.onDidChangeTreeData2(elementOrElements => this._onDidChangeData.fire({ message: false, element: elementOrElements })));
} else if (this.dataProvider.onDidChangeTreeData) {
this._register(this.dataProvider.onDidChangeTreeData(element => this._onDidChangeData.fire({ message: false, element })));
if (this.dataProvider.onDidChangeTreeData) {
this._register(this.dataProvider.onDidChangeTreeData(elementOrElements => this._onDidChangeData.fire({ message: false, element: elementOrElements })));
}
let refreshingPromise: Promise<void> | null;
@@ -433,7 +431,7 @@ class ExtHostTreeView<T> extends Disposable {
}
}
async handleDrag(sourceTreeItemHandles: TreeItemHandle[], treeDataTransfer: ITreeDataTransfer, token: CancellationToken): Promise<vscode.TreeDataTransfer | undefined> {
async handleDrag(sourceTreeItemHandles: TreeItemHandle[], treeDataTransfer: ITreeDataTransfer, token: CancellationToken): Promise<vscode.DataTransfer | undefined> {
const extensionTreeItems: T[] = [];
for (const sourceHandle of sourceTreeItemHandles) {
const extensionItem = this.getExtensionElement(sourceHandle);
@@ -453,7 +451,7 @@ class ExtHostTreeView<T> extends Disposable {
return !!this.dndController?.handleDrag;
}
async onDrop(treeDataTransfer: vscode.TreeDataTransfer, targetHandleOrNode: TreeItemHandle, token: CancellationToken): Promise<void> {
async onDrop(treeDataTransfer: vscode.DataTransfer, targetHandleOrNode: TreeItemHandle, token: CancellationToken): Promise<void> {
const target = this.getExtensionElement(targetHandleOrNode);
if (!target || !this.dndController?.handleDrop) {
return;

View File

@@ -2349,7 +2349,7 @@ export enum TreeItemCollapsibleState {
}
@es5ClassCompat
export class TreeDataTransferItem {
export class DataTransferItem {
async asString(): Promise<string> {
return typeof this.value === 'string' ? this.value : JSON.stringify(this.value);
}
@@ -2358,7 +2358,7 @@ export class TreeDataTransferItem {
}
@es5ClassCompat
export class TreeDataTransfer<T extends TreeDataTransferItem = TreeDataTransferItem> {
export class DataTransfer<T extends DataTransferItem = DataTransferItem> {
private readonly _items: Map<string, T> = new Map();
get(mimeType: string): T | undefined {
return this._items.get(mimeType);