From f7682e2e0f5401a5cd2f394ed17fd29613b5381f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Nov 2009 12:54:29 +0000 Subject: [PATCH] - in pose mode, pose bone properties are edited rather then armature bone - new id property array method convert_to_pyobject() - editing an array in the UI broke - fixed for own error when updating ID prop api --- release/scripts/modules/rna_prop_ui.py | 6 +++++- release/scripts/ui/properties_data_bone.py | 9 ++++++--- source/blender/python/generic/IDProp.c | 17 ++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py index ebd1fe4cd34..a5584093442 100644 --- a/release/scripts/modules/rna_prop_ui.py +++ b/release/scripts/modules/rna_prop_ui.py @@ -70,6 +70,8 @@ def draw(layout, context, context_member): for key, val in items: row = layout.row() convert_to_pyobject = getattr(val, "convert_to_pyobject", None) + + val_orig = val if convert_to_pyobject: val_draw = val = val.convert_to_pyobject() val_draw = str(val_draw) @@ -96,7 +98,9 @@ def draw(layout, context, context_member): split = box.split(percentage=0.75) row = split.row() row.itemL(text=key) - if convert_to_pyobject: + + # explicit exception for arrays + if convert_to_pyobject and not hasattr(val_orig, "len"): row.itemL(text=val_draw) else: row.itemR(rna_item, key, text="") diff --git a/release/scripts/ui/properties_data_bone.py b/release/scripts/ui/properties_data_bone.py index 6ea65bf5cd1..08dbe86c13f 100644 --- a/release/scripts/ui/properties_data_bone.py +++ b/release/scripts/ui/properties_data_bone.py @@ -281,10 +281,13 @@ class BONE_PT_properties(BoneButtonsPanel): def draw(self, context): import rna_prop_ui # reload(rna_prop_ui) + obj = context.object + if obj and obj.mode == 'POSE': + item = "active_pchan" + else: + item = "active_bone" - rna_prop_ui.draw(self.layout, context, "active_bone") - - + rna_prop_ui.draw(self.layout, context, item) bpy.types.register(BONE_PT_context_bone) bpy.types.register(BONE_PT_transform) diff --git a/source/blender/python/generic/IDProp.c b/source/blender/python/generic/IDProp.c index 68d3e3879e5..6d71332b9ec 100644 --- a/source/blender/python/generic/IDProp.c +++ b/source/blender/python/generic/IDProp.c @@ -346,7 +346,7 @@ int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val) static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val) { - BPy_Wrap_SetMapItem(self->prop, key, val); + return BPy_Wrap_SetMapItem(self->prop, key, val); } static PyObject *BPy_IDGroup_SpawnIterator(BPy_IDProperty *self) @@ -478,7 +478,7 @@ static PyObject *BPy_IDGroup_IterItems(BPy_IDProperty *self) } /* utility function */ -static BPy_IDGroup_CorrectListLen(IDProperty *prop, PyObject *seq, int len) +static void BPy_IDGroup_CorrectListLen(IDProperty *prop, PyObject *seq, int len) { int i, j; @@ -753,6 +753,17 @@ static PyGetSetDef BPy_IDArray_getseters[] = { {NULL, NULL, NULL, NULL, NULL}, }; +static PyObject *BPy_IDArray_ConvertToPy(BPy_IDArray *self) +{ + return BPy_IDGroup_MapDataToPy(self->prop); +} + +static PyMethodDef BPy_IDArray_methods[] = { + {"convert_to_pyobject", (PyCFunction)BPy_IDArray_ConvertToPy, METH_NOARGS, + "return a purely python version of the group."}, + {0, NULL, 0, NULL} +}; + static int BPy_IDArray_Len(BPy_IDArray *self) { return self->prop->len; @@ -893,7 +904,7 @@ PyTypeObject IDArray_Type = { NULL, /* iternextfunc tp_iternext; */ /*** Attribute descriptor and subclassing stuff ***/ - NULL, /* struct PyMethodDef *tp_methods; */ + BPy_IDArray_methods, /* struct PyMethodDef *tp_methods; */ NULL, /* struct PyMemberDef *tp_members; */ BPy_IDArray_getseters, /* struct PyGetSetDef *tp_getset; */ NULL, /* struct _typeobject *tp_base; */