Browse Source

Treat resources folder like other asset database folders, more drag and drop work

Josh Engebretson 10 years ago
parent
commit
7868e70a84

+ 60 - 44
Script/AtomicEditor/ui/ProjectFrame.ts

@@ -11,8 +11,8 @@ class ProjectFrame extends ScriptWidget {
     folderList: Atomic.UIListView;
     folderList: Atomic.UIListView;
     menu: ProjectFrameMenu;
     menu: ProjectFrameMenu;
     currentFolder: ToolCore.Asset;
     currentFolder: ToolCore.Asset;
-    resourcesID: number;
-    assetGUIDToItemID =  {};
+    assetGUIDToItemID = {};
+    resourcesID:number = -1;
 
 
     constructor(parent: Atomic.UIWidget) {
     constructor(parent: Atomic.UIWidget) {
 
 
@@ -34,8 +34,6 @@ class ProjectFrame extends ScriptWidget {
 
 
         folderList.rootList.id = "folderList_";
         folderList.rootList.id = "folderList_";
 
 
-        this.resourcesID = folderList.addRootItem("Resources", "Folder.icon", "0");
-
         foldercontainer.addChild(folderList);
         foldercontainer.addChild(folderList);
 
 
         // events
         // events
@@ -58,8 +56,20 @@ class ProjectFrame extends ScriptWidget {
 
 
     handleResourceRemoved(ev: ToolCore.ResourceRemovedEvent) {
     handleResourceRemoved(ev: ToolCore.ResourceRemovedEvent) {
 
 
-      var folderList = this.folderList;
-      folderList.deleteItemByID(ev.guid);
+        var folderList = this.folderList;
+        folderList.deleteItemByID(ev.guid);
+
+        var container: Atomic.UILayout = <Atomic.UILayout> this.getWidget("contentcontainer");
+
+        for (var widget = container.firstChild; widget; widget = widget.next) {
+
+            if (widget.id == ev.guid) {
+
+                container.removeChild(widget);
+                break;
+            }
+
+        }
 
 
     }
     }
 
 
@@ -76,8 +86,8 @@ class ProjectFrame extends ScriptWidget {
 
 
             if (!parent) {
             if (!parent) {
 
 
-                //  root resource folder
-                var id = folderList.addChildItem(this.resourcesID, asset.name, "Folder.icon", asset.guid);
+                var id = folderList.addRootItem(asset.name, "Folder.icon", asset.guid);
+                this.resourcesID = id;
                 this.assetGUIDToItemID[asset.guid] = id;
                 this.assetGUIDToItemID[asset.guid] = id;
 
 
             } else {
             } else {
@@ -87,46 +97,33 @@ class ProjectFrame extends ScriptWidget {
                 this.assetGUIDToItemID[asset.guid] = id;
                 this.assetGUIDToItemID[asset.guid] = id;
             }
             }
 
 
-        }
-
-    }
-
-    /*
-    handleResourceFolderCreated(ev: EditorEvents.ResourceFolderCreatedEvent) {
-
-      var db = ToolCore.getAssetDatabase();
-      db.scan();
+        } else if (parent == this.currentFolder) {
 
 
-      this.refresh();
-
-      var asset = db.getAssetByPath(ev.path);
-
-      console.log("Asset: ", asset, " : ", ev.path, " : ", ev.navigate);
+            var container: Atomic.UILayout = <Atomic.UILayout> this.getWidget("contentcontainer");
+            container.addChild(this.createButtonLayout(asset));
 
 
-      if (asset && ev.navigate)
-        this.selectPath(asset.path);
+        }
 
 
     }
     }
-    */
 
 
     handleWidgetEvent(data: Atomic.UIWidgetEvent): boolean {
     handleWidgetEvent(data: Atomic.UIWidgetEvent): boolean {
 
 
         if (data.type == Atomic.UI_EVENT_TYPE_RIGHT_POINTER_UP) {
         if (data.type == Atomic.UI_EVENT_TYPE_RIGHT_POINTER_UP) {
 
 
             var id = data.target.id;
             var id = data.target.id;
+            var db = ToolCore.getAssetDatabase();
+            var asset: ToolCore.Asset;
 
 
-            if (id == "folderList_") {
-
-              var db = ToolCore.getAssetDatabase();
-              var asset = db.getAssetByGUID(this.folderList.hoverItemID);
-
-              if (asset && asset.isFolder()) {
+            if (id == "folderList_")
+                asset = db.getAssetByGUID(this.folderList.hoverItemID);
+            else
+                asset = db.getAssetByGUID(id);
 
 
-                this.menu.createFolderContextMenu(this, "folder context menu", asset, data.x, data.y);
+            if (asset) {
 
 
-              }
+                this.menu.createAssetContextMenu(this, asset, data.x, data.y);
 
 
-              return true;
+                return true;
 
 
             }
             }
 
 
@@ -222,17 +219,35 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    handleDragEnded(data) {
+    handleDragEnded(data: Atomic.DragEndedEvent) {
 
 
-        // if the drop target is the folderList's root select widget
-        var rootList = this.folderList.rootList;
-        var hoverID = rootList.hoverItemID;
+        var asset: ToolCore.Asset;
 
 
-        if (hoverID == "")
-            return;
+        if (data.target) {
 
 
-        var db = ToolCore.getAssetDatabase();
-        var asset = db.getAssetByGUID(hoverID);
+            var container: Atomic.UILayout = <Atomic.UILayout> this.getWidget("contentcontainer");
+
+            if (data.target.id == "contentcontainerscroll" || container.isAncestorOf(data.target)) {
+
+                asset = this.currentFolder;
+
+            }
+
+        }
+
+        if (!asset) {
+
+            // if the drop target is the folderList's root select widget
+            var rootList = this.folderList.rootList;
+            var hoverID = rootList.hoverItemID;
+
+            if (hoverID == "")
+                return;
+
+            var db = ToolCore.getAssetDatabase();
+            asset = db.getAssetByGUID(hoverID);
+
+        }
 
 
         if (!asset || !asset.isFolder)
         if (!asset || !asset.isFolder)
             return;
             return;
@@ -283,8 +298,8 @@ class ProjectFrame extends ScriptWidget {
 
 
     handleProjectLoaded(data) {
     handleProjectLoaded(data) {
 
 
-      this.folderList.rootList.value = 0;
-      this.folderList.setExpanded(this.resourcesID, true);
+        this.folderList.rootList.value = 0;
+        this.folderList.setExpanded(this.resourcesID, true);
 
 
     }
     }
 
 
@@ -338,6 +353,7 @@ class ProjectFrame extends ScriptWidget {
         }
         }
 
 
         var blayout = new Atomic.UILayout();
         var blayout = new Atomic.UILayout();
+        blayout.id = asset.guid;
 
 
         blayout.gravity = Atomic.UI_GRAVITY_LEFT;
         blayout.gravity = Atomic.UI_GRAVITY_LEFT;
 
 

+ 35 - 13
Script/AtomicEditor/ui/ProjectFrameMenu.ts

@@ -10,7 +10,8 @@ class ProjectFrameMenus extends Atomic.ScriptObject {
 
 
         super();
         super();
 
 
-        MenuItemSources.createMenuItemSource("project context folder", folderContextItems);
+        MenuItemSources.createMenuItemSource("asset context folder", assetFolderContextItems);
+        MenuItemSources.createMenuItemSource("asset context general", assetGeneralContextItems);
         MenuItemSources.createMenuItemSource("project create items", createItems);
         MenuItemSources.createMenuItemSource("project create items", createItems);
 
 
         this.subscribeToEvent(EditorEvents.ContentFolderChanged, (ev: EditorEvents.ContentFolderChangedEvent) => {
         this.subscribeToEvent(EditorEvents.ContentFolderChanged, (ev: EditorEvents.ContentFolderChangedEvent) => {
@@ -19,22 +20,22 @@ class ProjectFrameMenus extends Atomic.ScriptObject {
 
 
     }
     }
 
 
-    handleFolderContextMenu(target: Atomic.UIWidget, refid: string) {
+    handleAssetContextMenu(target: Atomic.UIWidget, refid: string) {
 
 
-        if (target.id == "folder context menu") {
+        if (target.id == "asset context menu") {
 
 
-            var folder = <ToolCore.Asset> target['folder'];
+            var asset = <ToolCore.Asset> target['asset'];
 
 
-            if (refid == "delete_folder") {
+            if (refid == "delete_asset") {
 
 
-                EditorUI.getModelOps().showResourceDelete(folder);
+                EditorUI.getModelOps().showResourceDelete(asset);
 
 
                 return true;
                 return true;
             }
             }
 
 
             if (refid == "create_folder") {
             if (refid == "create_folder") {
 
 
-                EditorUI.getModelOps().showCreateFolder(folder.path);
+                EditorUI.getModelOps().showCreateFolder(asset.path);
 
 
                 return true;
                 return true;
 
 
@@ -46,9 +47,24 @@ class ProjectFrameMenus extends Atomic.ScriptObject {
 
 
     createFolderContextMenu(parent: Atomic.UIWidget, id: string, folder: ToolCore.Asset, x: number, y: number) {
     createFolderContextMenu(parent: Atomic.UIWidget, id: string, folder: ToolCore.Asset, x: number, y: number) {
 
 
-        var menu = new Atomic.UIMenuWindow(parent, id);
-        menu['folder'] = folder;
-        var src = MenuItemSources.getMenuItemSource("project context folder");
+
+    }
+
+    createAssetContextMenu(parent: Atomic.UIWidget, asset: ToolCore.Asset, x: number, y: number) {
+
+        var menu = new Atomic.UIMenuWindow(parent, "asset context menu");
+        menu['asset'] = asset;
+
+        var srcName: string;
+
+        if (asset.isFolder()) {
+            srcName = "asset context folder";
+        } else {
+            srcName = "asset context general";
+        }
+
+
+        var src = MenuItemSources.getMenuItemSource(srcName);
         menu.show(src, x, y);
         menu.show(src, x, y);
 
 
     }
     }
@@ -57,7 +73,7 @@ class ProjectFrameMenus extends Atomic.ScriptObject {
 
 
         if (!target || !refid) return;
         if (!target || !refid) return;
 
 
-        if (this.handleFolderContextMenu(target, refid)) {
+        if (this.handleAssetContextMenu(target, refid)) {
 
 
             return true;
             return true;
 
 
@@ -94,11 +110,17 @@ export = ProjectFrameMenus;
 // initialization
 // initialization
 var StringID = strings.StringID;
 var StringID = strings.StringID;
 
 
-var folderContextItems = {
+var assetGeneralContextItems = {
+    "Reveal in Finder": ["reveal_folder", undefined, ""],
+    "-1": null,
+    "Delete": ["delete_asset", undefined, ""]
+};
+
+var assetFolderContextItems = {
     "Create Folder": ["create_folder", undefined, "Folder.icon"],
     "Create Folder": ["create_folder", undefined, "Folder.icon"],
     "Reveal in Finder": ["reveal_folder", undefined, ""],
     "Reveal in Finder": ["reveal_folder", undefined, ""],
     "-1": null,
     "-1": null,
-    "Delete": ["delete_folder", undefined, "FolderDeleteBitmap"]
+    "Delete": ["delete_asset", undefined, "FolderDeleteBitmap"]
 };
 };
 
 
 var createItems = {
 var createItems = {

+ 2 - 0
Source/ToolCore/Assets/AssetDatabase.cpp

@@ -248,6 +248,8 @@ void AssetDatabase::Scan()
 
 
     Vector<String> filteredResults;
     Vector<String> filteredResults;
 
 
+    filteredResults.Push(RemoveTrailingSlash(resourcePath));
+
     for (unsigned i = 0; i < allResults.Size(); i++)
     for (unsigned i = 0; i < allResults.Size(); i++)
     {
     {
         allResults[i] = resourcePath + allResults[i];
         allResults[i] = resourcePath + allResults[i];