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

Brecht Van Lommel brecht at blender.org
Mon Nov 24 13:12:24 CET 2008


Revision: 17554
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17554
Author:   blendix
Date:     2008-11-24 13:12:24 +0100 (Mon, 24 Nov 2008)

Log Message:
-----------

RNA
* Wrap most user editable data in DNA_mesh_types.h and DNA_meshdata_types.h.
  Still needs to be improved in some areas though, especially how to deal
  with data layers (expose per element or as array, or both?), and data in
  face corners (bmesh type data structures are more logical here).

Tweaks to RNA defining to make some cases easier:
* Added range callback function for int/float.
* Added 'skip' callback for listbase and array iterators to skip items in
  the collection.
* Extra error print when calling wrong define_property_*_sdna functions.
* Also made button code respect non_editable flag, is quick change though,
  need to add support for properly graying out etc.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_types.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_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    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_main.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2008-11-24 12:12:24 UTC (rev 17554)
@@ -1138,30 +1138,32 @@
 	if(but->rnaprop) {
 		prop= but->rnaprop;
 
-		switch(RNA_property_type(prop, &but->rnapoin)) {
-			case PROP_BOOLEAN:
-				if(RNA_property_array_length(prop, &but->rnapoin))
-					RNA_property_boolean_set_array(prop, &but->rnapoin, but->rnaindex, value);
-				else
-					RNA_property_boolean_set(prop, &but->rnapoin, value);
-				break;
-			case PROP_INT:
-				if(RNA_property_array_length(prop, &but->rnapoin))
-					RNA_property_int_set_array(prop, &but->rnapoin, but->rnaindex, value);
-				else
-					RNA_property_int_set(prop, &but->rnapoin, value);
-				break;
-			case PROP_FLOAT:
-				if(RNA_property_array_length(prop, &but->rnapoin))
-					RNA_property_float_set_array(prop, &but->rnapoin, but->rnaindex, value);
-				else
-					RNA_property_float_set(prop, &but->rnapoin, value);
-				break;
-			case PROP_ENUM:
-				RNA_property_enum_set(prop, &but->rnapoin, value);
-				break;
-			default:
-				break;
+		if(RNA_property_editable(prop, &but->rnapoin)) {
+			switch(RNA_property_type(prop, &but->rnapoin)) {
+				case PROP_BOOLEAN:
+					if(RNA_property_array_length(prop, &but->rnapoin))
+						RNA_property_boolean_set_array(prop, &but->rnapoin, but->rnaindex, value);
+					else
+						RNA_property_boolean_set(prop, &but->rnapoin, value);
+					break;
+				case PROP_INT:
+					if(RNA_property_array_length(prop, &but->rnapoin))
+						RNA_property_int_set_array(prop, &but->rnapoin, but->rnaindex, value);
+					else
+						RNA_property_int_set(prop, &but->rnapoin, value);
+					break;
+				case PROP_FLOAT:
+					if(RNA_property_array_length(prop, &but->rnapoin))
+						RNA_property_float_set_array(prop, &but->rnapoin, but->rnaindex, value);
+					else
+						RNA_property_float_set(prop, &but->rnapoin, value);
+					break;
+				case PROP_ENUM:
+					RNA_property_enum_set(prop, &but->rnapoin, value);
+					break;
+				default:
+					break;
+			}
 		}
 	}
 	else if(but->pointype==0);

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-24 12:12:24 UTC (rev 17554)
@@ -907,7 +907,10 @@
 void ED_SCR_OT_area_split(wmOperatorType *ot)
 {
 	PropertyRNA *prop;
-    static EnumPropertyItem prop_direction_items[] = {{'h', "HORIZONTAL", "Horizontal"}, {'v', "VERTICAL", "Vertical"}, {0, NULL, NULL}};
+    static EnumPropertyItem prop_direction_items[] = {
+		{'h', "HORIZONTAL", "Horizontal", ""},
+		{'v', "VERTICAL", "Vertical", ""},
+		{0, NULL, NULL, NULL}};
 
 	ot->name = "Split area";
 	ot->idname = "ED_SCR_OT_area_split";

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2008-11-24 12:12:24 UTC (rev 17554)
@@ -78,10 +78,10 @@
 void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description);
 void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision);
 
-void RNA_def_property_funcs(PropertyRNA *prop, const char *notify);
+void RNA_def_property_funcs(PropertyRNA *prop, const char *notify, const char *editable);
 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);
-void RNA_def_property_float_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_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 *type, const char *set);

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2008-11-24 12:12:24 UTC (rev 17554)
@@ -113,6 +113,7 @@
 	int value;
 	const char *identifier;
 	const char *name;
+	const char *description;
 } EnumPropertyItem;
 
 struct PropertyRNA;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2008-11-24 12:12:24 UTC (rev 17554)
@@ -291,7 +291,7 @@
 		fprintf(f, "}\n\n");
 	}
 	else if(prop->type == PROP_COLLECTION) {
-		if(prop->type == PROP_COLLECTION && !dp->dnalengthname) {
+		if(prop->type == PROP_COLLECTION && (!dp->dnalengthname || !dp->dnaname)) {
 			fprintf(stderr, "rna_def_property_length_func: %s.%s has no valid dna info.\n", srna->identifier, prop->identifier);
 			DefRNA.error= 1;
 			return NULL;
@@ -302,7 +302,7 @@
 		fprintf(f, "static int %s(PointerRNA *ptr)\n", func);
 		fprintf(f, "{\n");
 		fprintf(f, "	%s *data= (%s*)ptr->data;\n", dp->dnastructname, dp->dnastructname);
-		fprintf(f, "	return data->%s;\n", dp->dnalengthname);
+		fprintf(f, "	return (data->%s == NULL)? 0: data->%s;\n", dp->dnaname, dp->dnalengthname);
 		fprintf(f, "}\n\n");
 	}
 
@@ -328,14 +328,14 @@
 		fprintf(f, "static void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)\n", func);
 		fprintf(f, "{\n");
 		fprintf(f, "	%s *data= (%s*)ptr->data;\n", dp->dnastructname, dp->dnastructname);
-		fprintf(f, "	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
+		fprintf(f, "	rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
 		fprintf(f, "}\n\n");
 	}
 	else {
 		fprintf(f, "static void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)\n", func);
 		fprintf(f, "{\n");
 		fprintf(f, "	%s *data= (%s*)ptr->data;\n", dp->dnastructname, dp->dnastructname);
-		fprintf(f, "	rna_iterator_listbase_begin(iter, &data->%s);\n", dp->dnaname);
+		fprintf(f, "	rna_iterator_listbase_begin(iter, &data->%s, NULL);\n", dp->dnaname);
 		fprintf(f, "}\n\n");
 	}
 
@@ -586,7 +586,8 @@
 					for(i=0; i<eprop->totitem; i++) {
 						fprintf(f, "{%d, ", eprop->item[i].value);
 						rna_print_c_string(f, eprop->item[i].identifier); fprintf(f, ", ");
-						rna_print_c_string(f, eprop->item[i].name); fprintf(f, "}");
+						rna_print_c_string(f, eprop->item[i].name); fprintf(f, ", ");
+						rna_print_c_string(f, eprop->item[i].description); fprintf(f, "}");
 						if(i != eprop->totitem-1)
 							fprintf(f, ", ");
 					}
@@ -675,7 +676,7 @@
 		rna_print_c_string(f, prop->name); fprintf(f, ",\n\t");
 		rna_print_c_string(f, prop->description); fprintf(f, ",\n");
 		fprintf(f, "\t%s, %s, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), prop->arraylength);
-		fprintf(f, "\t%s},\n", rna_function_string(prop->notify));
+		fprintf(f, "\t%s, %s},\n", rna_function_string(prop->notify), rna_function_string(prop->editable));
 
 		switch(prop->type) {
 			case PROP_BOOLEAN: {
@@ -687,14 +688,14 @@
 			}
 			case PROP_INT: {
 				IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
-				fprintf(f, "\t%s, %s, %s, %s, %d, %d, %d, %d, %d,\n\t%d, ", rna_function_string(iprop->get), rna_function_string(iprop->set), rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), iprop->softmin, iprop->softmax, iprop->hardmin, iprop->hardmax, iprop->step, iprop->defaultvalue);
+				fprintf(f, "\t%s, %s, %s, %s, %s, %d, %d, %d, %d, %d,\n\t%d, ", rna_function_string(iprop->get), rna_function_string(iprop->set), rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), rna_function_string(iprop->range), iprop->softmin, iprop->softmax, iprop->hardmin, iprop->hardmax, iprop->step, iprop->defaultvalue);
 				if(prop->arraylength) fprintf(f, "rna_%s_%s_default\n", srna->identifier, prop->identifier);
 				else fprintf(f, "NULL\n");
 				break;
 			}
 			case PROP_FLOAT: {
 				FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop;
-				fprintf(f, "\t%s, %s, %s, %s, ", rna_function_string(fprop->get), rna_function_string(fprop->set), rna_function_string(fprop->getarray), rna_function_string(fprop->setarray));
+				fprintf(f, "\t%s, %s, %s, %s, %s, ", rna_function_string(fprop->get), rna_function_string(fprop->set), rna_function_string(fprop->getarray), rna_function_string(fprop->setarray), rna_function_string(fprop->range));
 				rna_float_print(f, fprop->softmin); fprintf(f, ", ");
 				rna_float_print(f, fprop->softmax); fprintf(f, ", ");
 				rna_float_print(f, fprop->hardmin); fprintf(f, ", ");

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2008-11-24 11:17:13 UTC (rev 17553)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2008-11-24 12:12:24 UTC (rev 17554)
@@ -291,19 +291,33 @@
 	rna_idproperty_check(&prop, ptr);
 	iprop= (IntPropertyRNA*)prop;
 
-	*hardmin= iprop->hardmin;
-	*hardmax= iprop->hardmax;
+	if(iprop->range) {
+		iprop->range(ptr, hardmin, hardmax);
+	}
+	else {
+		*hardmin= iprop->hardmin;
+		*hardmax= iprop->hardmax;
+	}
 }
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list