From ad4fc20ec9efa2352021b06402807d0947912458 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 10 Aug 2010 15:14:19 +0000 Subject: moved idcode functions into their own file (was added as a todo in the comments), these were mixed in with file reading code - BLO_readfile.h bot these functions are not spesific to reading. --- source/blender/blenkernel/BKE_idcode.h | 75 ++++++++++++ source/blender/blenkernel/intern/idcode.c | 128 +++++++++++++++++++++ source/blender/blenloader/BLO_readfile.h | 32 ------ source/blender/blenloader/intern/readblenentry.c | 113 +----------------- source/blender/blenloader/intern/readfile.c | 9 +- .../blender/editors/space_console/space_console.c | 5 +- source/blender/editors/space_file/filelist.c | 3 +- source/blender/editors/space_file/filesel.c | 2 - source/blender/windowmanager/intern/wm_operators.c | 3 +- 9 files changed, 220 insertions(+), 150 deletions(-) create mode 100644 source/blender/blenkernel/BKE_idcode.h create mode 100644 source/blender/blenkernel/intern/idcode.c (limited to 'source/blender') diff --git a/source/blender/blenkernel/BKE_idcode.h b/source/blender/blenkernel/BKE_idcode.h new file mode 100644 index 00000000000..643446d3b1b --- /dev/null +++ b/source/blender/blenkernel/BKE_idcode.h @@ -0,0 +1,75 @@ +/** + * + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BKE_ID_INFO_H +#define BKE_ID_INFO_H + +/** + * Convert an idcode into a name. + * + * @param code The code to convert. + * @return A static string representing the name of + * the code. + */ +const char *BKE_idcode_to_name(int code); + +/** + * Convert an idcode into a name (plural). + * + * @param code The code to convert. + * @return A static string representing the name of + * the code. + */ +const char *BKE_idcode_to_name_plural(int code); + +/** + * Convert a name into an idcode (ie. ID_SCE) + * + * @param name The name to convert. + * @return The code for the name, or 0 if invalid. + */ +int BKE_idcode_from_name(const char *name); + +/** + * Return non-zero when an ID type is linkable. + * + * @param code The code to check. + * @return Boolean, 0 when non linkable. + */ +int BKE_idcode_is_linkable(int code); + +/** + * Return if the ID code is a valid ID code. + * + * @param code The code to check. + * @return Boolean, 0 when invalid. + */ +int BKE_idcode_is_valid(int code); + +#endif diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c new file mode 100644 index 00000000000..c9dee00a15c --- /dev/null +++ b/source/blender/blenkernel/intern/idcode.c @@ -0,0 +1,128 @@ +/** + * $Id: readblenentry.c 31028 2010-08-04 04:01:27Z campbellbarton $ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + * return info about ID types + */ + +#include +#include + +#include "DNA_ID.h" + +typedef struct { + unsigned short code; + char *name, *plural; + + int flags; +#define IDTYPE_FLAGS_ISLINKABLE (1<<0) +} IDType; + +/* plural need to match rna_main.c's MainCollectionDef */ +static IDType idtypes[]= { + { ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE}, + { ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE}, + { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE}, + { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE}, + { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE}, + { ID_GD, "GPencil", "gpencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */ + { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE}, + { ID_ID, "ID", "ids", 0}, /* plural is fake */ + { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE}, + { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */ + { ID_KE, "Key", "keys", 0}, + { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE}, + { ID_LI, "Library", "libraries", 0}, + { ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE}, + { ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE}, + { ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE}, + { ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE}, + { ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE}, + { ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE}, + { ID_PA, "ParticleSettings", "particles", 0}, + { ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE}, + { ID_SCR, "Screen", "screens", 0}, + { ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */ + { ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE}, + { ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE}, + { ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE}, + { ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE}, + { ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE}, + { ID_WM, "WindowManager", "window_managers", 0}, +}; +static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]); + +static IDType *idtype_from_name(const char *str) +{ + int i= nidtypes; + + while (i--) + if (strcmp(str, idtypes[i].name)==0) + return &idtypes[i]; + + return NULL; +} +static IDType *idtype_from_code(int code) +{ + int i= nidtypes; + + while (i--) + if (code==idtypes[i].code) + return &idtypes[i]; + + return NULL; +} + +int BKE_idcode_is_valid(int code) +{ + return idtype_from_code(code)?1:0; +} + +int BKE_idcode_is_linkable(int code) { + IDType *idt= idtype_from_code(code); + return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0; +} + +const char *BKE_idcode_to_name(int code) +{ + IDType *idt= idtype_from_code(code); + + return idt?idt->name:NULL; +} + +int BKE_idcode_from_name(const char *name) +{ + IDType *idt= idtype_from_name(name); + + return idt?idt->code:0; +} + +const char *BKE_idcode_to_name_plural(int code) +{ + IDType *idt= idtype_from_code(code); + + return idt?idt->plural:NULL; +} diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h index d6418f426c8..eeced13b57b 100644 --- a/source/blender/blenloader/BLO_readfile.h +++ b/source/blender/blenloader/BLO_readfile.h @@ -111,38 +111,6 @@ BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename, void BLO_blendfiledata_free( BlendFileData *bfd); - -/** - * Convert an idcode into a name. - * - * @param code The code to convert. - * @return A static string representing the name of - * the code. - */ - char* -BLO_idcode_to_name( - int code); - -/** - * Convert an idcode into a name (plural). - * - * @param code The code to convert. - * @return A static string representing the name of - * the code. - */ - char* -BLO_idcode_to_name_plural( - int code); - -/** - * Convert a name into an idcode (ie. ID_SCE) - * - * @param name The name to convert. - * @return The code for the name, or 0 if invalid. - */ - int -BLO_idcode_from_name( - char *name); /** * Open a blendhandle from a file path. diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index 6101012203a..d66d802c8ee 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -46,6 +46,7 @@ #include "BKE_main.h" #include "BKE_library.h" // for free_main +#include "BKE_idcode.h" #include "BKE_report.h" #include "BLO_readfile.h" @@ -61,111 +62,9 @@ #include "BLI_winstuff.h" #endif - /** - * IDType stuff, I plan to move this - * out into its own file + prefix, and - * make sure all IDType handling goes through - * these routines. - */ - -typedef struct { - unsigned short code; - char *name, *plural; - - int flags; -#define IDTYPE_FLAGS_ISLINKABLE (1<<0) -} IDType; - -/* plural need to match rna_main.c's MainCollectionDef */ -static IDType idtypes[]= { - { ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE}, - { ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE}, - { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE}, - { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE}, - { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE}, - { ID_GD, "GPencil", "gpencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */ - { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE}, - { ID_ID, "ID", "ids", 0}, /* plural is fake */ - { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE}, - { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */ - { ID_KE, "Key", "keys", 0}, - { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE}, - { ID_LI, "Library", "libraries", 0}, - { ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE}, - { ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE}, - { ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE}, - { ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE}, - { ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE}, - { ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE}, - { ID_PA, "ParticleSettings", "particles", 0}, - { ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE}, - { ID_SCR, "Screen", "screens", 0}, - { ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */ - { ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE}, - { ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE}, - { ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE}, - { ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE}, - { ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE}, - { ID_WM, "WindowManager", "window_managers", 0}, -}; -static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]); - /* local prototypes --------------------- */ void BLO_blendhandle_print_sizes(BlendHandle *, void *); - -static IDType *idtype_from_name(char *str) -{ - int i= nidtypes; - - while (i--) - if (BLI_streq(str, idtypes[i].name)) - return &idtypes[i]; - - return NULL; -} -static IDType *idtype_from_code(int code) -{ - int i= nidtypes; - - while (i--) - if (code==idtypes[i].code) - return &idtypes[i]; - - return NULL; -} - -static int bheadcode_is_idcode(int code) -{ - return idtype_from_code(code)?1:0; -} - -static int idcode_is_linkable(int code) { - IDType *idt= idtype_from_code(code); - return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0; -} - -char *BLO_idcode_to_name(int code) -{ - IDType *idt= idtype_from_code(code); - - return idt?idt->name:NULL; -} - -int BLO_idcode_from_name(char *name) -{ - IDType *idt= idtype_from_name(name); - - return idt?idt->code:0; -} - -char *BLO_idcode_to_name_plural(int code) -{ - IDType *idt= idtype_from_code(code); - - return idt?idt->plural:NULL; -} - /* Access routines used by filesel. */ BlendHandle *BLO_blendhandle_from_file(char *file) @@ -308,13 +207,13 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh) for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) { if (bhead->code==ENDB) { break; - } else if (bheadcode_is_idcode(bhead->code)) { - if (idcode_is_linkable(bhead->code)) { - char *str= BLO_idcode_to_name(bhead->code); + } else if (BKE_idcode_is_valid(bhead->code)) { + if (BKE_idcode_is_linkable(bhead->code)) { + const char *str= BKE_idcode_to_name(bhead->code); - if (!BLI_ghash_haskey(gathered, str)) { + if (!BLI_ghash_haskey(gathered, (void *)str)) { BLI_linklist_prepend(&names, strdup(str)); - BLI_ghash_insert(gathered, str, NULL); + BLI_ghash_insert(gathered, (void *)str, NULL); } } } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index e36b73189e6..ef99b3ab8e4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -105,6 +105,7 @@ #include "BKE_image.h" #include "BKE_lattice.h" #include "BKE_library.h" // for which_libbase +#include "BKE_idcode.h" #include "BKE_main.h" // for Main #include "BKE_mesh.h" // for ME_ defines (patching) #include "BKE_modifier.h" @@ -12592,8 +12593,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) append_id_part(fd, mainptr, id, &realid); if (!realid) { - BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); - if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); + BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); + if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); } change_idid_adr(mainlist, basefd, id, realid); @@ -12628,8 +12629,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) ID *idn= id->next; if(id->flag & LIB_READ) { BLI_remlink(lbarray[a], id); - BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); - if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); + BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); + if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath); change_idid_adr(mainlist, basefd, id, NULL); MEM_freeN(id); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index f5d913e9f32..4ee69bbd809 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -35,13 +35,12 @@ #include "MEM_guardedalloc.h" -#include "BLO_readfile.h" /* get the ID name for dnd*/ - #include "BLI_blenlib.h" #include "BLI_math.h" #include "BKE_context.h" #include "BKE_screen.h" +#include "BKE_idcode.h" #include "ED_screen.h" @@ -177,7 +176,7 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop) char text[64]; ID *id= drag->poin; - snprintf(text, sizeof(text), "bpy.data.%s['%s']", BLO_idcode_to_name_plural(GS(id->name)), id->name+2); + snprintf(text, sizeof(text), "bpy.data.%s['%s']", BKE_idcode_to_name_plural(GS(id->name)), id->name+2); /* copy drag path to properties */ RNA_string_set(drop->ptr, "text", text); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 2664082b20b..c3bea2a5bea 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -57,6 +57,7 @@ #include "BKE_main.h" #include "BKE_report.h" #include "BLO_readfile.h" +#include "BKE_idcode.h" #include "DNA_space_types.h" @@ -881,7 +882,7 @@ static int groupname_to_code(char *group) if (lslash) lslash[0]= '\0'; - return BLO_idcode_from_name(buf); + return BKE_idcode_from_name(buf); } void filelist_from_library(struct FileList* filelist) diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 8783296f5c2..0dbd1048348 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -62,8 +62,6 @@ #include "BLI_storage_types.h" #include "BLI_dynstr.h" -#include "BLO_readfile.h" - #include "BKE_context.h" #include "BKE_global.h" diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 4c3e88d978e..fef7f737c8a 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -63,6 +63,7 @@ #include "BKE_screen.h" /* BKE_ST_MAXNAME */ #include "BKE_utildefines.h" #include "BKE_brush.h" // JW +#include "BKE_idcode.h" #include "BIF_gl.h" #include "BIF_glutil.h" /* for paint cursor */ @@ -1586,7 +1587,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op) scene_deselect_all(scene); bh = BLO_blendhandle_from_file(libname); - idcode = BLO_idcode_from_name(group); + idcode = BKE_idcode_from_name(group); flag = wm_link_append_flag(op); -- cgit v1.2.3