[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41303] trunk/blender/source/blender: - remove bpath iterator and replace all uses with visitor.
Campbell Barton
ideasman42 at gmail.com
Thu Oct 27 03:25:08 CEST 2011
Revision: 41303
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41303
Author: campbellbarton
Date: 2011-10-27 01:25:07 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
- remove bpath iterator and replace all uses with visitor.
- added flag to optionally receive all paths as absolute.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/blender.c
trunk/blender/source/blender/blenkernel/intern/image.c
trunk/blender/source/blender/blenkernel/intern/library.c
trunk/blender/source/blender/blenlib/BLI_bpath.h
trunk/blender/source/blender/blenlib/intern/bpath.c
trunk/blender/source/blender/editors/space_info/info_ops.c
trunk/blender/source/blender/python/intern/bpy.c
Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c 2011-10-27 01:05:55 UTC (rev 41302)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c 2011-10-27 01:25:07 UTC (rev 41303)
@@ -160,23 +160,20 @@
G.main= NULL;
}
+static int clean_paths_visit_cb(void *UNUSED(userdata), char *path_dst, const char *path_src)
+{
+ strcpy(path_dst, path_src);
+ BLI_clean(path_dst);
+ return (strcmp(path_dst, path_src) == 0) ? FALSE : TRUE;
+}
+
/* make sure path names are correct for OS */
static void clean_paths(Main *main)
{
- struct BPathIterator *bpi;
- char filepath_expanded[1024];
Scene *scene;
- for(BLI_bpathIterator_init(&bpi, main, main->name, BPATH_USE_PACKED); !BLI_bpathIterator_isDone(bpi); BLI_bpathIterator_step(bpi)) {
- BLI_bpathIterator_getPath(bpi, filepath_expanded);
+ bpath_traverse_main(main, clean_paths_visit_cb, 0, NULL);
- BLI_clean(filepath_expanded);
-
- BLI_bpathIterator_setPath(bpi, filepath_expanded);
- }
-
- BLI_bpathIterator_free(bpi);
-
for(scene= main->scene.first; scene; scene= scene->id.next) {
BLI_clean(scene->r.pic);
}
Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c 2011-10-27 01:05:55 UTC (rev 41302)
+++ trunk/blender/source/blender/blenkernel/intern/image.c 2011-10-27 01:25:07 UTC (rev 41303)
@@ -391,7 +391,7 @@
iman->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(&iman->id, bpath_relocate_visitor, user_data);
+ bpath_traverse_id(bmain, &iman->id, bpath_relocate_visitor, 0, user_data);
tex= bmain->tex.first;
while(tex) {
Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c 2011-10-27 01:05:55 UTC (rev 41302)
+++ trunk/blender/source/blender/blenkernel/intern/library.c 2011-10-27 01:25:07 UTC (rev 41303)
@@ -1253,7 +1253,7 @@
void id_clear_lib_data(Main *bmain, ID *id)
{
char *user_data[2]= {bmain->name, id->lib->filepath};
- bpath_traverse_id(id, bpath_relocate_visitor, user_data);
+ bpath_traverse_id(bmain, id, bpath_relocate_visitor, 0, user_data);
id->lib= NULL;
id->flag= LIB_LOCAL;
new_id(which_libbase(bmain, GS(id->name)), id, NULL);
Modified: trunk/blender/source/blender/blenlib/BLI_bpath.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_bpath.h 2011-10-27 01:05:55 UTC (rev 41302)
+++ trunk/blender/source/blender/blenlib/BLI_bpath.h 2011-10-27 01:25:07 UTC (rev 41303)
@@ -34,38 +34,28 @@
#ifndef BLI_BPATH_H
#define BLI_BPATH_H
-struct BPathIterator;
struct ReportList;
struct Main;
struct ID;
-void BLI_bpathIterator_init (struct BPathIterator **bpi, struct Main *bmain, const char *basedir, const int flag);
-void BLI_bpathIterator_free (struct BPathIterator *bpi);
-const char* BLI_bpathIterator_getLib (struct BPathIterator *bpi);
-const char* BLI_bpathIterator_getName (struct BPathIterator *bpi);
-int BLI_bpathIterator_getType (struct BPathIterator *bpi);
-unsigned int BLI_bpathIterator_getPathMaxLen (struct BPathIterator *bpi);
-const char* BLI_bpathIterator_getBasePath (struct BPathIterator *bpi);
-void BLI_bpathIterator_step (struct BPathIterator *bpi);
-int BLI_bpathIterator_isDone (struct BPathIterator *bpi);
-void BLI_bpathIterator_getPath (struct BPathIterator *bpi, char *path);
-void BLI_bpathIterator_getPathExpanded (struct BPathIterator *bpi, char *path_expanded);
-void BLI_bpathIterator_setPath (struct BPathIterator *bpi, const char *path);
-
/* Function that does something with an ID's file path. Should return 1 if the
path has changed, and in that case, should write the result to pathOut. */
typedef int (*BPathVisitor)(void *userdata, char *path_dst, const char *path_src);
/* Executes 'visit' for each path associated with 'id'. */
-void bpath_traverse_id(struct ID *id, BPathVisitor visit, void *userdata);
+void bpath_traverse_id(struct Main *bmain, struct ID *id, BPathVisitor visit_cb, int flag, void *userdata);
+void bpath_traverse_id_list(struct Main *bmain, struct ListBase *lb, BPathVisitor visit_cb, int flag, void *userdata);
+void bpath_traverse_main(struct Main *bmain, BPathVisitor visit_cb, int flag, void *userdata);
int bpath_relocate_visitor(void *oldbasepath, char *path_dst, const char *path_src);
+#define BPATH_TRAVERSE_ABS 1 /* convert paths to absolute */
+
/* high level funcs */
/* creates a text file with missing files if there are any */
void checkMissingFiles(struct Main *bmain, struct ReportList *reports);
void makeFilesRelative(struct Main *bmain, const char *basedir, struct ReportList *reports);
void makeFilesAbsolute(struct Main *bmain, const char *basedir, struct ReportList *reports);
-void findMissingFiles(struct Main *bmain, const char *str);
+void findMissingFiles(struct Main *bmain, const char *searchpath, struct ReportList *reports);
#define BPATH_USE_PACKED 1
Modified: trunk/blender/source/blender/blenlib/intern/bpath.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/bpath.c 2011-10-27 01:05:55 UTC (rev 41302)
+++ trunk/blender/source/blender/blenlib/intern/bpath.c 2011-10-27 01:25:07 UTC (rev 41303)
@@ -54,7 +54,6 @@
#include "DNA_sound_types.h"
#include "DNA_sequence_types.h"
#include "DNA_vfont_types.h"
-#include "DNA_windowmanager_types.h"
#include "DNA_object_types.h"
#include "DNA_object_fluidsim.h"
@@ -62,7 +61,6 @@
#include "BLI_bpath.h"
#include "BLI_utildefines.h"
-#include "BKE_global.h"
#include "BKE_image.h" /* so we can check the image's type */
#include "BKE_sequencer.h"
#include "BKE_main.h"
@@ -70,768 +68,116 @@
#include "BKE_report.h"
#include "BKE_library.h"
-typedef struct BPathIteratorSeqData
+static int checkMissingFiles_visit_cb(void *userdata, char *UNUSED(path_dst), const char *path_src)
{
- int totseq;
- int seq;
- struct Sequence **seqar; /* Sequence */
- struct Scene *scene; /* Current scene */
-} BPathIteratorSeqData;
+ ReportList *reports= (ReportList *)userdata;
-typedef struct BPathIterator
-{
- char* _path; /* never access directly, use BLI_bpathIterator_getPath */
- const char* _lib;
- const char* _name;
- void* data;
- int len;
- int type;
- int flag; /* iterator options */
-
- void (*setpath_callback)(struct BPathIterator *, const char *);
- void (*getpath_callback)(struct BPathIterator *, char *);
-
- const char* base_path; /* base path, the directory the blend file is in - normally bmain->name */
-
- Main *bmain;
-
- /* only for seq data */
- struct BPathIteratorSeqData seqdata;
-} BPathIterator;
-
-#define FILE_MAX 240
-
-
-/* TODO - BPATH_PLUGIN, BPATH_SEQ */
-enum BPathTypes {
- BPATH_IMAGE= 0,
- BPATH_TEXTURE,
- BPATH_TEXT,
- BPATH_SOUND,
- BPATH_FONT,
- BPATH_LIB,
- BPATH_SEQ,
- BPATH_CDATA,
-
- BPATH_DONE
-};
-
-void BLI_bpathIterator_init(struct BPathIterator **bpi_pt, Main *bmain, const char *basedir, const int flag)
-{
- BPathIterator *bpi;
-
- bpi= MEM_mallocN(sizeof(BPathIterator), "BLI_bpathIterator_init");
- *bpi_pt= bpi;
-
- bpi->type= BPATH_IMAGE;
- bpi->data= NULL;
-
- bpi->getpath_callback= NULL;
- bpi->setpath_callback= NULL;
-
- /* Sequencer specific */
- bpi->seqdata.totseq= 0;
- bpi->seqdata.seq= 0;
- bpi->seqdata.seqar= NULL;
- bpi->seqdata.scene= NULL;
-
- bpi->flag= flag;
-
- bpi->base_path= basedir; /* normally bmain->name */
- bpi->bmain= bmain;
-
- BLI_bpathIterator_step(bpi);
-}
-
-#if 0
-static void BLI_bpathIterator_alloc(struct BPathIterator **bpi)
-{
- *bpi= MEM_mallocN(sizeof(BPathIterator), "BLI_bpathIterator_alloc");
-}
-#endif
-
-void BLI_bpathIterator_free(struct BPathIterator *bpi)
-{
- if (bpi->seqdata.seqar)
- MEM_freeN((void *)bpi->seqdata.seqar);
- bpi->seqdata.seqar= NULL;
- bpi->seqdata.scene= NULL;
-
- MEM_freeN(bpi);
-}
-
-void BLI_bpathIterator_getPath(struct BPathIterator *bpi, char *path)
-{
- if (bpi->getpath_callback) {
- bpi->getpath_callback(bpi, path);
+ if (!BLI_exists(path_src)) {
+ BKE_reportf(reports, RPT_WARNING, "Path Not Found \"%s\"", path_src);
}
- else {
- strcpy(path, bpi->_path); /* warning, we assume 'path' are long enough */
- }
-}
-void BLI_bpathIterator_setPath(struct BPathIterator *bpi, const char *path)
-{
- if (bpi->setpath_callback) {
- bpi->setpath_callback(bpi, path);
- }
- else {
- strcpy(bpi->_path, path); /* warning, we assume 'path' are long enough */
- }
+ return FALSE;
}
-void BLI_bpathIterator_getPathExpanded(struct BPathIterator *bpi, char *path_expanded)
+/* high level function */
+void checkMissingFiles(Main *bmain, ReportList *reports)
{
- const char *libpath;
-
- BLI_bpathIterator_getPath(bpi, path_expanded);
- libpath= BLI_bpathIterator_getLib(bpi);
-
- if (libpath) { /* check the files location relative to its library path */
- BLI_path_abs(path_expanded, libpath);
- }
- else { /* local data, use the blend files path */
- BLI_path_abs(path_expanded, bpi->base_path);
- }
- BLI_cleanup_file(NULL, path_expanded);
+ bpath_traverse_main(bmain, checkMissingFiles_visit_cb, BPATH_TRAVERSE_ABS, reports);
}
-const char* BLI_bpathIterator_getLib(struct BPathIterator *bpi)
-{
- return bpi->_lib;
-}
-const char* BLI_bpathIterator_getName(struct BPathIterator *bpi)
-{
- return bpi->_name;
-}
-int BLI_bpathIterator_getType(struct BPathIterator *bpi)
-{
- return bpi->type;
-}
-unsigned int BLI_bpathIterator_getPathMaxLen(struct BPathIterator *bpi)
-{
- return bpi->len;
-}
-const char* BLI_bpathIterator_getBasePath(struct BPathIterator *bpi)
-{
- return bpi->base_path;
-}
-/* gets the first or the next image that has a path - not a viewer node or generated image */
-static struct Image *ima_stepdata__internal(struct Image *ima, const int step_next, const int flag)
+typedef struct BPathRemap_Data
{
- if (ima==NULL)
- return NULL;
+ const char *basedir;
+ ReportList *reports;
- if (step_next)
- ima= ima->id.next;
+ int count_tot;
+ int count_changed;
+ int count_failed;
+} BPathRemap_Data;
- while (ima) {
- if (ELEM3(ima->source, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
- if(ima->packedfile==NULL || (flag & BPATH_USE_PACKED)) {
- break;
- }
- }
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list