@@ -162,6 +162,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
162
162
private messageElement ! : HTMLDivElement ;
163
163
private tree : Tree | undefined ;
164
164
private treeLabels : ResourceLabels | undefined ;
165
+ private treeViewDnd : CustomTreeViewDragAndDrop ;
165
166
166
167
private root : ITreeItem ;
167
168
private elementsToRefresh : ITreeItem [ ] = [ ] ;
@@ -215,6 +216,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
215
216
this . collapseAllToggleContext = this . collapseAllToggleContextKey . bindTo ( contextKeyService ) ;
216
217
this . refreshContextKey = new RawContextKey < boolean > ( `treeView.${ this . id } .enableRefresh` , false , localize ( 'treeView.enableRefresh' , "Whether the tree view with id {0} enables refresh." , this . id ) ) ;
217
218
this . refreshContext = this . refreshContextKey . bindTo ( contextKeyService ) ;
219
+ this . treeViewDnd = this . instantiationService . createInstance ( CustomTreeViewDragAndDrop ) ;
218
220
219
221
this . _register ( this . themeService . onDidFileIconThemeChange ( ( ) => this . doRefresh ( [ this . root ] ) /** soft refresh **/ ) ) ;
220
222
this . _register ( this . themeService . onDidColorThemeChange ( ( ) => this . doRefresh ( [ this . root ] ) /** soft refresh **/ ) ) ;
@@ -246,6 +248,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
246
248
}
247
249
set dragAndDropController ( dnd : ITreeViewDragAndDropController | undefined ) {
248
250
this . _dragAndDropController = dnd ;
251
+ this . treeViewDnd . controller = dnd ;
249
252
}
250
253
251
254
private _dataProvider : ITreeViewDataProvider | undefined ;
@@ -519,7 +522,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
519
522
return e . collapsibleState !== TreeItemCollapsibleState . Expanded ;
520
523
} ,
521
524
multipleSelectionSupport : this . canSelectMany ,
522
- dnd : this . dragAndDropController ? this . instantiationService . createInstance ( CustomTreeViewDragAndDrop , this . dragAndDropController ) : undefined ,
525
+ dnd : this . treeViewDnd ,
523
526
overrideStyles : {
524
527
listBackground : this . viewLocation === ViewContainerLocation . Sidebar ? SIDE_BAR_BACKGROUND : PANEL_BACKGROUND
525
528
}
@@ -1208,17 +1211,31 @@ export class TreeView extends AbstractTreeView {
1208
1211
}
1209
1212
1210
1213
export class CustomTreeViewDragAndDrop implements ITreeDragAndDrop < ITreeItem > {
1211
- constructor ( private dndController : ITreeViewDragAndDropController , @ILabelService private readonly labelService : ILabelService ) { }
1214
+ constructor ( @ILabelService private readonly labelService : ILabelService ) { }
1215
+
1216
+ private dndController : ITreeViewDragAndDropController | undefined ;
1217
+ set controller ( controller : ITreeViewDragAndDropController | undefined ) {
1218
+ this . dndController = controller ;
1219
+ }
1212
1220
1213
1221
onDragOver ( data : IDragAndDropData , targetElement : ITreeItem , targetIndex : number , originalEvent : DragEvent ) : boolean | ITreeDragOverReaction {
1222
+ if ( ! this . dndController ) {
1223
+ return false ;
1224
+ }
1214
1225
return { accept : true , bubble : TreeDragOverBubble . Down , autoExpand : true } ;
1215
1226
}
1216
1227
1217
1228
getDragURI ( element : ITreeItem ) : string | null {
1229
+ if ( ! this . dndController ) {
1230
+ return null ;
1231
+ }
1218
1232
return element . resourceUri ? URI . revive ( element . resourceUri ) . toString ( ) : element . handle ;
1219
1233
}
1220
1234
1221
1235
getDragLabel ?( elements : ITreeItem [ ] ) : string | undefined {
1236
+ if ( ! this . dndController ) {
1237
+ return undefined ;
1238
+ }
1222
1239
if ( elements . length > 1 ) {
1223
1240
return String ( elements . length ) ;
1224
1241
}
@@ -1230,7 +1247,7 @@ export class CustomTreeViewDragAndDrop implements ITreeDragAndDrop<ITreeItem> {
1230
1247
if ( data instanceof ElementsDragAndDropData ) {
1231
1248
const elements = data . elements ;
1232
1249
if ( targetNode ) {
1233
- await this . dndController . onDrop ( elements , targetNode ) ;
1250
+ await this . dndController ? .onDrop ( elements , targetNode ) ;
1234
1251
}
1235
1252
}
1236
1253
}
0 commit comments