Revision: 35493
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35493
Author:   campbellbarton
Date:     2011-03-12 14:38:00 +0000 (Sat, 12 Mar 2011)
Log Message:
-----------
- BKE_idcode_iter_step() - function to step over all ID codes.
- BLO_blendhandle_get_datablock_names() now takes an arg for the total items in 
the list, saves the caller counting.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_idcode.h
    trunk/blender/source/blender/blenkernel/intern/idcode.c
    trunk/blender/source/blender/blenloader/BLO_readfile.h
    trunk/blender/source/blender/blenloader/intern/readblenentry.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp

Modified: trunk/blender/source/blender/blenkernel/BKE_idcode.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_idcode.h        2011-03-12 
14:32:30 UTC (rev 35492)
+++ trunk/blender/source/blender/blenkernel/BKE_idcode.h        2011-03-12 
14:38:00 UTC (rev 35493)
@@ -76,4 +76,12 @@
  */
 int BKE_idcode_is_valid(int code);
 
+/**
+ * Return an ID code and steps the index forward 1.
+ *
+ * @param index, start as 0.
+ * @return the code, 0 when all codes have been returned.
+ */
+int BKE_idcode_iter_step(int *index);
+
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/idcode.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/idcode.c     2011-03-12 
14:32:30 UTC (rev 35492)
+++ trunk/blender/source/blender/blenkernel/intern/idcode.c     2011-03-12 
14:38:00 UTC (rev 35493)
@@ -133,3 +133,8 @@
        
        return idt?idt->plural:NULL;
 }
+
+int BKE_idcode_iter_step(int *index)
+{
+       return (*index < nidtypes) ? idtypes[(*index)++].code : 0;
+}

Modified: trunk/blender/source/blender/blenloader/BLO_readfile.h
===================================================================
--- trunk/blender/source/blender/blenloader/BLO_readfile.h      2011-03-12 
14:32:30 UTC (rev 35492)
+++ trunk/blender/source/blender/blenloader/BLO_readfile.h      2011-03-12 
14:38:00 UTC (rev 35493)
@@ -146,13 +146,15 @@
  * 
  * @param bh The blendhandle to access.
  * @param ofblocktype The type of names to get.
+ * @param totnames The length of the returned list.
  * @return A BLI_linklist of strings. The string links
  * should be freed with malloc.
  */
        struct LinkNode*
 BLO_blendhandle_get_datablock_names(
        BlendHandle *bh, 
-       int ofblocktype);
+       int ofblocktype,
+       int *totnames);
 
 /**
  * Gets the previews of all the datablocks in a file

Modified: trunk/blender/source/blender/blenloader/intern/readblenentry.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readblenentry.c      
2011-03-12 14:32:30 UTC (rev 35492)
+++ trunk/blender/source/blender/blenloader/intern/readblenentry.c      
2011-03-12 14:38:00 UTC (rev 35493)
@@ -123,21 +123,24 @@
        fprintf(fp, "]\n");
 }
 
-LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int 
ofblocktype) 
+LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int 
ofblocktype, int *tot_names)
 {
        FileData *fd= (FileData*) bh;
        LinkNode *names= NULL;
        BHead *bhead;
+       int tot= 0;
 
        for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) 
{
                if (bhead->code==ofblocktype) {
                        char *idname= bhead_id_name(fd, bhead);
-                       
+
                        BLI_linklist_prepend(&names, strdup(idname+2));
+                       tot++;
                } else if (bhead->code==ENDB)
                        break;
        }
-       
+
+       *tot_names= tot;
        return names;
 }
 

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c  2011-03-12 
14:32:30 UTC (rev 35492)
+++ trunk/blender/source/blender/editors/space_file/filelist.c  2011-03-12 
14:38:00 UTC (rev 35493)
@@ -997,16 +997,15 @@
        previews = NULL;
        if (idcode) {
                previews= BLO_blendhandle_get_previews(filelist->libfiledata, 
idcode);
-               names= 
BLO_blendhandle_get_datablock_names(filelist->libfiledata, idcode);
+               names= 
BLO_blendhandle_get_datablock_names(filelist->libfiledata, idcode, &nnames);
                /* ugh, no rewind, need to reopen */
                BLO_blendhandle_close(filelist->libfiledata);
                filelist->libfiledata= BLO_blendhandle_from_file(dir);
                
        } else {
                names= 
BLO_blendhandle_get_linkable_groups(filelist->libfiledata);
+               nnames= BLI_linklist_length(names);
        }
-       
-       nnames= BLI_linklist_length(names);
 
        filelist->numfiles= nnames + 1;
        filelist->filelist= malloc(filelist->numfiles * 
sizeof(*filelist->filelist));

Modified: trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp      
2011-03-12 14:32:30 UTC (rev 35492)
+++ trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp      
2011-03-12 14:38:00 UTC (rev 35493)
@@ -984,9 +984,10 @@
 
        /* here appending/linking starts */
        main_tmp = BLO_library_append_begin(C, &bpy_openlib, (char *)path);
+
+       int totnames_dummy;
+       names = BLO_blendhandle_get_datablock_names( bpy_openlib, idcode, 
&totnames_dummy);
        
-       names = BLO_blendhandle_get_datablock_names( bpy_openlib, idcode);
-       
        int i=0;
        LinkNode *n= names;
        while(n) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to