Browse Source

[filebrowser] Restored drag & drop onto scene tree

Clément Espeute 2 months ago
parent
commit
4814bbf1b9
3 changed files with 18 additions and 1 deletions
  1. 8 0
      hide/Ide.hx
  2. 9 0
      hide/comp/IconTree.hx
  3. 1 1
      hide/comp/SceneEditor.hx

+ 8 - 0
hide/Ide.hx

@@ -227,6 +227,14 @@ class Ide extends hide.tools.IdeData {
 			syncMousePosition(e);
 			var view = getViewAt(mouseX, mouseY);
 			var items : Array<String> = [for(f in e.dataTransfer.files) Reflect.field(f, "path")];
+			if (e.dataTransfer.types.contains(hide.view.FileBrowser.dragKey)) {
+				var data = e.dataTransfer.getData(hide.view.FileBrowser.dragKey);
+				// when in the middle of a drag (and not a drop) getData return nothing
+				if (data.length > 0) {
+					var moreItems : Array<String> = haxe.Json.parse(data);
+					items = items.concat(moreItems);
+				}
+			}
 			if(view != null && view.onDragDrop(items, drop, e)) {
 				e.preventDefault();
 				e.stopPropagation();

+ 9 - 0
hide/comp/IconTree.hx

@@ -310,6 +310,15 @@ class IconTree<T:{}> extends Component {
 		return i == null ? null : getValue(i);
 	}
 
+	public function getItemByElement(element: js.html.Element) : Null<T> {
+		var anchor = element.closest(".jstree-anchor");
+		if (anchor == null || anchor.id == null)
+			return null;
+		var trueId = StringTools.replace(anchor.id, "_anchor", "");
+		var i = map.get(trueId);
+		return i == null ? null : getValue(i);
+	}
+
 	public function setSelection( objects : Array<T> ) {
 		(element:Dynamic).jstree('deselect_all');
 		var ids = [for( o in objects ) { var v = getRev(o); if( v != null ) v.id; }];

+ 1 - 1
hide/comp/SceneEditor.hx

@@ -3943,7 +3943,7 @@ class SceneEditor {
 		var relative = ide.makeRelative(path);
 
 		var ptype = hrt.prefab.Prefab.getPrefabType(path);
-		var hover = tree.getCurrentHover();
+		var hover = tree.getItemByElement(js.Browser.document.elementFromPoint(event.clientX, event.clientY));
 		var parent = hover ?? defaultParent;
 		var index = 0;
 		if (parent == defaultParent) {