diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-04-11 06:18:24 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-04-11 06:18:24 +0400 |
commit | c7b587105fae174c47bd29291ac384037af06685 (patch) | |
tree | a2f8c88ea1bffb2864350ba3a494f2ceb9601117 /source/blender/python | |
parent | 3ed5e2153796fb633f20d49ce7eac0db6bb82a74 (diff) |
UI:
* Added very basic loading of .py files on startup to define panels.
It now executes all .py files in .blender/ui on startup. Right now
this contains the object buttons, the C code for it is commented out.
These files should get embedded in the blender executable as well
eventually, that's a bit more complicated so this works for now.
* For scons and cmake it seems to copy & find the files OK, for make
only "make release" works (same with scripts/ folder it seems).
* Added BLI_gethome_folder function in BLI_util.h. This is adapted
from bpy_gethome, and gives the path to a folder in .blender like
scripts or ui.
There's plenty of things to figure out here about paths, embedding,
caching, user configs ...
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/BPY_extern.h | 1 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 56 |
2 files changed, 53 insertions, 4 deletions
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index 690dc7144e6..f46ef0fa670 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -99,6 +99,7 @@ extern "C" { /* 2.5 UI Scripts */ int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text ); // 2.5 working int BPY_run_script_space_draw(struct bContext *C, struct SpaceScript * sc); // 2.5 working + void BPY_run_ui_scripts(struct bContext *C); // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index f8031368f06..667dd14283f 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -1,13 +1,19 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> +#include <sys/stat.h> + +#ifndef WIN32 +#include <dirent.h> +#else +#include "BLI_winstuff.h" +#endif #include <Python.h> #include "compile.h" /* for the PyCodeObject */ #include "eval.h" /* for PyEval_EvalCode */ -#include "BKE_context.h" - #include "bpy_compat.h" #include "bpy_rna.h" @@ -15,11 +21,15 @@ #include "bpy_ui.h" #include "DNA_space_types.h" - -#include "BKE_text.h" #include "DNA_text_types.h" + #include "MEM_guardedalloc.h" +#include "BLI_util.h" + +#include "BKE_context.h" +#include "BKE_text.h" + void BPY_free_compiled_text( struct Text *text ) { if( text->compiled ) { @@ -293,3 +303,41 @@ int BPY_run_python_script_space(const char *modulename, const char *func) return 1; } #endif + +/* XXX this is temporary, need a proper script registration system for 2.5 */ +void BPY_run_ui_scripts(bContext *C) +{ + DIR *dir; + struct dirent *de; + struct stat status; + char *file_extension; + char path[FILE_MAX]; + char *dirname= BLI_gethome_folder("ui"); + + if(!dirname) + return; + + dir = opendir(dirname); + + if(!dir) + return; + + if (dir != NULL) { + while((de = readdir(dir)) != NULL) { + BLI_make_file_string("/", path, dirname, de->d_name); + + stat(path, &status); + + /* run if it is a .py file */ + if(S_ISREG(status.st_mode)) { + file_extension = strstr(de->d_name, ".py"); + + if(file_extension && *(file_extension + 3) == '\0') + BPY_run_python_script(C, path, NULL); + } + } + + closedir(dir); + } +} + |