Parcourir la source

Support dnd from FileTree

trethaller il y a 7 ans
Parent
commit
80a4083d31
3 fichiers modifiés avec 31 ajouts et 7 suppressions
  1. 27 2
      hide/ui/Ide.hx
  2. 1 1
      hide/ui/View.hx
  3. 3 4
      hide/view/l3d/Level3D.hx

+ 27 - 2
hide/ui/Ide.hx

@@ -91,7 +91,8 @@ class Ide {
 		body.ondragover = function(e:js.html.DragEvent) {
 			syncMousePosition(e);
 			var view = getViewAt(mouseX, mouseY);
-			if(view != null && view.onDrop(true, e)) {
+			var items : Array<String> = [for(f in e.dataTransfer.files) Reflect.field(f, "path")];
+			if(view != null && view.onDrop(true, items)) {
 				e.preventDefault();
 				e.stopPropagation();
 			}
@@ -100,7 +101,8 @@ class Ide {
 		body.ondrop = function(e:js.html.DragEvent) {
 			syncMousePosition(e);
 			var view = getViewAt(mouseX, mouseY);
-			if(view != null && view.onDrop(false, e)) {
+			var items : Array<String>  = [for(f in e.dataTransfer.files) Reflect.field(f, "path")];
+			if(view != null && view.onDrop(false, items)) {
 				e.preventDefault();
 				e.stopPropagation();
 			}
@@ -112,6 +114,29 @@ class Ide {
 			return false;
 		}
 
+		// Listen to FileTree dnd
+		new Element(window.window.document).on("dnd_stop.vakata.jstree", function(e, data) {
+			if(data.data.jstree != null) {
+				for( v in views ) {
+					var ft = Std.instance(v, hide.view.FileTree);
+					if(ft != null) @:privateAccess {
+						if(ft.tree.root[0] == data.data.origin.element[0]) {
+							var node = data.data.origin.get_node(data.element);
+							var item = ft.tree.map.get(node.id);
+							if(item != null) {
+								var path = item.value;
+								var view = getViewAt(mouseX, mouseY);
+								if(view != null) {
+									view.onDrop(false, [path]);
+								}
+							}
+							break;
+						}
+					}
+				}
+			}
+		});
+
 		// dispatch global keys based on mouse position
 		new Element(body).keydown(function(e) {
 			var view = getViewAt(mouseX, mouseY);

+ 1 - 1
hide/ui/View.hx

@@ -136,7 +136,7 @@ class View<T> extends hide.comp.Component {
 	public function onResize() {
 	}
 
-	public function onDrop(over : Bool, e:js.html.DragEvent) {
+	public function onDrop(over : Bool, items : Array<String>) {
 		return false;
 	}
 

+ 3 - 4
hide/view/l3d/Level3D.hx

@@ -776,12 +776,11 @@ class Level3D extends FileView {
 		}
 	}
 
-	override function onDrop(over: Bool, e:js.html.DragEvent) {
+	override function onDrop(over: Bool, items : Array<String>) {
 		var supported = ["fbx"];
 		var models = [];
-		for(f in e.dataTransfer.files) {
-			var path = Reflect.field(f, "path");
-			var ext = haxe.io.Path.extension(path);
+		for(path in items) {
+			var ext = haxe.io.Path.extension(path).toLowerCase();
 			if(supported.indexOf(ext) >= 0) {
 				models.push(path);
 			}