Browse Source

Start of drag drop to prefab

Josh Engebretson 10 years ago
parent
commit
928fe5ed4e

+ 1 - 26
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/HierarchyFrame.ts

@@ -3,32 +3,6 @@ class HierarchyFrame extends Atomic.UIWidget {
 
 
     hierList: Atomic.UIListView;
     hierList: Atomic.UIListView;
 
 
-    /*
-
-    super();
-
-    this.load("AtomicEditor/editor/ui/projectframe.tb.txt");
-
-    this.gravity = UI.GRAVITY_TOP_BOTTOM;
-
-    var projectviewcontainer = parent.getWidget("projectviewcontainer");
-
-    projectviewcontainer.addChild(this);
-
-    var foldercontainer = this.getWidget("foldercontainer");
-
-    var folderList = this.folderList = new Atomic.UIListView();
-
-    folderList.rootList.id = "folderList_";
-
-    foldercontainer.addChild(folderList);
-
-    // events
-    this.subscribeToEvent("ProjectLoaded", (data) => this.handleProjectLoaded(data));
-    this.subscribeToEvent("DragEnded", (data) => this.handleDragEnded(data));
-
-    */
-
     constructor(parent: Atomic.UIWidget) {
     constructor(parent: Atomic.UIWidget) {
 
 
         super();
         super();
@@ -108,6 +82,7 @@ class HierarchyFrame extends Atomic.UIWidget {
 
 
                 var selectedId = Number(list.selectedItemID);
                 var selectedId = Number(list.selectedItemID);
                 var node = this.scene.getNode(selectedId);
                 var node = this.scene.getNode(selectedId);
+                this.hierList.rootList.dragObject = new Atomic.UIDragObject(node, node.name.length ? node.name : "(Anonymous)");
                 this.sendEvent("EditorActiveNodeChange", { node: node });
                 this.sendEvent("EditorActiveNodeChange", { node: node });
                 return false;
                 return false;
 
 

+ 50 - 27
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ProjectFrame.ts

@@ -71,16 +71,16 @@ class ProjectFrame extends ScriptWidget {
 
 
                 if (asset) {
                 if (asset) {
 
 
-                  if (asset.isFolder()) {
+                    if (asset.isFolder()) {
 
 
-                    this.folderList.selectItemByID(id);
-                    this.refreshContent(asset);
+                        this.folderList.selectItemByID(id);
+                        this.refreshContent(asset);
 
 
-                  } else {
+                    } else {
 
 
-                    this.sendEvent("EditResource", { "path": asset.path });
+                        this.sendEvent("EditResource", { "path": asset.path });
 
 
-                  }
+                    }
 
 
                 }
                 }
 
 
@@ -92,28 +92,57 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    handleDragEnded(data) {
+    rescan(asset:ToolCore.Asset) {
+
+      var db = ToolCore.getAssetDatabase();
 
 
-      var dragObject = <Atomic.UIDragObject> data.dragObject;
-      var filenames = dragObject.filenames;
+      db.scan();
+      this.refresh();
+      this.refreshContent(asset);
 
 
-      if (!filenames.length)
-        return;
+    }
 
 
-      // if the drop target is the folderList's root select widget
-      var rootList = this.folderList.rootList;
+    handleDragEnded(data) {
 
 
-      var hoverID = rootList.hoverItemID;
+        // if the drop target is the folderList's root select widget
+        var rootList = this.folderList.rootList;
+        var hoverID = rootList.hoverItemID;
 
 
-      if ( hoverID != "") {
+        if (hoverID == "")
+            return;
 
 
         var db = ToolCore.getAssetDatabase();
         var db = ToolCore.getAssetDatabase();
-        var fileSystem = Atomic.getFileSystem();
         var asset = db.getAssetByGUID(hoverID);
         var asset = db.getAssetByGUID(hoverID);
 
 
-        if (asset && asset.isFolder) {
+        if (!asset || !asset.isFolder)
+            return;
+
+        var dragObject = <Atomic.UIDragObject> data.dragObject;
+        if (dragObject.object && dragObject.object.typeName == "Node") {
+
+            var node = <Atomic.Node> dragObject.object;
+            var destFilename = Atomic.addTrailingSlash(asset.path);
+            destFilename += node.name + ".prefab";
+
+            var file = new Atomic.File(destFilename, Atomic.FILE_WRITE);
+            node.saveXML(file);
+
+            this.rescan(asset);
 
 
-          for (var i in filenames) {
+            return;
+
+        }
+
+        // dropped some files?
+        var filenames = dragObject.filenames;
+
+        if (!filenames.length)
+            return;
+
+        var fileSystem = Atomic.getFileSystem();
+
+
+        for (var i in filenames) {
 
 
             var srcFilename = filenames[i];
             var srcFilename = filenames[i];
 
 
@@ -125,15 +154,9 @@ class ProjectFrame extends ScriptWidget {
 
 
             fileSystem.copy(srcFilename, destFilename);
             fileSystem.copy(srcFilename, destFilename);
 
 
-          }
-
-          db.scan();
-          this.refresh();
-          this.refreshContent(asset);
-
         }
         }
 
 
-      }
+        this.rescan(asset);
 
 
     }
     }
 
 
@@ -143,7 +166,7 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    private refreshContent(folder:ToolCore.Asset) {
+    private refreshContent(folder: ToolCore.Asset) {
 
 
         var db = ToolCore.getAssetDatabase();
         var db = ToolCore.getAssetDatabase();
 
 
@@ -209,7 +232,7 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    private createButtonLayout(asset:ToolCore.Asset): Atomic.UILayout {
+    private createButtonLayout(asset: ToolCore.Asset): Atomic.UILayout {
 
 
         var system = ToolCore.getToolSystem();
         var system = ToolCore.getToolSystem();
         var project = system.project;
         var project = system.project;

+ 5 - 1
Source/Atomic/UI/UIDragDrop.cpp

@@ -110,7 +110,11 @@ void UIDragDrop::HandleMouseDown(StringHash eventType, VariantMap& eventData)
         if (widget->GetType() == UISelectList::GetTypeStatic())
         if (widget->GetType() == UISelectList::GetTypeStatic())
         {
         {
             // handle select drag
             // handle select drag
-            LOGINFOF("DRAG Select: %s", widget->GetTypeName().CString());
+
+            dragObject_ = widget->GetDragObject();
+
+            LOGINFOF("DRAG Select: %s, DragObject: %s", widget->GetTypeName().CString(),
+                                                        dragObject_.Null() ? "NULL" : dragObject_->GetTypeName().CString());
         }
         }
         else
         else
         {
         {

+ 15 - 0
Source/AtomicJS/Javascript/JSScene.cpp

@@ -130,6 +130,19 @@ static int Node_GetChildAtIndex(duk_context* ctx)
     return 1;
     return 1;
 }
 }
 
 
+static int Node_SaveXML(duk_context* ctx)
+{
+    File* file = js_to_class_instance<File>(ctx, 0, 0);
+
+    duk_push_this(ctx);
+    Node* node = js_to_class_instance<Node>(ctx, -1, 0);
+
+    duk_push_boolean(ctx, node->SaveXML(*file) ? 1 : 0);
+
+    return 1;
+}
+
+
 static int Scene_LoadXML(duk_context* ctx)
 static int Scene_LoadXML(duk_context* ctx)
 {
 {
     JSVM* vm = JSVM::GetJSVM(ctx);
     JSVM* vm = JSVM::GetJSVM(ctx);
@@ -179,6 +192,8 @@ void jsapi_init_scene(JSVM* vm)
     duk_put_prop_string(ctx, -2, "createJSComponent");
     duk_put_prop_string(ctx, -2, "createJSComponent");
     duk_push_c_function(ctx, Node_GetChildAtIndex, 1);
     duk_push_c_function(ctx, Node_GetChildAtIndex, 1);
     duk_put_prop_string(ctx, -2, "getChildAtIndex");
     duk_put_prop_string(ctx, -2, "getChildAtIndex");
+    duk_push_c_function(ctx, Node_SaveXML, 1);
+    duk_put_prop_string(ctx, -2, "saveXML");
 
 
     duk_pop(ctx);
     duk_pop(ctx);
 
 

+ 1 - 0
Source/AtomicJS/Packages/Atomic/Scene.json

@@ -21,6 +21,7 @@
 	"typescript_decl" : {
 	"typescript_decl" : {
 
 
 		"Node" : [
 		"Node" : [
+			"saveXML(file:File):boolean;",
 			"getChildrenWithName(name:string, recursive?:boolean):Node[];",
 			"getChildrenWithName(name:string, recursive?:boolean):Node[];",
 			"getChildrenWithComponent(componentType:string, recursive?:boolean):Node[];",
 			"getChildrenWithComponent(componentType:string, recursive?:boolean):Node[];",
 			"getComponents(componentType?:string, recursive?:boolean):Component[];",
 			"getComponents(componentType?:string, recursive?:boolean):Component[];",