[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24705] trunk/blender: option to have scripts run on startup for per blendfile UI's

Campbell Barton ideasman42 at gmail.com
Fri Nov 20 16:01:10 CET 2009


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. @@




More information about the Bf-blender-cvs mailing list