diff options
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/BLO_readfile.h | 15 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 25 |
2 files changed, 24 insertions, 16 deletions
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h index 59bd7ed74f4..4fd2e227bc5 100644 --- a/source/blender/blenloader/BLO_readfile.h +++ b/source/blender/blenloader/BLO_readfile.h @@ -109,13 +109,22 @@ void BLO_blendhandle_close(BlendHandle *bh); bool BLO_has_bfile_extension(const char *str); bool BLO_library_path_explode(const char *path, char *r_dir, char **r_group, char **r_name); +/* Options controlling behavior of append/link code. + * Note: merged with 'user-level' options from operators etc. in 16 lower bits + * (see eFileSel_Params_Flag in DNA_space_types.h). */ +typedef enum BLO_LibLinkFlags { + /* Generate a placeholder (empty ID) if not found in current lib file. */ + BLO_LIBLINK_USE_PLACEHOLDERS = 1 << 16, + /* Force loaded ID to be tagged as LIB_TAG_INDIRECT (used in reload context only). */ + BLO_LIBLINK_FORCE_INDIRECT = 1 << 17, +} BLO_LinkFlags; + struct Main *BLO_library_link_begin(struct Main *mainvar, BlendHandle **bh, const char *filepath); struct ID *BLO_library_link_named_part(struct Main *mainl, BlendHandle **bh, const short idcode, const char *name); struct ID *BLO_library_link_named_part_ex( struct Main *mainl, BlendHandle **bh, - const short idcode, const char *name, const short flag, - struct Scene *scene, struct View3D *v3d, - const bool use_placeholders, const bool force_indirect); + const short idcode, const char *name, const int flag, + struct Scene *scene, struct View3D *v3d); void BLO_library_link_end(struct Main *mainl, BlendHandle **bh, short flag, struct Scene *scene, struct View3D *v3d); void BLO_library_link_copypaste(struct Main *mainl, BlendHandle *bh); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index fb45fdc8136..caf58ba3f86 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -10035,12 +10035,14 @@ static ID *create_placeholder(Main *mainvar, const short idcode, const char *idn /* returns true if the item was found * but it may already have already been appended/linked */ static ID *link_named_part( - Main *mainl, FileData *fd, const short idcode, const char *name, - const bool use_placeholders, const bool force_indirect) + Main *mainl, FileData *fd, const short idcode, const char *name, const int flag) { BHead *bhead = find_bhead_from_code_name(fd, idcode, name); ID *id; + const bool use_placeholders = (flag & BLO_LIBLINK_USE_PLACEHOLDERS) != 0; + const bool force_indirect = (flag & BLO_LIBLINK_FORCE_INDIRECT) != 0; + BLI_assert(BKE_idcode_is_linkable(idcode) && BKE_idcode_is_valid(idcode)); if (bhead) { @@ -10080,7 +10082,7 @@ static ID *link_named_part( return id; } -static void link_object_postprocess(ID *id, Scene *scene, View3D *v3d, const short flag) +static void link_object_postprocess(ID *id, Scene *scene, View3D *v3d, const int flag) { if (scene) { Base *base; @@ -10146,10 +10148,10 @@ void BLO_library_link_copypaste(Main *mainl, BlendHandle *bh) } static ID *link_named_part_ex( - Main *mainl, FileData *fd, const short idcode, const char *name, const short flag, - Scene *scene, View3D *v3d, const bool use_placeholders, const bool force_indirect) + Main *mainl, FileData *fd, const short idcode, const char *name, const int flag, + Scene *scene, View3D *v3d) { - ID *id = link_named_part(mainl, fd, idcode, name, use_placeholders, force_indirect); + ID *id = link_named_part(mainl, fd, idcode, name, flag); if (id && (GS(id->name) == ID_OB)) { /* loose object: give a base */ link_object_postprocess(id, scene, v3d, flag); @@ -10175,7 +10177,7 @@ static ID *link_named_part_ex( ID *BLO_library_link_named_part(Main *mainl, BlendHandle **bh, const short idcode, const char *name) { FileData *fd = (FileData*)(*bh); - return link_named_part(mainl, fd, idcode, name, false, false); + return link_named_part(mainl, fd, idcode, name, 0); } /** @@ -10189,18 +10191,15 @@ ID *BLO_library_link_named_part(Main *mainl, BlendHandle **bh, const short idcod * \param flag Options for linking, used for instantiating. * \param scene The scene in which to instantiate objects/groups (if NULL, no instantiation is done). * \param v3d The active View3D (only to define active layers for instantiated objects & groups, can be NULL). - * \param use_placeholders If true, generate a placeholder (empty ID) if not found in current lib file. - * \param force_indirect If true, force loaded ID to be tagged as LIB_TAG_INDIRECT (used in reload context only). * \return the linked ID when found. */ ID *BLO_library_link_named_part_ex( Main *mainl, BlendHandle **bh, - const short idcode, const char *name, const short flag, - Scene *scene, View3D *v3d, - const bool use_placeholders, const bool force_indirect) + const short idcode, const char *name, const int flag, + Scene *scene, View3D *v3d) { FileData *fd = (FileData*)(*bh); - return link_named_part_ex(mainl, fd, idcode, name, flag, scene, v3d, use_placeholders, force_indirect); + return link_named_part_ex(mainl, fd, idcode, name, flag, scene, v3d); } static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *id, ID **r_id) |