[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21648] branches/blender2.5/blender: bpy rna

Campbell Barton ideasman42 at gmail.com
Fri Jul 17 04:31:28 CEST 2009


Revision: 21648
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21648
Author:   campbellbarton
Date:     2009-07-17 04:31:28 +0200 (Fri, 17 Jul 2009)

Log Message:
-----------
bpy rna

Calling rna functions with invalid keywords, too many keywords and too many args would fail silently
- now raise an error with invalid keywords and a list of valid ones, raise an error when too many args are given.
- calling rna functions would alloc a ParameterList each time, changed to use a stack variable (2 pointers and an int).
- store the number of parameters ParameterList
- python exception types were wrong in many cases, (using attribute error rather then type error)
- fixes to small errors in python UI scripts.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_physics_fluid.py
    branches/blender2.5/blender/release/ui/buttons_physics_softbody.py
    branches/blender2.5/blender/source/blender/editors/space_console/space_console.c
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c

Modified: branches/blender2.5/blender/release/ui/buttons_physics_fluid.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_physics_fluid.py	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/release/ui/buttons_physics_fluid.py	2009-07-17 02:31:28 UTC (rev 21648)
@@ -30,14 +30,20 @@
 			row = split.row(align=True)
 			row.itemR(md, "render", text="")
 			row.itemR(md, "realtime", text="")
+			
+			fluid = md.settings
+			
 		else:
 			# add modifier
 			split.item_enumO("OBJECT_OT_modifier_add", "type", "FLUID_SIMULATION", text="Add")
 			split.itemL()
+			
+			fluid = None
+		
+		
+		if fluid:
+			
 
-		if md:
-			fluid = md.settings
-
 			col = layout.column(align=True)
 			row = col.row()
 			row.item_enumR(fluid, "type", "DOMAIN")
@@ -177,7 +183,11 @@
 	def poll(self, context):
 		md = context.fluid
 		if md:
-			return (md.settings.type == 'DOMAIN')
+			settings = md.settings
+			if settings:
+				return (settings.type == 'DOMAIN')
+		
+		return False
 
 	def draw(self, context):
 		layout = self.layout
@@ -217,7 +227,11 @@
 	def poll(self, context):
 		md = context.fluid
 		if md:
-			return (md.settings.type == 'DOMAIN')
+			settings = md.settings
+			if settings:
+				return (settings.type == 'DOMAIN')
+		
+		return False
 
 	def draw(self, context):
 		layout = self.layout
@@ -244,7 +258,11 @@
 	def poll(self, context):
 		md = context.fluid
 		if md:
-			return (md.settings.type == 'DOMAIN')
+			settings = md.settings
+			if settings:
+				return (settings.type == 'DOMAIN')
+		
+		return False
 
 	def draw(self, context):
 		layout = self.layout

Modified: branches/blender2.5/blender/release/ui/buttons_physics_softbody.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_physics_softbody.py	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/release/ui/buttons_physics_softbody.py	2009-07-17 02:31:28 UTC (rev 21648)
@@ -136,8 +136,8 @@
 			
 			col.itemR(softbody, "new_aero", text="Aero")
 			subcol = col.column()
-			subcol.active = softbody.new_aero
-			subcol.itemR(softbody, "aero", text="Factor", enabled=softbody.new_aero)
+			subcol.enabled = softbody.new_aero
+			subcol.itemR(softbody, "aero", text="Factor")
 
 			col.itemL(text="Collision:")
 			col.itemR(softbody, "edge_collision", text="Edge")

Modified: branches/blender2.5/blender/source/blender/editors/space_console/space_console.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_console/space_console.c	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/editors/space_console/space_console.c	2009-07-17 02:31:28 UTC (rev 21648)
@@ -60,7 +60,7 @@
 
 #include "console_intern.h"	// own include
 
-static void console_update_rect(bContext *C, ARegion *ar)
+static void console_update_rect(const bContext *C, ARegion *ar)
 {
 	SpaceConsole *sc= CTX_wm_space_console(C);
 	View2D *v2d= &ar->v2d;

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-07-17 02:31:28 UTC (rev 21648)
@@ -758,8 +758,9 @@
 
 /* Utility */
 
-ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func);
+ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, FunctionRNA *func);
 void RNA_parameter_list_free(ParameterList *parms);
+int  RNA_parameter_list_size(ParameterList *parms);
 
 void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter);
 void RNA_parameter_list_next(ParameterIterator *iter);

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2009-07-17 02:31:28 UTC (rev 21648)
@@ -163,10 +163,19 @@
 
 /* Parameter List */
 
-typedef struct ParameterList ParameterList;
+typedef struct ParameterList {
+	/* storage for parameters */
+	void *data;
 
+	/* store the parameter count */
+	int tot;
+
+	/* function passed at creation time */
+	struct FunctionRNA *func;
+} ParameterList;
+
 typedef struct ParameterIterator {
-	ParameterList *parms;
+	struct ParameterList *parms;
 	PointerRNA funcptr;
 	void *data;
 	int size, offset;
@@ -209,7 +218,7 @@
 } StructFlag;
 
 typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
-typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, struct ParameterList *list);
+typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list);
 typedef void (*StructFreeFunc)(void *data);
 typedef struct StructRNA *(*StructRegisterFunc)(const struct bContext *C, struct ReportList *reports, void *data,
 	StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-07-17 02:31:28 UTC (rev 21648)
@@ -1404,9 +1404,10 @@
 #if 0
 	else if(cprop->add){
 		if(!(cprop->add->flag & FUNC_USE_CONTEXT)) { /* XXX check for this somewhere else */
-			ParameterList *params= RNA_parameter_list_create(ptr, cprop->add);
-			RNA_function_call(NULL, NULL, ptr, cprop->add, params);
-			RNA_parameter_list_free(params);
+			ParameterList params;
+			RNA_parameter_list_create(&params, ptr, cprop->add);
+			RNA_function_call(NULL, NULL, ptr, cprop->add, &params);
+			RNA_parameter_list_free(&params);
 		}
 	}
 #endif
@@ -1453,9 +1454,10 @@
 #if 0
 	else if(cprop->remove){
 		if(!(cprop->remove->flag & FUNC_USE_CONTEXT)) { /* XXX check for this somewhere else */
-			ParameterList *params= RNA_parameter_list_create(ptr, cprop->remove);
-			RNA_function_call(NULL, NULL, ptr, cprop->remove, params);
-			RNA_parameter_list_free(params);
+			ParameterList params;
+			RNA_parameter_list_create(&ptr, cprop->remove);
+			RNA_function_call(NULL, NULL, ptr, cprop->remove, &params);
+			RNA_parameter_list_free(&params);
 		}
 	}
 #endif
@@ -2787,20 +2789,17 @@
 
 /* Utility */
 
-ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func)
+ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, FunctionRNA *func)
 {
-	ParameterList *parms;
 	PropertyRNA *parm;
-	int tot;
+	int tot= 0;
 
-	parms= MEM_callocN(sizeof(ParameterList), "ParameterList");
-
-	parm= func->cont.properties.first;
-	for(tot= 0; parm; parm= parm->next)
+	for(parm= func->cont.properties.first; parm; parm= parm->next)
 		tot+= rna_parameter_size(parm);
 
 	parms->data= MEM_callocN(tot, "RNA_parameter_list_create");
 	parms->func= func;
+	parms->tot= tot;
 
 	return parms;
 }
@@ -2822,8 +2821,11 @@
 	parms->data= NULL;
 
 	parms->func= NULL;
+}
 
-	MEM_freeN(parms);
+int  RNA_parameter_list_size(ParameterList *parms)
+{
+	return parms->tot;
 }
 
 void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter)
@@ -3141,7 +3143,7 @@
 int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *ptr, FunctionRNA *func, const char *format, va_list args)
 {
 	PointerRNA funcptr;
-	ParameterList *parms;
+	ParameterList parms;
 	ParameterIterator iter;
 	PropertyRNA *pret, *parm;
 	PropertyType type;
@@ -3157,8 +3159,8 @@
 	pret= RNA_function_return(func);
 	flen= strlen(format);
 
-	parms= RNA_parameter_list_create(ptr, func);
-	RNA_parameter_list_begin(parms, &iter);
+	RNA_parameter_list_create(&parms, ptr, func);
+	RNA_parameter_list_begin(&parms, &iter);
 
 	for(i= 0, ofs= 0; iter.valid; RNA_parameter_list_next(&iter), i++) {
 		parm= iter.parm;
@@ -3240,7 +3242,7 @@
 	}
 
 	if (err==0)
-		err= RNA_function_call(C, reports, ptr, func, parms);
+		err= RNA_function_call(C, reports, ptr, func, &parms);
 
 	/* XXX throw error when more parameters than those needed are passed or leave silent? */
 	if (err==0 && pret && ofs<flen && format[ofs++]=='R') {
@@ -3302,7 +3304,7 @@
 	}
 
 	RNA_parameter_list_end(&iter);
-	RNA_parameter_list_free(parms);
+	RNA_parameter_list_free(&parms);
 
 	return err;
 }

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h	2009-07-17 02:31:28 UTC (rev 21648)
@@ -88,14 +88,6 @@
 	ListBase properties;
 } ContainerRNA;
 
-struct ParameterList {
-	/* storage for parameters */
-	void *data;
-
-	/* function passed at creation time */
-	FunctionRNA *func;
-};
-
 struct FunctionRNA {
 	/* structs are containers of properties */
 	ContainerRNA cont;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c	2009-07-17 02:10:27 UTC (rev 21647)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c	2009-07-17 02:31:28 UTC (rev 21648)
@@ -76,7 +76,7 @@
 static int panel_poll(const bContext *C, PanelType *pt)
 {
 	PointerRNA ptr;
-	ParameterList *list;
+	ParameterList list;
 	FunctionRNA *func;
 	void *ret;
 	int visible;
@@ -84,14 +84,14 @@
 	RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */
 	func= RNA_struct_find_function(&ptr, "poll");
 
-	list= RNA_parameter_list_create(&ptr, func);
-	RNA_parameter_set_lookup(list, "context", &C);
-	pt->py_call(&ptr, func, list);
+	RNA_parameter_list_create(&list, &ptr, func);
+	RNA_parameter_set_lookup(&list, "context", &C);
+	pt->py_call(&ptr, func, &list);
 
-	RNA_parameter_get_lookup(list, "visible", &ret);
+	RNA_parameter_get_lookup(&list, "visible", &ret);
 	visible= *(int*)ret;
 
-	RNA_parameter_list_free(list);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list