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

Brecht Van Lommel brecht at blender.org
Fri Mar 6 11:22:12 CET 2009


Revision: 19208
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19208
Author:   blendix
Date:     2009-03-06 11:22:12 +0100 (Fri, 06 Mar 2009)

Log Message:
-----------
RNA:
* Enum default value is now automatically the first item if it
  is not specified or 0.
* Otherwise if it's not in the items an error will be printed.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-03-06 07:38:18 UTC (rev 19207)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-03-06 10:22:12 UTC (rev 19208)
@@ -1022,7 +1022,7 @@
 		switch(prop->type) {
 			case PROP_ENUM: {
 				EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
-				int i;
+				int i, defaultfound= 0;
 
 				if(eprop->item) {
 					fprintf(f, "static EnumPropertyItem rna_%s_%s_items[%d] = {", srna->identifier, prop->identifier, eprop->totitem);
@@ -1034,9 +1034,17 @@
 						rna_print_c_string(f, eprop->item[i].description); fprintf(f, "}");
 						if(i != eprop->totitem-1)
 							fprintf(f, ", ");
+
+						if(eprop->defaultvalue == eprop->item[i].value)
+							defaultfound= 1;
 					}
 
 					fprintf(f, "};\n\n");
+
+					if(!defaultfound) {
+						fprintf(stderr, "rna_generate_structs: %s.%s, enum default is not in items.\n", srna->identifier, prop->identifier);
+						DefRNA.error= 1;
+					}
 				}
 				else {
 					fprintf(stderr, "rna_generate_structs: %s.%s, enum must have items defined.\n", srna->identifier, prop->identifier);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-03-06 07:38:18 UTC (rev 19207)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-03-06 10:22:12 UTC (rev 19208)
@@ -843,16 +843,23 @@
 void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
 {
 	StructRNA *srna= DefRNA.laststruct;
-	int i;
+	int i, defaultfound= 0;
 
 	switch(prop->type) {
 		case PROP_ENUM: {
 			EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
 			eprop->item= item;
 			eprop->totitem= 0;
-			for(i=0; item[i].identifier; i++)
+			for(i=0; item[i].identifier; i++) {
 				eprop->totitem++;
 
+				if(item[i].value == eprop->defaultvalue)
+					defaultfound= 1;
+			}
+
+			if(!defaultfound)
+				eprop->defaultvalue= item[0].value;
+
 			break;
 		}
 		default:
@@ -1001,11 +1008,28 @@
 void RNA_def_property_enum_default(PropertyRNA *prop, int value)
 {
 	StructRNA *srna= DefRNA.laststruct;
+	int i, defaultfound= 0;
 
 	switch(prop->type) {
 		case PROP_ENUM: {
 			EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
 			eprop->defaultvalue= value;
+
+			for(i=0; i<eprop->totitem; i++) {
+				if(eprop->item[i].value == eprop->defaultvalue)
+					defaultfound= 1;
+			}
+
+			if(!defaultfound && eprop->totitem) {
+				if(value == 0) {
+					eprop->defaultvalue= eprop->item[0].value;
+				}
+				else {
+					fprintf(stderr, "RNA_def_property_enum_default: %s.%s, default is not in items.\n", srna->identifier, prop->identifier);
+					DefRNA.error= 1;
+				}
+			}
+
 			break;
 		}
 		default:





More information about the Bf-blender-cvs mailing list