[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21564] branches/blender2.5/blender/source /blender: RNA & PyAPI
Campbell Barton
ideasman42 at gmail.com
Mon Jul 13 21:33:59 CEST 2009
Revision: 21564
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21564
Author: campbellbarton
Date: 2009-07-13 21:33:59 +0200 (Mon, 13 Jul 2009)
Log Message:
-----------
RNA & PyAPI
* support for dynamic enums to be inspected enumProp.items() from python.
* fix, enums check for a separator was flipped, meant no enums were in docs.
* dynamic enum functions now check for a NULL context and return all possible options for the "items" attribute used for docs.
* added an arg for rna arrays to free the array there looping over (needed to free dynamically allocated enum items)
* python api checks for NULL items since this can happen in some cases.
* python api, When getting an enum ID from an int in an array - If it failed it would get the first enum identifier and return that. Brecht? dont understand, making it return an empty string in these cases.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
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_color.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
branches/blender2.5/blender/source/blender/makesrna/intern/rna_key.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_lattice.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_particle.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_space.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_world.c
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -1229,12 +1229,25 @@
static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *ptr, int *free)
{
- Object *obedit= CTX_data_edit_object(C);
-
+ Object *obedit;
+ EnumPropertyItem *item= NULL;
+ int totitem= 0;
+
+ if(C==NULL) {
+ /* needed for doc generation */
+ RNA_enum_items_add(&item, &totitem, prop_simvertex_types);
+ RNA_enum_items_add(&item, &totitem, prop_simedge_types);
+ RNA_enum_items_add(&item, &totitem, prop_simface_types);
+ RNA_enum_item_end(&item, &totitem);
+ *free= 1;
+
+ return item;
+ }
+
+ obedit= CTX_data_edit_object(C);
+
if(obedit && obedit->type == OB_MESH) {
EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
- EnumPropertyItem *item= NULL;
- int totitem= 0;
if(em->selectmode & SCE_SELECT_VERTEX)
RNA_enum_items_add(&item, &totitem, prop_simvertex_types);
@@ -1248,7 +1261,7 @@
return item;
}
-
+
return NULL;
}
Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -5795,13 +5795,24 @@
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free)
-{
- Object *obedit= CTX_data_edit_object(C);
-
+{
+ EnumPropertyItem *item= NULL;
+ int totitem= 0;
+
+ Object *obedit;
+
+ if(C==NULL) {
+ /* needed for doc generation */
+ RNA_enum_items_add(&item, &totitem, merge_type_items);
+ RNA_enum_item_end(&item, &totitem);
+
+ *free= 1;
+ return item;
+ }
+
+ obedit= CTX_data_edit_object(C);
if(obedit && obedit->type == OB_MESH) {
EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
- EnumPropertyItem *item= NULL;
- int totitem= 0;
if(em->selectmode & SCE_SELECT_VERTEX) {
if(em->selected.first && em->selected.last &&
@@ -5824,7 +5835,7 @@
return item;
}
-
+
return NULL;
}
Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -358,8 +358,10 @@
EnumPropertyItem *BIF_enumTransformOrientation(bContext *C)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- TransformOrientation *ts = transform_spaces->first;
+ Scene *scene;
+ ListBase *transform_spaces;
+ TransformOrientation *ts= NULL;
+
EnumPropertyItem global = {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""};
EnumPropertyItem normal = {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""};
EnumPropertyItem local = {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""};
@@ -374,6 +376,15 @@
RNA_enum_item_add(&item, &totitem, &local);
RNA_enum_item_add(&item, &totitem, &view);
+ if(C) {
+ scene= CTX_data_scene(C);
+
+ if(scene) {
+ transform_spaces = &scene->transform_spaces;
+ ts = transform_spaces->first;
+ }
+ }
+
if(ts)
RNA_enum_item_add(&item, &totitem, &sepr);
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -699,9 +699,9 @@
}
else {
if(dp->dnalengthname)
- fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
+ fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname);
else
- fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed);
+ fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed);
}
}
else {
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -643,15 +643,18 @@
void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free)
{
EnumPropertyRNA *eprop= (EnumPropertyRNA*)rna_ensure_property(prop);
- int tot;
*free= 0;
- if(C && eprop->itemf) {
+ if(eprop->itemf) {
+ int tot= 0;
*item= eprop->itemf(C, ptr, free);
if(totitem) {
- for(tot=0; (*item)[tot].identifier; tot++);
+ if(*item) {
+ for( ; (*item)[tot].identifier; tot++);
+ }
+
*totitem= tot;
}
}
@@ -710,11 +713,14 @@
int result, free;
RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
- result= RNA_enum_identifier(item, value, identifier);
- if(free)
- MEM_freeN(item);
+ if(item) {
+ result= RNA_enum_identifier(item, value, identifier);
+ if(free)
+ MEM_freeN(item);
- return result;
+ return result;
+ }
+ return 0;
}
const char *RNA_property_ui_name(PropertyRNA *prop)
@@ -1303,9 +1309,9 @@
iter->prop= prop;
if(idprop)
- rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, NULL);
+ rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, 0, NULL);
else
- rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, NULL);
+ rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, 0, NULL);
if(iter->valid)
rna_property_collection_get_idp(iter);
@@ -1902,7 +1908,7 @@
iter->internal= NULL;
}
-void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip)
+void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip)
{
ArrayIterator *internal;
@@ -1911,6 +1917,7 @@
internal= MEM_callocN(sizeof(ArrayIterator), "ArrayIterator");
internal->ptr= ptr;
+ internal->free_ptr= free_ptr ? ptr:NULL;
internal->endptr= ((char*)ptr)+length*itemsize;
internal->itemsize= itemsize;
internal->skip= skip;
@@ -1955,6 +1962,11 @@
void rna_iterator_array_end(CollectionPropertyIterator *iter)
{
+ ArrayIterator *internal= iter->internal;
+
+ if(internal->free_ptr)
+ MEM_freeN(internal->free_ptr);
+
MEM_freeN(iter->internal);
iter->internal= NULL;
}
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -37,7 +37,7 @@
static void rna_Brush_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Brush *brush= (Brush*)ptr->data;
- rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, NULL);
+ rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr)
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_color.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -50,7 +50,7 @@
{
CurveMapping *cumap= (CurveMapping*)ptr->data;
- rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), NULL);
+ rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, NULL);
}
static void rna_CurveMapping_clip_set(PointerRNA *ptr, int value)
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c 2009-07-13 19:17:52 UTC (rev 21563)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c 2009-07-13 19:33:59 UTC (rev 21564)
@@ -181,6 +181,20 @@
{
Object *ob= (Object*)ptr->id.data;
bConstraint *con= (bConstraint*)ptr->data;
+
+ if(C==NULL) {
+ EnumPropertyItem *item= NULL;
+ int totitem= 0;
+
+ /* needed for doc generation */
+ RNA_enum_items_add(&item, &totitem, space_object_items);
+ RNA_enum_items_add(&item, &totitem, space_pchan_items);
+ RNA_enum_item_end(&item, &totitem);
+
+ *free= 1;
+
+ return item;
+ }
if(BLI_findindex(&ob->constraints, con) == -1)
return space_pchan_items;
@@ -195,6 +209,20 @@
ListBase targets = {NULL, NULL};
bConstraintTarget *ct;
+ if(C==NULL) {
+ EnumPropertyItem *item= NULL;
+ int totitem= 0;
+
+ /* needed for doc generation */
+ RNA_enum_items_add(&item, &totitem, space_object_items);
+ RNA_enum_items_add(&item, &totitem, space_pchan_items);
+ RNA_enum_item_end(&item, &totitem);
+
+ *free= 1;
+
+ return item;
+ }
+
if(cti && cti->get_constraint_targets) {
cti->get_constraint_targets(con, &targets);
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c 2009-07-13 19:17:52 UTC (rev 21563)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list