Revision: 60835
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60835
Author:   elubie
Date:     2013-10-17 20:17:03 +0000 (Thu, 17 Oct 2013)
Log Message:
-----------
== asset browser ==

* Load assets in the background to not block UI
* Update notifications likely will need to be improved

Modified Paths:
--------------
    branches/asset-browser/source/blender/blenkernel/intern/assets.c
    branches/asset-browser/source/blender/blenloader/BLO_readfile.h
    branches/asset-browser/source/blender/blenloader/intern/readblenentry.c
    branches/asset-browser/source/blender/blenloader/intern/readfile.c
    branches/asset-browser/source/blender/blenloader/intern/writefile.c
    branches/asset-browser/source/blender/editors/listview/contentlist.c
    branches/asset-browser/source/blender/editors/listview/contentlist.h
    branches/asset-browser/source/blender/editors/listview/contentlist_intern.h
    branches/asset-browser/source/blender/editors/listview/listview_ops.c
    branches/asset-browser/source/blender/editors/space_asset/assetlist.c
    branches/asset-browser/source/blender/editors/space_asset/space_asset.c
    branches/asset-browser/source/blender/makesdna/DNA_asset_types.h
    branches/asset-browser/source/blender/makesdna/DNA_space_types.h
    branches/asset-browser/source/blender/makesrna/intern/rna_asset.c
    branches/asset-browser/source/blender/makesrna/intern/rna_space.c
    branches/asset-browser/source/blender/windowmanager/WM_api.h

Modified: branches/asset-browser/source/blender/blenkernel/intern/assets.c
===================================================================
--- branches/asset-browser/source/blender/blenkernel/intern/assets.c    
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/blenkernel/intern/assets.c    
2013-10-17 20:17:03 UTC (rev 60835)
@@ -105,23 +105,24 @@
        if (libfiledata == NULL) return;
 
        
-       names= BLO_blendhandle_get_linkable_assets(libfiledata);
-       nnames= BLI_linklist_length(names);
-
-       for (l= names; l; l= l->next) {
-               char *blockname= l->link;
-               const char *group= BKE_idcode_to_name(GS(blockname));
-               if (group) {
-                       asset = MEM_callocN(sizeof(bAsset), "asset item");
-                       BLI_strncpy(asset->group, group, sizeof(asset->group));
-                       BLI_strncpy(asset->name, blockname+2, 
sizeof(asset->name));
-                       BLI_strncpy(asset->lib, filename, sizeof(asset->lib));
-                       BLI_snprintf(asset->path, sizeof(asset->path), 
"%s/%s/%s", asset->lib, asset->group, asset->name);
-                       BLI_addtail(assets, asset);
+       names= BLO_blendhandle_get_linkable_assets(libfiledata, false);
+       if (names) {
+               nnames= BLI_linklist_length(names);
+               for (l= names; l; l= l->next) {
+                       char *blockname= l->link;
+                       const char *group= BKE_idcode_to_name(GS(blockname));
+                       if (group) {
+                               asset = MEM_callocN(sizeof(bAsset), "asset 
item");
+                               BLI_strncpy(asset->group, group, 
sizeof(asset->group));
+                               BLI_strncpy(asset->name, blockname+2, 
sizeof(asset->name));
+                               BLI_strncpy(asset->lib, filename, 
sizeof(asset->lib));
+                               BLI_snprintf(asset->path, sizeof(asset->path), 
"%s/%s/%s", asset->lib, asset->group, asset->name);
+                               BLI_addtail(assets, asset);
+                       }
                }
+               
+               BLI_linklist_free(names, free);
        }
-       
-       BLI_linklist_free(names, free);
        BLO_blendhandle_close(libfiledata);
 
        BLI_strncpy(bmain->name, current_filename, sizeof(bmain->name));        
// prevent bmain->name to change
@@ -240,5 +241,10 @@
 
 void BKE_asset_dir_remove(struct bAssetCollection *collection, struct 
bAssetDir *dir)
 {
+       BLI_freelistN(&dir->assets);
        BLI_freelinkN(&collection->asset_dirs, dir);
+
+       /* signal that the collection has been changed and the contentlist
+          needs to be updated */
+       collection->changed = 1;
 }

Modified: branches/asset-browser/source/blender/blenloader/BLO_readfile.h
===================================================================
--- branches/asset-browser/source/blender/blenloader/BLO_readfile.h     
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/blenloader/BLO_readfile.h     
2013-10-17 20:17:03 UTC (rev 60835)
@@ -161,7 +161,7 @@
  * \return A BLI_linklist of strings. The string links
  * should be freed with free (they were allocated with malloc).
  */
-struct LinkNode *BLO_blendhandle_get_linkable_assets(struct BlendHandle *bh);
+struct LinkNode *BLO_blendhandle_get_linkable_assets(struct BlendHandle *bh, 
bool onlyAssets);
 
 /**
  * Gets the previews of all the datablocks in a file

Modified: 
branches/asset-browser/source/blender/blenloader/intern/readblenentry.c
===================================================================
--- branches/asset-browser/source/blender/blenloader/intern/readblenentry.c     
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/blenloader/intern/readblenentry.c     
2013-10-17 20:17:03 UTC (rev 60835)
@@ -219,7 +219,7 @@
        return previews;
 }
 
-LinkNode *BLO_blendhandle_get_linkable_assets(BlendHandle *bh) 
+LinkNode *BLO_blendhandle_get_linkable_assets(BlendHandle *bh, bool 
onlyAssets) 
 {
        FileData *fd= (FileData*) bh;
        LinkNode *names= NULL;
@@ -231,8 +231,12 @@
                }
                else if (BKE_idcode_is_linkable(bhead->code)) {
                        char *idname= bhead_id_name(fd, bhead);
-                       short is_asset= bhead_id_asset(fd, bhead);
-                       if (is_asset) {
+                       if (onlyAssets) {
+                               short is_asset= bhead_id_asset(fd, bhead);
+                               if (is_asset) {
+                                       BLI_linklist_prepend(&names, 
strdup(idname));
+                               }
+                       } else {
                                BLI_linklist_prepend(&names, strdup(idname));
                        }
                }

Modified: branches/asset-browser/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/asset-browser/source/blender/blenloader/intern/readfile.c  
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/blenloader/intern/readfile.c  
2013-10-17 20:17:03 UTC (rev 60835)
@@ -9958,8 +9958,16 @@
 
 short bhead_id_asset(FileData *fd, BHead *bhead)
 {
-       short *sp = (short *)(((char *)(bhead+1)) + fd->id_asset_offs);
-       return (*sp);
+       short *sp;
+
+       if (fd->id_asset_offs > 0) {
+               sp = (short *)(((char *)(bhead+1)) + fd->id_asset_offs);
+               return (*sp);
+       }
+       else {
+               return 0;
+       }
+       
 }
 
 static ID *is_yet_read(FileData *fd, Main *mainvar, BHead *bhead)

Modified: branches/asset-browser/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/asset-browser/source/blender/blenloader/intern/writefile.c 
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/blenloader/intern/writefile.c 
2013-10-17 20:17:03 UTC (rev 60835)
@@ -3061,9 +3061,15 @@
 static void write_asset_dirs(WriteData *wd, ListBase *asset_dirs) 
 {
        bAssetDir *asset_dir;
+       bAsset *asset;
+
        for(asset_dir = asset_dirs->first; asset_dir; asset_dir= 
asset_dir->next ) {
                writestruct(wd, DATA, "bAssetDir", 1, asset_dir);
 
+               for (asset = asset_dir->assets.first; asset; asset = 
asset->next) {
+                       writestruct(wd, DATA, "bAsset", 1, asset);
+               }
+
                /* Write ID Properties -- and copy this comment EXACTLY for 
easy finding
                   of library blocks that implement this.*/
                if (asset_dir->properties) {

Modified: branches/asset-browser/source/blender/editors/listview/contentlist.c
===================================================================
--- branches/asset-browser/source/blender/editors/listview/contentlist.c        
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/editors/listview/contentlist.c        
2013-10-17 20:17:03 UTC (rev 60835)
@@ -105,9 +105,9 @@
        contentlist_filter(cl);
 }
 
-void contentlist_read(struct ContentList *cl, struct bContext *C)
+void contentlist_read(struct ContentList *cl, void *datasource)
 {
-       cl->f_read(cl, C);
+       cl->f_read(cl, datasource);
        contentlist_filter(cl);
        cl->active = cl->hilite = -1;
 }

Modified: branches/asset-browser/source/blender/editors/listview/contentlist.h
===================================================================
--- branches/asset-browser/source/blender/editors/listview/contentlist.h        
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/editors/listview/contentlist.h        
2013-10-17 20:17:03 UTC (rev 60835)
@@ -92,7 +92,7 @@
 int                 contentlist_empty(struct ContentList *cl);
 void                contentlist_sort(struct ContentList *cl, int col, short 
ascending);
 void                contentlist_filter(struct ContentList *cl);
-void                contentlist_read(struct ContentList *cl, struct bContext 
*C);
+void                contentlist_read(struct ContentList *cl, void *datasource);
 int                    contentlist_num_entries(struct ContentList *cl);
 int                 contentlist_num_columns(struct ContentList *cl);
 void                contentlist_filters_clear(struct ContentList *cl);

Modified: 
branches/asset-browser/source/blender/editors/listview/contentlist_intern.h
===================================================================
--- branches/asset-browser/source/blender/editors/listview/contentlist_intern.h 
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/editors/listview/contentlist_intern.h 
2013-10-17 20:17:03 UTC (rev 60835)
@@ -66,7 +66,7 @@
        int active;
        int hilite;
 
-       void           (*f_read)(struct ContentList *, struct bContext *);
+       void           (*f_read)(struct ContentList *, void *);
        void           (*f_free)(struct ContentList *);
        void           (*f_sort)(struct ContentList *, int, short);
        char *             (*f_entry_get_formatted)(struct ContentList *, int, 
int);

Modified: branches/asset-browser/source/blender/editors/listview/listview_ops.c
===================================================================
--- branches/asset-browser/source/blender/editors/listview/listview_ops.c       
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/editors/listview/listview_ops.c       
2013-10-17 20:17:03 UTC (rev 60835)
@@ -155,7 +155,7 @@
 
 }
 
-static int listview_border_select_modal(bContext *C, wmOperator *op, wmEvent 
*event)
+static int listview_border_select_modal(bContext *C, wmOperator *op, const 
wmEvent *event)
 {
        ARegion *ar = CTX_wm_region(C);
        ScrArea *sa = CTX_wm_area(C);
@@ -238,7 +238,7 @@
        WM_operator_properties_gesture_border(ot, 1);
 }
 
-static int listview_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int listview_select_invoke(bContext *C, wmOperator *op, const wmEvent 
*event)
 {
        ARegion *ar = CTX_wm_region(C);
        struct ContentList *cl = ar->regiondata;
@@ -369,7 +369,7 @@
        return (active_file != -1) && (active_file != origfile);
 }
 
-static int listview_highlight_invoke(bContext *C, wmOperator *UNUSED(op), 
wmEvent *event)
+static int listview_highlight_invoke(bContext *C, wmOperator *UNUSED(op), 
const wmEvent *event)
 {
        ARegion *ar = CTX_wm_region(C);
        

Modified: branches/asset-browser/source/blender/editors/space_asset/assetlist.c
===================================================================
--- branches/asset-browser/source/blender/editors/space_asset/assetlist.c       
2013-10-17 19:57:14 UTC (rev 60834)
+++ branches/asset-browser/source/blender/editors/space_asset/assetlist.c       
2013-10-17 20:17:03 UTC (rev 60835)
@@ -33,13 +33,13 @@
 /* global includes */
 #include "MEM_guardedalloc.h"
 
-#include "BKE_main.h"
 #include "BKE_global.h"
 #include "BKE_utildefines.h"
 #include "BKE_assets.h"
 #include "BKE_context.h"
 #include "BKE_idcode.h"
 
+#include "BLI_array.h"
 #include "BLI_listbase.h"
 #include "BLI_string.h"
 #include "BLI_utildefines.h"
@@ -314,24 +314,29 @@
 static void assetlist_free_entries(struct ContentList *cl)
 {
        int i;
-       for (i = 0; i < cl->num_entries; ++i) {
-               struct ContentListEntry *le = &cl->entries[i];
-               MEM_freeN(le->data);
-               le->data = NULL;
-               if (le->image) {                        
-                       IMB_freeImBuf(le->image);
-                       le->image = NULL;
+       if (cl->entries != NULL) {
+               printf("assetlist_free: deallocating %d entries\n", 
cl->num_entries);
+               for (i = 0; i < cl->num_entries; ++i) {

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to