[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21564] branches/blender2.5/blender/source /blender: RNA & PyAPI

Campbell Barton ideasman42 at gmail.com
Mon Jul 13 21:33:59 CEST 2009


Revision: 21564
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21564
Author:   campbellbarton
Date:     2009-07-13 21:33:59 +0200 (Mon, 13 Jul 2009)

Log Message:
-----------
RNA & PyAPI
* support for dynamic enums to be inspected enumProp.items() from python.
* fix, enums check for a separator was flipped, meant no enums were in docs.
* dynamic enum functions now check for a NULL context and return all possible options for the "items" attribute used for docs.
* added an arg for rna arrays to free the array there looping over (needed to free dynamically allocated enum items)
* python api checks for NULL items since this can happen in some cases.
* python api, When getting an enum ID from an int in an array - If it failed it would get the first enum identifier and return that. Brecht? dont understand, making it return an empty string in these cases.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_key.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lattice.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_particle.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_space.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_world.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -1229,12 +1229,25 @@
 
 static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *ptr, int *free)
 {
-	Object *obedit= CTX_data_edit_object(C);
-
+	Object *obedit;
+	EnumPropertyItem *item= NULL;
+	int totitem= 0;
+	
+	if(C==NULL) {
+		/* needed for doc generation */
+		RNA_enum_items_add(&item, &totitem, prop_simvertex_types);
+		RNA_enum_items_add(&item, &totitem, prop_simedge_types);
+		RNA_enum_items_add(&item, &totitem, prop_simface_types);
+		RNA_enum_item_end(&item, &totitem);
+		*free= 1;
+		
+		return item;
+	}
+	
+	obedit= CTX_data_edit_object(C);
+	
 	if(obedit && obedit->type == OB_MESH) {
 		EditMesh *em= BKE_mesh_get_editmesh(obedit->data); 
-		EnumPropertyItem *item= NULL;
-		int totitem= 0;
 
 		if(em->selectmode & SCE_SELECT_VERTEX)
 			RNA_enum_items_add(&item, &totitem, prop_simvertex_types);
@@ -1248,7 +1261,7 @@
 
 		return item;
 	}
-
+	
 	return NULL;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -5795,13 +5795,24 @@
 	{0, NULL, 0, NULL, NULL}};
 
 static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free)
-{
-	Object *obedit= CTX_data_edit_object(C);
-
+{	
+	EnumPropertyItem *item= NULL;
+	int totitem= 0;
+	
+	Object *obedit;
+	
+	if(C==NULL) {
+		/* needed for doc generation */
+		RNA_enum_items_add(&item, &totitem, merge_type_items);
+		RNA_enum_item_end(&item, &totitem);
+		
+		*free= 1;
+		return item;
+	}
+	
+	obedit= CTX_data_edit_object(C);
 	if(obedit && obedit->type == OB_MESH) {
 		EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
-		EnumPropertyItem *item= NULL;
-		int totitem= 0;
 
 		if(em->selectmode & SCE_SELECT_VERTEX) {
 			if(em->selected.first && em->selected.last &&
@@ -5824,7 +5835,7 @@
 
 		return item;
 	}
-
+	
 	return NULL;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -358,8 +358,10 @@
 
 EnumPropertyItem *BIF_enumTransformOrientation(bContext *C)
 {
-	ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
-	TransformOrientation *ts = transform_spaces->first;
+	Scene *scene;
+	ListBase *transform_spaces;
+	TransformOrientation *ts= NULL;
+
 	EnumPropertyItem global	= {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""};
 	EnumPropertyItem normal = {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""};
 	EnumPropertyItem local = {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""};
@@ -374,6 +376,15 @@
 	RNA_enum_item_add(&item, &totitem, &local);
 	RNA_enum_item_add(&item, &totitem, &view);
 
+	if(C) {
+		scene= CTX_data_scene(C);
+
+		if(scene) {
+			transform_spaces = &scene->transform_spaces;
+			ts = transform_spaces->first;
+		}
+	}
+		
 	if(ts)
 		RNA_enum_item_add(&item, &totitem, &sepr);
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -699,9 +699,9 @@
 		}
 		else {
 			if(dp->dnalengthname)
-				fprintf(f, "\n	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
+				fprintf(f, "\n	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
 			else
-				fprintf(f, "\n	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed);
+				fprintf(f, "\n	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed);
 		}
 	}
 	else {

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-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -643,15 +643,18 @@
 void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free)
 {
 	EnumPropertyRNA *eprop= (EnumPropertyRNA*)rna_ensure_property(prop);
-	int tot;
 
 	*free= 0;
 
-	if(C && eprop->itemf) {
+	if(eprop->itemf) {
+		int tot= 0;
 		*item= eprop->itemf(C, ptr, free);
 
 		if(totitem) {
-			for(tot=0; (*item)[tot].identifier; tot++);
+			if(*item) {
+				for( ; (*item)[tot].identifier; tot++);
+			}
+
 			*totitem= tot;
 		}
 	}
@@ -710,11 +713,14 @@
 	int result, free;
 	
 	RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
-	result= RNA_enum_identifier(item, value, identifier);
-	if(free)
-		MEM_freeN(item);
+	if(item) {
+		result= RNA_enum_identifier(item, value, identifier);
+		if(free)
+			MEM_freeN(item);
 
-	return result;
+		return result;
+	}
+	return 0;
 }
 
 const char *RNA_property_ui_name(PropertyRNA *prop)
@@ -1303,9 +1309,9 @@
 		iter->prop= prop;
 
 		if(idprop)
-			rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, NULL);
+			rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, 0, NULL);
 		else
-			rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, NULL);
+			rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, 0, NULL);
 
 		if(iter->valid)
 			rna_property_collection_get_idp(iter);
@@ -1902,7 +1908,7 @@
 	iter->internal= NULL;
 }
 
-void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip)
+void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip)
 {
 	ArrayIterator *internal;
 
@@ -1911,6 +1917,7 @@
 
 	internal= MEM_callocN(sizeof(ArrayIterator), "ArrayIterator");
 	internal->ptr= ptr;
+	internal->free_ptr= free_ptr ? ptr:NULL;
 	internal->endptr= ((char*)ptr)+length*itemsize;
 	internal->itemsize= itemsize;
 	internal->skip= skip;
@@ -1955,6 +1962,11 @@
 
 void rna_iterator_array_end(CollectionPropertyIterator *iter)
 {
+	ArrayIterator *internal= iter->internal;
+	
+	if(internal->free_ptr)
+		MEM_freeN(internal->free_ptr);
+
 	MEM_freeN(iter->internal);
 	iter->internal= NULL;
 }

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -37,7 +37,7 @@
 static void rna_Brush_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
 	Brush *brush= (Brush*)ptr->data;
-	rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, NULL);
+	rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
 }
 
 static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr)

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -50,7 +50,7 @@
 {
 	CurveMapping *cumap= (CurveMapping*)ptr->data;
 
-	rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), NULL);
+	rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, NULL);
 }
 
 static void rna_CurveMapping_clip_set(PointerRNA *ptr, int value)

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c	2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c	2009-07-13 19:33:59 UTC (rev 21564)
@@ -181,6 +181,20 @@
 {
 	Object *ob= (Object*)ptr->id.data;
 	bConstraint *con= (bConstraint*)ptr->data;
+	
+	if(C==NULL) {
+		EnumPropertyItem *item= NULL;
+		int totitem= 0;
+		
+		/* needed for doc generation */
+		RNA_enum_items_add(&item, &totitem, space_object_items);
+		RNA_enum_items_add(&item, &totitem, space_pchan_items);
+		RNA_enum_item_end(&item, &totitem);
+		
+		*free= 1;
+		
+		return item;
+	}
 
 	if(BLI_findindex(&ob->constraints, con) == -1)
 		return space_pchan_items;
@@ -195,6 +209,20 @@
 	ListBase targets = {NULL, NULL};
 	bConstraintTarget *ct;
 	
+	if(C==NULL) {
+		EnumPropertyItem *item= NULL;
+		int totitem= 0;
+		
+		/* needed for doc generation */
+		RNA_enum_items_add(&item, &totitem, space_object_items);
+		RNA_enum_items_add(&item, &totitem, space_pchan_items);
+		RNA_enum_item_end(&item, &totitem);
+		
+		*free= 1;
+		
+		return item;
+	}
+	
 	if(cti && cti->get_constraint_targets) {
 		cti->get_constraint_targets(con, &targets);
 		

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c	2009-07-13 19:17:52 UTC (rev 21563)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list