Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-24 18:03:55 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-24 18:03:55 +0400
commit242d9c31d3316f99525925eb7da30522457064e8 (patch)
tree2ff511c7ebf191a2a6376c53a63050afe459492f /source/blender/python
parent9abce5dfbaee953fcec0779a94cbadc3516b9daf (diff)
RNA
* RNA_struct_name_get_alloc function to get the name from a pointer, instead of having to deal with name property. * CTX_data_pointer_get_type to get data from context with a check for the RNA type.
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/intern/bpy_rna.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index e91b96d6f26..1fd60a8ff27 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -161,14 +161,15 @@ static PyObject *pyrna_prop_richcmp(BPy_PropertyRNA * a, BPy_PropertyRNA * b, in
/*----------------------repr--------------------------------------------*/
static PyObject *pyrna_struct_repr( BPy_StructRNA * self )
{
- PropertyRNA *prop;
- char str[512];
+ PyObject *pyob;
+ char *name;
/* print name if available */
- prop= RNA_struct_name_property(self->ptr.type);
- if(prop) {
- RNA_property_string_get(&self->ptr, prop, str);
- return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(self->ptr.type), str);
+ name= RNA_struct_name_get_alloc(&self->ptr, NULL, 0);
+ if(name) {
+ pyob= PyUnicode_FromFormat( "[BPy_StructRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(self->ptr.type), name);
+ MEM_freeN(name);
+ return pyob;
}
return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\"]", RNA_struct_identifier(self->ptr.type));
@@ -176,20 +177,19 @@ static PyObject *pyrna_struct_repr( BPy_StructRNA * self )
static PyObject *pyrna_prop_repr( BPy_PropertyRNA * self )
{
- PropertyRNA *prop;
+ PyObject *pyob;
PointerRNA ptr;
- char str[512];
+ char *name;
/* if a pointer, try to print name of pointer target too */
if(RNA_property_type(self->prop) == PROP_POINTER) {
ptr= RNA_property_pointer_get(&self->ptr, self->prop);
+ name= RNA_struct_name_get_alloc(&ptr, NULL, 0);
- if(ptr.data) {
- prop= RNA_struct_name_property(ptr.type);
- if(prop) {
- RNA_property_string_get(&ptr, prop, str);
- return PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\" -> \"%s\" ]", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), str);
- }
+ if(name) {
+ pyob= PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\" -> \"%s\" ]", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
+ MEM_freeN(name);
+ return pyob;
}
}
@@ -218,7 +218,6 @@ static void pyrna_struct_dealloc( BPy_StructRNA * self )
static char *pyrna_enum_as_string(PointerRNA *ptr, PropertyRNA *prop)
{
const EnumPropertyItem *item;
- int totitem;
RNA_property_enum_items(ptr, prop, &item, NULL);
return (char*)BPy_enum_as_string((EnumPropertyItem*)item);
@@ -971,21 +970,20 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA * self)
/*
* Collect RNA attributes
*/
- PropertyRNA *nameprop;
char name[256], *nameptr;
iterprop= RNA_struct_iterator_property(self->ptr.type);
RNA_property_collection_begin(&self->ptr, iterprop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
- nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
-
+ nameptr= RNA_struct_name_get_alloc(&iter.ptr, name, sizeof(name));
+
+ if(nameptr) {
pystring = PyUnicode_FromString(nameptr);
PyList_Append(ret, pystring);
Py_DECREF(pystring);
- if ((char *)&name != nameptr)
+ if(name != nameptr)
MEM_freeN(nameptr);
}
}
@@ -1132,7 +1130,9 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
RNA_property_collection_begin(&self->ptr, self->prop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
+ nameptr= RNA_struct_name_get_alloc(&iter.ptr, name, sizeof(name));
+
+ if(nameptr) {
nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
/* add to python list */
@@ -1141,7 +1141,7 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
Py_DECREF(item);
/* done */
- if ((char *)&name != nameptr)
+ if(name != nameptr)
MEM_freeN(nameptr);
}
}
@@ -1160,7 +1160,6 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self)
} else {
PyObject *item;
CollectionPropertyIterator iter;
- PropertyRNA *nameprop;
char name[256], *nameptr;
int i= 0;
@@ -1171,10 +1170,10 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self)
if(iter.ptr.data) {
/* add to python list */
item= PyTuple_New(2);
- if(nameprop = RNA_struct_name_property(iter.ptr.type)) {
- nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
+ nameptr= RNA_struct_name_get_alloc(&iter.ptr, name, sizeof(name));
+ if(nameptr) {
PyTuple_SET_ITEM(item, 0, PyUnicode_FromString( nameptr ));
- if ((char *)&name != nameptr)
+ if(name != nameptr)
MEM_freeN(nameptr);
}
else {
@@ -1205,10 +1204,8 @@ PyObject *pyrna_prop_values(BPy_PropertyRNA *self)
} else {
PyObject *item;
CollectionPropertyIterator iter;
- PropertyRNA *iterprop;
ret = PyList_New(0);
- //iterprop= RNA_struct_iterator_property(self->ptr.type);
RNA_property_collection_begin(&self->ptr, self->prop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
item = pyrna_struct_CreatePyObject(&iter.ptr);