[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31001] trunk/blender/source/blender: pointer poll functions for object's, mainly for modifiers, constraints.

Campbell Barton ideasman42 at gmail.com
Tue Aug 3 08:51:37 CEST 2010


Revision: 31001
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31001
Author:   campbellbarton
Date:     2010-08-03 08:51:36 +0200 (Tue, 03 Aug 2010)

Log Message:
-----------
pointer poll functions for object's, mainly for modifiers, constraints.
Lattice modifier only shows lattices types, Shrink wrap only meshes etc.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/makesrna/intern/rna_constraint.c
    trunk/blender/source/blender/makesrna/intern/rna_curve.c
    trunk/blender/source/blender/makesrna/intern/rna_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -1111,6 +1111,12 @@
 			if(itemptr.data == but->rnapoin.id.data)
 				continue;
 
+		/* use filter */
+		if(RNA_property_type(but->rnaprop)==PROP_POINTER) {
+			if(RNA_property_pointer_poll(&but->rnapoin, but->rnaprop, &itemptr)==0)
+				continue;
+		}
+
 		if(itemptr.type && RNA_struct_is_ID(itemptr.type)) {
 			ID *id= itemptr.data;
 			char name_ui[32];

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -178,8 +178,16 @@
 			filter_yes= 0;
 
 			/* use filter */
-			if (template->filterop[0] != 0) {
+			if(RNA_property_type(template->prop)==PROP_POINTER) {
 				PointerRNA ptr;
+				RNA_id_pointer_create(id, &ptr);
+				if(RNA_property_pointer_poll(&template->ptr, template->prop, &ptr)==0)
+					filter_yes= 1;
+			}
+
+			if (filter_yes==0 && template->filterop[0] != 0) {
+				/* XXX, remove this, use pointer filtering */
+				PointerRNA ptr;
 				ReportList reports;
 				FunctionRNA *func;
 				ParameterList parms;

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/RNA_access.h	2010-08-03 06:51:36 UTC (rev 31001)
@@ -670,6 +670,7 @@
 int RNA_property_enum_bitflag_identifiers(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
 
 StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop);
+int RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *value);
 
 int RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop);
 int RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, int index);

Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -786,6 +786,7 @@
 	return -1;
 }
 
+
 void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
 {
 	IntPropertyRNA *iprop= (IntPropertyRNA*)rna_ensure_property(prop);
@@ -990,6 +991,22 @@
 	return &RNA_UnknownType;
 }
 
+int RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *value)
+{
+	prop= rna_ensure_property(prop);
+
+	if(prop->type == PROP_POINTER) {
+		PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
+		if(pprop->poll)
+			return pprop->poll(ptr, *value);
+
+		return 1;
+	}
+
+	printf("RNA_property_pointer_poll %s: is not a pointer property.\n", prop->identifier);
+	return 0;
+}
+
 /* Reuse for dynamic types  */
 EnumPropertyItem DummyRNA_NULL_items[] = {
 	{0, NULL, 0, NULL, NULL}

Modified: trunk/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -1067,6 +1067,7 @@
 
 	prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "tar");
+	RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
 	RNA_def_property_ui_text(prop, "Target", "Target Object");
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -1273,7 +1274,8 @@
 	RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
 
 	prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
-	RNA_def_property_pointer_sdna(prop, NULL, "tar"); // TODO: curve only!
+	RNA_def_property_pointer_sdna(prop, NULL, "tar"); // TODO: curve only for set function!
+	RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
 	RNA_def_property_ui_text(prop, "Target", "Target Object");
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -1707,7 +1709,8 @@
 	RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
 	
 	prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
-	RNA_def_property_pointer_sdna(prop, NULL, "target");
+	RNA_def_property_pointer_sdna(prop, NULL, "target"); /* TODO, mesh type */
+	RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
 	RNA_def_property_ui_text(prop, "Target", "Target Object");
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");

Modified: trunk/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_curve.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/intern/rna_curve.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -285,6 +285,20 @@
 	}
 }
 
+static int rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
+{
+	Curve *cu= (Curve*)ptr->id.data;
+	Object *ob= (Object*)value.data;
+
+	if (ob) {
+		if (ob->type == OB_CURVE && ob->data != cu) {
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
 static PointerRNA rna_Curve_taperObject_get(PointerRNA *ptr)
 {
 	Curve *cu= (Curve*)ptr->id.data;
@@ -819,6 +833,7 @@
 	/* pointers */
 	prop= RNA_def_property(srna, "text_on_curve", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "textoncurve");
+	RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_otherObject_poll");
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Text on Curve", "Curve deforming text object");
 	RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
@@ -1144,7 +1159,7 @@
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Bevel Object", "Curve object name that defines the bevel shape");
 	RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
-	RNA_def_property_pointer_funcs(prop, "rna_Curve_bevelObject_get", "rna_Curve_bevelObject_set", NULL, NULL);
+	RNA_def_property_pointer_funcs(prop, "rna_Curve_bevelObject_get", "rna_Curve_bevelObject_set", NULL, "rna_Curve_otherObject_poll");
 
 	prop= RNA_def_property(srna, "taper_object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_struct_type(prop, "Object");
@@ -1152,7 +1167,7 @@
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Taper Object", "Curve object name that defines the taper (width)");
 	RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
-	RNA_def_property_pointer_funcs(prop, "rna_Curve_taperObject_get", "rna_Curve_taperObject_set", NULL, NULL);
+	RNA_def_property_pointer_funcs(prop, "rna_Curve_taperObject_get", "rna_Curve_taperObject_set", NULL, "rna_Curve_otherObject_poll");
 
 	/* Flags */
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_internal.h	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/intern/rna_internal.h	2010-08-03 06:51:36 UTC (rev 31001)
@@ -206,11 +206,18 @@
 int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
 
 /* named internal so as not to conflict with obj.update() rna func */
-void rna_Object_internal_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
 void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
 void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
 void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
 
+/* basic poll functions for object types */
+int rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Camera_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Curve_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Lattice_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Mesh_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+
+
 char *rna_TextureSlot_path(struct PointerRNA *ptr);
 
 /* API functions */

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-08-03 06:36:07 UTC (rev 31000)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-08-03 06:51:36 UTC (rev 31001)
@@ -659,7 +659,7 @@
 
 	prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
-	RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL, NULL);
+	RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL, "rna_Lattice_object_poll");
 	RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
 	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 
@@ -691,7 +691,7 @@
 
 	prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
-	RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL, NULL);
+	RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL, "rna_Curve_object_poll");
 	RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
 	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list