Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/bpath.c
| Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | |||||
| #include "DNA_text_types.h" | #include "DNA_text_types.h" | ||||
| #include "DNA_texture_types.h" | #include "DNA_texture_types.h" | ||||
| #include "DNA_vfont_types.h" | #include "DNA_vfont_types.h" | ||||
| #include "DNA_volume_types.h" | #include "DNA_volume_types.h" | ||||
| #include "BLI_blenlib.h" | #include "BLI_blenlib.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "DEG_depsgraph.h" | |||||
| #include "BKE_idtype.h" | #include "BKE_idtype.h" | ||||
| #include "BKE_image.h" | #include "BKE_image.h" | ||||
| #include "BKE_lib_id.h" | #include "BKE_lib_id.h" | ||||
| #include "BKE_library.h" | #include "BKE_library.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_node.h" | #include "BKE_node.h" | ||||
| #include "BKE_report.h" | #include "BKE_report.h" | ||||
| #include "BKE_vfont.h" | #include "BKE_vfont.h" | ||||
| Show All 16 Lines | |||||
| void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, ID *id) | void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, ID *id) | ||||
| { | { | ||||
| const eBPathForeachFlag flag = bpath_data->flag; | const eBPathForeachFlag flag = bpath_data->flag; | ||||
| const char *absbase = (flag & BKE_BPATH_FOREACH_PATH_ABSOLUTE) ? | const char *absbase = (flag & BKE_BPATH_FOREACH_PATH_ABSOLUTE) ? | ||||
| ID_BLEND_PATH(bpath_data->bmain, id) : | ID_BLEND_PATH(bpath_data->bmain, id) : | ||||
| NULL; | NULL; | ||||
| bpath_data->absolute_base_path = absbase; | bpath_data->absolute_base_path = absbase; | ||||
| bpath_data->owner_id = id; | |||||
| bpath_data->is_path_modified = false; | |||||
| if ((flag & BKE_BPATH_FOREACH_PATH_SKIP_LINKED) && ID_IS_LINKED(id)) { | if ((flag & BKE_BPATH_FOREACH_PATH_SKIP_LINKED) && ID_IS_LINKED(id)) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (id->library_weak_reference != NULL && | if (id->library_weak_reference != NULL && | ||||
| (flag & BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES) == 0) { | (flag & BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES) == 0) { | ||||
| BKE_bpath_foreach_path_fixed_process(bpath_data, id->library_weak_reference->library_filepath); | BKE_bpath_foreach_path_fixed_process(bpath_data, id->library_weak_reference->library_filepath); | ||||
| } | } | ||||
| bNodeTree *embedded_node_tree = ntreeFromID(id); | bNodeTree *embedded_node_tree = ntreeFromID(id); | ||||
| if (embedded_node_tree != NULL) { | if (embedded_node_tree != NULL) { | ||||
| BKE_bpath_foreach_path_id(bpath_data, &embedded_node_tree->id); | BKE_bpath_foreach_path_id(bpath_data, &embedded_node_tree->id); | ||||
| } | } | ||||
| const IDTypeInfo *id_type = BKE_idtype_get_info_from_id(id); | const IDTypeInfo *id_type = BKE_idtype_get_info_from_id(id); | ||||
| BLI_assert(id_type != NULL); | BLI_assert(id_type != NULL); | ||||
| if (id_type == NULL || id_type->foreach_path == NULL) { | if (id_type == NULL || id_type->foreach_path == NULL) { | ||||
| return; | return; | ||||
| } | } | ||||
| id_type->foreach_path(id, bpath_data); | id_type->foreach_path(id, bpath_data); | ||||
| if (bpath_data->is_path_modified) { | |||||
| printf("%s IS BEING TAGGED FOR RELOAD\n", bpath_data->owner_id->name); | |||||
| DEG_id_tag_update(id, ID_RECALC_SOURCE | ID_RECALC_COPY_ON_WRITE); | |||||
| } | |||||
| } | } | ||||
| void BKE_bpath_foreach_path_main(BPathForeachPathData *bpath_data) | void BKE_bpath_foreach_path_main(BPathForeachPathData *bpath_data) | ||||
| { | { | ||||
| ID *id; | ID *id; | ||||
| FOREACH_MAIN_ID_BEGIN (bpath_data->bmain, id) { | FOREACH_MAIN_ID_BEGIN (bpath_data->bmain, id) { | ||||
| BKE_bpath_foreach_path_id(bpath_data, id); | BKE_bpath_foreach_path_id(bpath_data, id); | ||||
| } | } | ||||
| Show All 17 Lines | else { | ||||
| path_src = path; | path_src = path; | ||||
| } | } | ||||
| /* so functions can check old value */ | /* so functions can check old value */ | ||||
| BLI_strncpy(path_dst, path, FILE_MAX); | BLI_strncpy(path_dst, path, FILE_MAX); | ||||
| if (bpath_data->callback_function(bpath_data, path_dst, path_src)) { | if (bpath_data->callback_function(bpath_data, path_dst, path_src)) { | ||||
| BLI_strncpy(path, path_dst, FILE_MAX); | BLI_strncpy(path, path_dst, FILE_MAX); | ||||
| bpath_data->is_path_modified = true; | |||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| bool BKE_bpath_foreach_path_dirfile_fixed_process(BPathForeachPathData *bpath_data, | bool BKE_bpath_foreach_path_dirfile_fixed_process(BPathForeachPathData *bpath_data, | ||||
| char *path_dir, | char *path_dir, | ||||
| Show All 10 Lines | bool BKE_bpath_foreach_path_dirfile_fixed_process(BPathForeachPathData *bpath_data, | ||||
| BLI_strncpy(path_dst, path_src, FILE_MAX); | BLI_strncpy(path_dst, path_src, FILE_MAX); | ||||
| if (absolute_base_path) { | if (absolute_base_path) { | ||||
| BLI_path_abs(path_src, absolute_base_path); | BLI_path_abs(path_src, absolute_base_path); | ||||
| } | } | ||||
| if (bpath_data->callback_function(bpath_data, path_dst, (const char *)path_src)) { | if (bpath_data->callback_function(bpath_data, path_dst, (const char *)path_src)) { | ||||
| BLI_split_dirfile(path_dst, path_dir, path_file, FILE_MAXDIR, FILE_MAXFILE); | BLI_split_dirfile(path_dst, path_dir, path_file, FILE_MAXDIR, FILE_MAXFILE); | ||||
| bpath_data->is_path_modified = true; | |||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| bool BKE_bpath_foreach_path_allocated_process(BPathForeachPathData *bpath_data, char **path) | bool BKE_bpath_foreach_path_allocated_process(BPathForeachPathData *bpath_data, char **path) | ||||
| { | { | ||||
| Show All 10 Lines | bool BKE_bpath_foreach_path_allocated_process(BPathForeachPathData *bpath_data, char **path) | ||||
| } | } | ||||
| else { | else { | ||||
| path_src = *path; | path_src = *path; | ||||
| } | } | ||||
| if (bpath_data->callback_function(bpath_data, path_dst, path_src)) { | if (bpath_data->callback_function(bpath_data, path_dst, path_src)) { | ||||
| MEM_freeN(*path); | MEM_freeN(*path); | ||||
| (*path) = BLI_strdup(path_dst); | (*path) = BLI_strdup(path_dst); | ||||
| bpath_data->is_path_modified = true; | |||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| /** \} */ | /** \} */ | ||||
| ▲ Show 20 Lines • Show All 450 Lines • Show Last 20 Lines | |||||