mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 11:38:51 +01:00
@@ -1271,7 +1271,7 @@ export interface ExtHostDocumentsAndEditorsShape {
|
||||
|
||||
export interface ExtHostTreeViewsShape {
|
||||
$getChildren(treeViewId: string, treeItemHandle?: string): Promise<ITreeItem[] | undefined>;
|
||||
$onDrop(treeViewId: string, treeDataTransfer: TreeDataTransferDTO, newParentTreeItemHandle: string): Promise<void>;
|
||||
$onDrop(destinationViewId: string, treeDataTransfer: TreeDataTransferDTO, newParentTreeItemHandle: string, sourceViewId?: string, sourceTreeItemHandles?: string[]): Promise<void>;
|
||||
$setExpanded(treeViewId: string, treeItemHandle: string, expanded: boolean): void;
|
||||
$setSelection(treeViewId: string, treeItemHandles: string[]): void;
|
||||
$setVisible(treeViewId: string, visible: boolean): void;
|
||||
|
||||
@@ -10,7 +10,7 @@ import { URI } from 'vs/base/common/uri';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.protocol';
|
||||
import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions, TREE_ITEM_DATA_TRANSFER_TYPE } from 'vs/workbench/common/views';
|
||||
import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions } from 'vs/workbench/common/views';
|
||||
import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands';
|
||||
import { asPromise } from 'vs/base/common/async';
|
||||
import { TreeItemCollapsibleState, ThemeIcon, MarkdownString as MarkdownStringType } from 'vs/workbench/api/common/extHostTypes';
|
||||
@@ -129,22 +129,22 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
|
||||
return treeView.getChildren(treeItemHandle);
|
||||
}
|
||||
|
||||
async $onDrop(treeViewId: string, treeDataTransferDTO: TreeDataTransferDTO, newParentItemHandle: string): Promise<void> {
|
||||
const treeView = this.treeViews.get(treeViewId);
|
||||
async $onDrop(destinationViewId: string, treeDataTransferDTO: TreeDataTransferDTO, newParentItemHandle: string, sourceViewId?: string, sourceTreeItemHandles?: string[]): Promise<void> {
|
||||
const treeView = this.treeViews.get(destinationViewId);
|
||||
if (!treeView) {
|
||||
return Promise.reject(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)));
|
||||
return Promise.reject(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', destinationViewId)));
|
||||
}
|
||||
|
||||
const treeDataTransfer = TreeDataTransferConverter.toITreeDataTransfer(treeDataTransferDTO);
|
||||
if (treeDataTransfer.items.has(TREE_ITEM_DATA_TRANSFER_TYPE)) {
|
||||
const sourceHandles: string[] = JSON.parse(await treeDataTransfer.items.get(TREE_ITEM_DATA_TRANSFER_TYPE)!.asString());
|
||||
const sourceElements = sourceHandles.map(handle => treeView.getExtensionElement(handle)).filter(element => !!element);
|
||||
if (sourceElements.length > 0) {
|
||||
treeDataTransfer.items.set(TREE_ITEM_DATA_TRANSFER_TYPE, {
|
||||
asString: async () => JSON.stringify(sourceElements)
|
||||
});
|
||||
} else {
|
||||
treeDataTransfer.items.delete(TREE_ITEM_DATA_TRANSFER_TYPE);
|
||||
if ((sourceViewId === destinationViewId) && sourceTreeItemHandles) {
|
||||
const additionalTransferItems = await treeView.onWillDrop(sourceTreeItemHandles);
|
||||
if (additionalTransferItems) {
|
||||
for (const key of additionalTransferItems.items.keys()) {
|
||||
const item = additionalTransferItems.items.get(key);
|
||||
if (item) {
|
||||
treeDataTransfer.items.set(key, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return treeView.onDrop(treeDataTransfer, newParentItemHandle);
|
||||
@@ -404,6 +404,21 @@ class ExtHostTreeView<T> extends Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
async onWillDrop(sourceTreeItemHandles: TreeItemHandle[]): Promise<vscode.TreeDataTransfer | undefined> {
|
||||
const extensionTreeItems: T[] = [];
|
||||
for (const sourceHandle of sourceTreeItemHandles) {
|
||||
const extensionItem = this.getExtensionElement(sourceHandle);
|
||||
if (extensionItem) {
|
||||
extensionTreeItems.push(extensionItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.dndController?.onWillDrop || (extensionTreeItems.length === 0)) {
|
||||
return;
|
||||
}
|
||||
return this.dndController.onWillDrop(extensionTreeItems);
|
||||
}
|
||||
|
||||
async onDrop(treeDataTransfer: vscode.TreeDataTransfer, targetHandleOrNode: TreeItemHandle): Promise<void> {
|
||||
const target = this.getExtensionElement(targetHandleOrNode);
|
||||
if (!target) {
|
||||
|
||||
Reference in New Issue
Block a user