[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20480] branches/blender2.5/blender/source /blender/makesrna: RNA:

Brecht Van Lommel brecht at blender.org
Fri May 29 01:23:48 CEST 2009


Revision: 20480
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20480
Author:   blendix
Date:     2009-05-29 01:23:47 +0200 (Fri, 29 May 2009)

Log Message:
-----------
RNA:
* Automatically do us++ and us-- reference counting in ID pointer
  set functions.
* Added an enum property callback to dynamically vary the list of
  available items.
* Added some functions to do removes on pointers and collections
  runtime defined for RNA and using ID properties.

* Constraints now have owner/target space wrapped, and most
  pointers made editable. They can be ported to use python layouts.
* Also other pointers made editable that I think are see now with
  the automatic reference counting.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
    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_camera.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_controller.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.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_nodetree.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.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_scene.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_sensor.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_texture.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_world.c

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-05-28 23:23:47 UTC (rev 20480)
@@ -430,7 +430,9 @@
 
 /* to create ID property groups */
 void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop);
+void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop);
 void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr);
+void RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key);
 void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop);
 
 /* Path

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2009-05-28 23:23:47 UTC (rev 20480)
@@ -141,7 +141,7 @@
 void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set);
 void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range);
 void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range);
-void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set);
+void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item);
 void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set);
 void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set);
 void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-05-28 23:23:47 UTC (rev 20480)
@@ -156,6 +156,17 @@
 	return result;
 }
 
+static StructRNA *rna_find_struct(const char *identifier)
+{
+	StructDefRNA *ds;
+
+	for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
+		if(strcmp(ds->srna->identifier, identifier)==0)
+			return ds->srna;
+
+	return NULL;
+}
+
 static const char *rna_find_type(const char *type)
 {
 	StructDefRNA *ds;
@@ -250,8 +261,10 @@
 	EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
 	int a, mask= 0;
 
-	for(a=0; a<eprop->totitem; a++)
-		mask |= eprop->item[a].value;
+	if(eprop->item) {
+		for(a=0; a<eprop->totitem; a++)
+			mask |= eprop->item[a].value;
+	}
 	
 	return mask;
 }
@@ -496,8 +509,19 @@
 				fprintf(f, "	%s(ptr, value);\n", manualfunc);
 			}
 			else {
+				PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
+				StructRNA *type= rna_find_struct((char*)pprop->type);
+
 				rna_print_data_get(f, dp);
+
+				if(type && (type->flag & STRUCT_ID) && strcmp(type->identifier, "Object")!=0) {
+					fprintf(f, "\n	if(data->%s)\n", dp->dnaname);
+					fprintf(f, "		id_us_min((ID*)data->%s);\n", dp->dnaname);
+					fprintf(f, "	if(value.data)\n");
+					fprintf(f, "		id_us_plus((ID*)value.data);\n\n");
+				}
 				fprintf(f, "	data->%s= value.data;\n", dp->dnaname);
+
 			}
 			fprintf(f, "}\n\n");
 			break;
@@ -1454,6 +1478,7 @@
 						DefRNA.error= 1;
 					}
 				}
+				else if(eprop->itemf);
 				else {
 					fprintf(stderr, "rna_generate_structs: %s%s.%s, enum must have items defined.\n", srna->identifier, errnest, prop->identifier);
 					DefRNA.error= 1;
@@ -1581,7 +1606,12 @@
 												}
 			case PROP_ENUM: {
 				EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
-				fprintf(f, "\t%s, %s, rna_%s%s_%s_items, %d, %d\n", rna_function_string(eprop->get), rna_function_string(eprop->set), srna->identifier, strnest, prop->identifier, eprop->totitem, eprop->defaultvalue);
+				fprintf(f, "\t%s, %s, %s, ", rna_function_string(eprop->get), rna_function_string(eprop->set), rna_function_string(eprop->itemf));
+				if(eprop->item)
+					fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier);
+				else
+					fprintf(f, "NULL, ");
+				fprintf(f, "%d, %d\n", eprop->totitem, eprop->defaultvalue);
 				break;
 											}
 			case PROP_POINTER: {
@@ -1798,8 +1828,11 @@
 	fprintf(f, "#include <limits.h>\n");
 	fprintf(f, "#include <string.h>\n\n");
 
+	fprintf(f, "#include \"DNA_ID.h\"\n");
+
 	fprintf(f, "#include \"BLI_blenlib.h\"\n\n");
 
+	fprintf(f, "#include \"BKE_library.h\"\n");
 	fprintf(f, "#include \"BKE_utildefines.h\"\n\n");
 
 	fprintf(f, "#include \"RNA_define.h\"\n");

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-05-28 23:23:47 UTC (rev 20480)
@@ -599,9 +599,17 @@
 void RNA_property_enum_items(PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **item, int *totitem)
 {
 	EnumPropertyRNA *eprop= (EnumPropertyRNA*)rna_ensure_property(prop);
+	int tot;
 
-	*item= eprop->item;
-	*totitem= eprop->totitem;
+	if(eprop->itemf) {
+		*item= eprop->itemf(ptr);
+		for(tot=0; (*item)[tot].identifier; tot++);
+		*totitem= tot;
+	}
+	else {
+		*item= eprop->item;
+		*totitem= eprop->totitem;
+	}
 }
 
 int RNA_property_enum_value(PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value)
@@ -1182,6 +1190,23 @@
 		printf("RNA_property_pointer_add %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier);
 }
 
+void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop)
+{
+	IDProperty *idprop, *group;
+
+	if((idprop=rna_idproperty_check(&prop, ptr))) {
+		group= RNA_struct_idproperties(ptr, 0);
+		
+		if(group) {
+			IDP_RemFromGroup(group, idprop);
+			IDP_FreeProperty(idprop);
+			MEM_freeN(idprop);
+		}
+	}
+	else
+		printf("RNA_property_pointer_remove %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier);
+}
+
 static void rna_property_collection_get_idp(CollectionPropertyIterator *iter)
 {
 	CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop;
@@ -1309,6 +1334,33 @@
 	}
 }
 
+void RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key)
+{
+	IDProperty *idprop;
+
+	if((idprop=rna_idproperty_check(&prop, ptr))) {
+		IDProperty tmp, *array;
+		int len;
+
+		len= idprop->len;
+		array= IDP_IDPArray(idprop);
+
+		if(key >= 0 && key < len) {
+			if(key+1 < len) {
+				/* move element to be removed to the back */
+				memcpy(&tmp, &array[key], sizeof(IDProperty));
+				memmove(array+key, array+key+1, sizeof(IDProperty)*(len-key+1));
+				memcpy(&array[len-1], &tmp, sizeof(IDProperty));
+			}
+
+			IDP_ResizeIDPArray(idprop, len-1);
+		}
+	}
+	else if(prop->flag & PROP_IDPROPERTY);
+	else
+		printf("RNA_property_collection_remove %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier);
+}
+
 void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop)
 {
 	IDProperty *idprop;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-05-28 23:23:47 UTC (rev 20480)
@@ -189,7 +189,7 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_FIXED_TEX);
 	RNA_def_property_ui_text(prop, "Fixed Texture", "Keep texture origin in fixed position.");*/
 
-	prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
+	prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NEVER_NULL);
 	RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve.");
 
 	/* texture */
@@ -198,7 +198,7 @@
 	/* clone tool */
 	prop= RNA_def_property(srna, "clone_image", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "clone.image");
-	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Clone Image", "Image for clone tool.");
 	
 	prop= RNA_def_property(srna, "clone_opacity", PROP_FLOAT, PROP_NONE);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_camera.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_camera.c	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_camera.c	2009-05-28 23:23:47 UTC (rev 20480)
@@ -158,6 +158,7 @@
 	prop= RNA_def_property(srna, "dof_object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_struct_type(prop, "Object");
 	RNA_def_property_pointer_sdna(prop, NULL, "dof_ob");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "DOF Object", "Use this object to define the depth of field focal point.");
 	RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
 }

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c	2009-05-28 23:13:42 UTC (rev 20479)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c	2009-05-28 23:23:47 UTC (rev 20480)
@@ -61,6 +61,7 @@
 #ifdef RNA_RUNTIME
 
 #include "BKE_action.h"
+#include "BKE_constraint.h"
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
 
@@ -116,19 +117,9 @@
 
 static char *rna_Constraint_path(PointerRNA *ptr)
 {
-	return BLI_sprintfN("constraints[%s]", ((bConstraint*)ptr->data)->name); // XXX not unique
+	return BLI_sprintfN("constraints[%s]", ((bConstraint*)ptr->data)->name);
 }
 
-void rna_CopyLocationConstraint_target_set(PointerRNA *ptr, PointerRNA value)
-{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list