Revision: 24705 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24705 Author: campbellbarton Date: 2009-11-20 16:01:09 +0100 (Fri, 20 Nov 2009)
Log Message: ----------- option to have scripts run on startup for per blendfile UI's Modified Paths: -------------- trunk/blender/release/scripts/ui/space_text.py trunk/blender/source/blender/makesrna/intern/rna_text.c trunk/blender/source/blender/python/BPY_extern.h trunk/blender/source/blender/python/generic/bpy_internal_import.c trunk/blender/source/blender/python/generic/bpy_internal_import.h trunk/blender/source/blender/python/intern/bpy_interface.c trunk/blender/source/blender/windowmanager/intern/wm_files.c trunk/blender/source/creator/creator.c trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp Modified: trunk/blender/release/scripts/ui/space_text.py =================================================================== --- trunk/blender/release/scripts/ui/space_text.py 2009-11-20 12:26:41 UTC (rev 24704) +++ trunk/blender/release/scripts/ui/space_text.py 2009-11-20 15:01:09 UTC (rev 24705) @@ -51,6 +51,10 @@ row.itemR(st, "word_wrap", text="") row.itemR(st, "syntax_highlight", text="") + row = layout.row() + row.itemO("text.run_script") + row.itemR(text, "use_module") + if text: row = layout.row() if text.filename != "": @@ -64,10 +68,7 @@ else: row.itemL(text="Text: Internal") - row = layout.row() - row.itemO("text.run_script") - class TEXT_PT_properties(bpy.types.Panel): bl_space_type = 'TEXT_EDITOR' bl_region_type = 'UI' Modified: trunk/blender/source/blender/makesrna/intern/rna_text.c =================================================================== --- trunk/blender/source/blender/makesrna/intern/rna_text.c 2009-11-20 12:26:41 UTC (rev 24704) +++ trunk/blender/source/blender/makesrna/intern/rna_text.c 2009-11-20 15:01:09 UTC (rev 24705) @@ -194,6 +194,10 @@ RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Memory", "Text file is in memory, without a corresponding file on disk."); + prop= RNA_def_property(srna, "use_module", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISSCRIPT); + RNA_def_property_ui_text(prop, "Register", "Register this text as a module on loading."); + prop= RNA_def_property(srna, "lines", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "TextLine"); RNA_def_property_ui_text(prop, "Lines", "Lines of text."); Modified: trunk/blender/source/blender/python/BPY_extern.h =================================================================== --- trunk/blender/source/blender/python/BPY_extern.h 2009-11-20 12:26:41 UTC (rev 24704) +++ trunk/blender/source/blender/python/BPY_extern.h 2009-11-20 15:01:09 UTC (rev 24705) @@ -72,72 +72,73 @@ This is necassary to avoid blender buttons storing invalid pointers to freed python data.*/ - void BPy_Set_DrawButtonsList(void *list); - void BPy_Free_DrawButtonsList(void); - +// void BPy_Set_DrawButtonsList(void *list); +// void BPy_Free_DrawButtonsList(void); +// void BPY_pyconstraint_eval(struct bPythonConstraint *con, struct bConstraintOb *cob, struct ListBase *targets); - void BPY_pyconstraint_settings(void *arg1, void *arg2); +// void BPY_pyconstraint_settings(void *arg1, void *arg2); void BPY_pyconstraint_target(struct bPythonConstraint *con, struct bConstraintTarget *ct); void BPY_pyconstraint_update(struct Object *owner, struct bConstraint *con); int BPY_is_pyconstraint(struct Text *text); - void BPY_free_pyconstraint_links(struct Text *text); - +// void BPY_free_pyconstraint_links(struct Text *text); +// void BPY_start_python( int argc, char **argv ); void BPY_end_python( void ); - void init_syspath( int first_time ); - void syspath_append( char *dir ); - void BPY_rebuild_syspath( void ); - int BPY_path_update( void ); +// void init_syspath( int first_time ); +// void syspath_append( char *dir ); +// void BPY_rebuild_syspath( void ); +// int BPY_path_update( void ); +// +// int BPY_Err_getLinenumber( void ); +// const char *BPY_Err_getFilename( void ); +// +// int BPY_txt_do_python_Text( struct Text *text ); +// int BPY_menu_do_python( short menutype, int event ); +// int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short modifiers ); +// int BPY_menu_invoke( struct BPyMenu *pym, short menutype ); - int BPY_Err_getLinenumber( void ); - const char *BPY_Err_getFilename( void ); - - int BPY_txt_do_python_Text( struct Text *text ); - int BPY_menu_do_python( short menutype, int event ); - int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short modifiers ); - int BPY_menu_invoke( struct BPyMenu *pym, short menutype ); - /* 2.5 UI Scripts */ int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text, struct ReportList *reports ); // 2.5 working int BPY_run_script_space_draw(const struct bContext *C, struct SpaceScript * sc); // 2.5 working // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working void BPY_update_modules( void ); // XXX - annoying, need this for pointers that get out of date - +// int BPY_context_get(struct bContext *C, const char *member, struct bContextDataResult *result); - - int BPY_run_script(struct Script *script); +// +// int BPY_run_script(struct Script *script); void BPY_free_compiled_text( struct Text *text ); - - int BPY_has_onload_script( void ); - - int BPY_is_spacehandler(struct Text *text, char spacetype); - int BPY_del_spacehandler(struct Text *text, struct ScrArea *sa); - int BPY_add_spacehandler(struct Text *txt, struct ScrArea *sa,char spacetype); - int BPY_has_spacehandler(struct Text *text, struct ScrArea *sa); - void BPY_screen_free_spacehandlers(struct bScreen *sc); - int BPY_do_spacehandlers(struct ScrArea *sa, unsigned short event, - short eventValue, unsigned short space_event); - - void BPY_pydriver_update(void); +// +// int BPY_has_onload_script( void ); +// +// int BPY_is_spacehandler(struct Text *text, char spacetype); +// int BPY_del_spacehandler(struct Text *text, struct ScrArea *sa); +// int BPY_add_spacehandler(struct Text *txt, struct ScrArea *sa,char spacetype); +// int BPY_has_spacehandler(struct Text *text, struct ScrArea *sa); +// void BPY_screen_free_spacehandlers(struct bScreen *sc); +// int BPY_do_spacehandlers(struct ScrArea *sa, unsigned short event, +// short eventValue, unsigned short space_event); +// +// void BPY_pydriver_update(void); float BPY_pydriver_eval(struct ChannelDriver *driver); - +// int BPY_button_eval(struct bContext *C, char *expr, double *value); /* format importer hook */ int BPY_call_importloader( char *name ); - - void BPY_spacescript_do_pywin_draw( struct SpaceScript *sc ); - void BPY_spacescript_do_pywin_event( struct SpaceScript *sc, - unsigned short event, short val, char ascii ); - void BPY_clear_script( struct Script *script ); - void BPY_free_finished_script( struct Script *script ); - void BPY_scripts_clear_pyobjects( void ); - - void error_pyscript( void ); - void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ +// +// void BPY_spacescript_do_pywin_draw( struct SpaceScript *sc ); +// void BPY_spacescript_do_pywin_event( struct SpaceScript *sc, +// unsigned short event, short val, char ascii ); +// void BPY_clear_script( struct Script *script ); +// void BPY_free_finished_script( struct Script *script ); +// void BPY_scripts_clear_pyobjects( void ); +// +// void error_pyscript( void ); +// void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ void BPY_set_context(struct bContext *C); /* void BPY_Err_Handle(struct Text *text); */ /* int BPY_spacetext_is_pywin(struct SpaceText *st); */ + void BPY_load_user_modules(struct bContext *C); #ifdef __cplusplus } /* extern "C" */ Modified: trunk/blender/source/blender/python/generic/bpy_internal_import.c =================================================================== --- trunk/blender/source/blender/python/generic/bpy_internal_import.c 2009-11-20 12:26:41 UTC (rev 24704) +++ trunk/blender/source/blender/python/generic/bpy_internal_import.c 2009-11-20 15:01:09 UTC (rev 24705) @@ -54,12 +54,35 @@ bpy_import_main= maggie; } +PyObject *bpy_text_import( Text *text ) +{ + char *buf = NULL; + char modulename[24]; + int len; -PyObject *bpy_text_import( char *name, int *found ) + if( !text->compiled ) { + buf = txt_to_buf( text ); + text->compiled = Py_CompileString( buf, text->id.name+2, Py_file_input ); + MEM_freeN( buf ); + + if( PyErr_Occurred( ) ) { + PyErr_Print( ); + PyErr_Clear( ); + PySys_SetObject("last_traceback", NULL); + free_compiled_text( text ); + return NULL; + } + } + + len= strlen(text->id.name+2) - 3; + strncpy(modulename, text->id.name+2, len); + return PyImport_ExecCodeModule(modulename, text->compiled); +} + +PyObject *bpy_text_import_name( char *name, int *found ) { Text *text; char txtname[22]; /* 21+NULL */ - char *buf = NULL; int namelen = strlen( name ); //XXX Main *maggie= bpy_import_main ? bpy_import_main:G.main; Main *maggie= bpy_import_main; @@ -86,21 +109,7 @@ else *found = 1; - if( !text->compiled ) { - buf = txt_to_buf( text ); - text->compiled = Py_CompileString( buf, text->id.name+2, Py_file_input ); - MEM_freeN( buf ); - - if( PyErr_Occurred( ) ) { - PyErr_Print( ); - PyErr_Clear( ); - PySys_SetObject("last_traceback", NULL); - free_compiled_text( text ); - return NULL; - } - } - - return PyImport_ExecCodeModule( name, text->compiled ); + return bpy_text_import(text); } @@ -195,7 +204,7 @@ PyErr_Fetch( &exception, &err, &tb ); /* get the python error incase we cant import as blender text either */ /* importing from existing modules failed, see if we have this module as blender text */ - newmodule = bpy_text_import( name, &found ); + newmodule = bpy_text_import_name( name, &found ); if( newmodule ) {/* found module as blender text, ignore above exception */ PyErr_Clear( ); Modified: trunk/blender/source/blender/python/generic/bpy_internal_import.h =================================================================== --- trunk/blender/source/blender/python/generic/bpy_internal_import.h 2009-11-20 12:26:41 UTC (rev 24704) +++ trunk/blender/source/blender/python/generic/bpy_internal_import.h 2009-11-20 15:01:09 UTC (rev 24705) @@ -44,7 +44,10 @@ #include "compile.h" /* for the PyCodeObject */ #include "eval.h" /* for PyEval_EvalCode */ -PyObject* bpy_text_import( char *name, int *found ); +struct Text; + +PyObject* bpy_text_import( struct Text *text ); +PyObject* bpy_text_import_name( char *name, int *found ); PyObject* bpy_text_reimport( PyObject *module, int *found ); /* void bpy_text_clear_modules( int clear_all );*/ /* Clear user modules */ extern PyMethodDef bpy_import_meth[]; Modified: trunk/blender/source/blender/python/intern/bpy_interface.c =================================================================== @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs