RNA:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Sat, 11 Apr 2009 01:43:50 +0000 (01:43 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Sat, 11 Apr 2009 01:43:50 +0000 (01:43 +0000)
* Added REQUIRED flag for function parameters.
* Made dupliframes/verts/faces/groups an enum, and make it editable.
* Enum bitflags were broken, fixed.

source/blender/makesrna/RNA_access.h
source/blender/makesrna/RNA_types.h
source/blender/makesrna/intern/Makefile
source/blender/makesrna/intern/rna_ID.c
source/blender/makesrna/intern/rna_access.c
source/blender/makesrna/intern/rna_define.c
source/blender/makesrna/intern/rna_object.c

index df9671d01676f50af00c34ffa6e66d76b80b92f1..2ffc68a0ba17ee5eb1c20faabd716095aac65d02 100644 (file)
@@ -348,6 +348,7 @@ const struct ListBase *RNA_struct_defined_functions(StructRNA *srna);
 const char *RNA_property_identifier(PointerRNA *ptr, PropertyRNA *prop);
 PropertyType RNA_property_type(PointerRNA *ptr, PropertyRNA *prop);
 PropertySubType RNA_property_subtype(PointerRNA *ptr, PropertyRNA *prop);
+int RNA_property_flag(PointerRNA *ptr, PropertyRNA *prop);
 
 int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop);
 
index 4ea97041f83b5c396845b811a441fb47eafcf1b3..2020ca1edb8cfb0012e3623d888cc635e5ecf6a4 100644 (file)
@@ -89,6 +89,9 @@ typedef enum PropertyFlag {
         * and collections */
        PROP_ANIMATEABLE = 2,
 
+       /* function paramater flags */
+       PROP_REQUIRED = 4,
+
        /* internal flags */
        PROP_BUILTIN = 128,
        PROP_EXPORT = 256,
index f5df20fcc9f806b4f0ea5c6765fc0d316bc07103..241067692ff51b6c82e106e21ec865127c03de33 100644 (file)
@@ -77,7 +77,7 @@ clean::
 # we want the .o's to be in the makesrna/ directory, but the
 # .c's are in the editors/*/ directories
 
-$(DIR)/$(DEBUG_DIR)%_api.o: ../../editors/interface/*_api.c
+$(DIR)/$(DEBUG_DIR)%_api.o: ../../editors/interface/%_api.c
     ifdef NAN_DEPEND
        @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
                | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
index cdae8d78ffe168c632f40ac12a6ab0302332352a..3146c20a71514e41c3687626bf3be5ec442a18b8 100644 (file)
@@ -198,7 +198,8 @@ static void rna_def_ID(BlenderRNA *brna)
        /* XXX temporary for testing */
        func= RNA_def_function(srna, "rename", "rename_id");
        RNA_def_function_ui_description(func, "Rename this ID datablock.");
-       RNA_def_string(func, "name", "", 0, "", "New name for the datablock.");
+       prop= RNA_def_string(func, "name", "", 0, "", "New name for the datablock.");
+       RNA_def_property_flag(prop, PROP_REQUIRED);
 }
 
 static void rna_def_library(BlenderRNA *brna)
index d08516c4a62d189c154b68e43d164e98c8b703a6..6b4e4fb5921e2c9a58c2ed704f217487c200ed4d 100644 (file)
@@ -401,6 +401,13 @@ PropertySubType RNA_property_subtype(PointerRNA *ptr, PropertyRNA *prop)
        return prop->subtype;
 }
 
+int RNA_property_flag(PointerRNA *ptr, PropertyRNA *prop)
+{
+       rna_idproperty_check(&prop, ptr);
+
+       return prop->flag;
+}
+
 int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
 {
        IDProperty *idprop;
index 31f7509981e11c4c3d398e1969a5fdc8297a3932..bfe7705818a4d828ce8efc58a468a4263ae0910e 100644 (file)
@@ -1404,7 +1404,7 @@ void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structnam
        dp= rna_find_struct_property_def(prop);
 
        if(dp)
-               dp->booleannegative= 1;
+               dp->enumbitflags= 1;
 }
 
 void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
index c1c19b3ffdffdb01a81844d43f82905f8b6b2601..1df01e4cabf69d726bf8b09c4535a01bfcc43884 100644 (file)
@@ -48,6 +48,12 @@ static void rna_Object_update(bContext *C, PointerRNA *ptr)
        DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB);
 }
 
+static void rna_Object_scene_update(bContext *C, PointerRNA *ptr)
+{
+       DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB);
+       DAG_scene_sort(CTX_data_scene(C));
+}
+
 static int rna_VertexGroup_index_get(PointerRNA *ptr)
 {
        Object *ob= (Object*)ptr->id.data;
@@ -483,6 +489,14 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
                {1, "OBJECT", "Object", ""},
                {0, NULL, NULL, NULL}};
 
+       static EnumPropertyItem dupli_items[] = {
+               {0, "NONE", "None", ""},
+               {OB_DUPLIFRAMES, "FRAMES", "Frames", "Make copy of object for every frame."},
+               {OB_DUPLIVERTS, "VERTS", "Verts", "Duplicate child objects on all vertices."},
+               {OB_DUPLIFACES, "FACES", "Faces", "Duplicate child objects on all faces."},
+               {OB_DUPLIGROUP, "GROUP", "Group", "Enable group instancing."},
+               {0, NULL, NULL, NULL}};
+
        srna= RNA_def_struct(brna, "Object", "ID");
        RNA_def_struct_ui_text(srna, "Object", "Object datablock defining an object in a scene..");
 
@@ -720,25 +734,11 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW);
        RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship.");
 
-       prop= RNA_def_property(srna, "dupli_frames", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIFRAMES);
-       RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
-       RNA_def_property_ui_text(prop, "Dupli Frames", "Make copy of object for every frame.");
-
-       prop= RNA_def_property(srna, "dupli_verts", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIVERTS);
-       RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
-       RNA_def_property_ui_text(prop, "Dupli Verts", "Duplicate child objects on all vertices.");
-
-       prop= RNA_def_property(srna, "dupli_faces", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIFACES);
-       RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
-       RNA_def_property_ui_text(prop, "Dupli Faces", "Duplicate child objects on all faces.");
-
-       prop= RNA_def_property(srna, "use_dupli_group", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIGROUP);
-       RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
-       RNA_def_property_ui_text(prop, "Use Dupli Group", "Enable group instancing.");
+       prop= RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag");
+       RNA_def_property_enum_items(prop, dupli_items);
+       RNA_def_property_ui_text(prop, "Dupli Type", "If not None, object duplication method to use.");
+       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_scene_update");
 
        prop= RNA_def_property(srna, "dupli_frames_no_speed", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLINOSPEED);