my chnges broke 'del idprop["key"]'
authorCampbell Barton <ideasman42@gmail.com>
Mon, 16 Nov 2009 22:21:39 +0000 (22:21 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 16 Nov 2009 22:21:39 +0000 (22:21 +0000)
made it possible to remove properties from rna types.

eg.
 del group["someprop"]

source/blender/editors/screen/screen_context.c
source/blender/python/generic/IDProp.c
source/blender/python/generic/IDProp.h
source/blender/python/intern/bpy_rna.c

index 1672f8f332505de99a8227705acd534a03f42472..f1bc313d6095002bc09a1b40b3dd50acf53ee69a 100644 (file)
@@ -65,7 +65,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
                        "selected_editable_objects", "selected_editable_bases",
                        "visible_bones", "editable_bones", "selected_bones", "selected_editable_bones",
                        "visible_pchans", "selected_pchans", "active_bone", "active_pchan",
-                       "active_base", "active_object", "edit_object",
+                       "active_base", "active_object", "object", "edit_object",
                        "sculpt_object", "vertex_paint_object", "weight_paint_object",
                        "texture_paint_object", "particle_edit_object", NULL};
 
index ccb6814993142ce3c8eac7db67b78ace17a6b3b3..68d3e3879e577e1c68815c0c7e33bf8a467b4211 100644 (file)
@@ -307,24 +307,17 @@ char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObje
        return NULL;
 }
 
-static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
+int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val)
 {
-       char *err;
-
-       if (self->prop->type  != IDP_GROUP) {
+       if (prop->type  != IDP_GROUP) {
                PyErr_SetString( PyExc_TypeError, "unsubscriptable object");
                return -1;
        }
 
-       if (!PyUnicode_Check(key)) {
-               PyErr_SetString( PyExc_TypeError, "only strings are allowed as subgroup keys" );
-               return -1;
-       }
-
-       if (val == NULL) {
-               IDProperty *pkey = IDP_GetPropertyFromGroup(self->prop, _PyUnicode_AsString(key));
+       if (val == NULL) { /* del idprop[key] */
+               IDProperty *pkey = IDP_GetPropertyFromGroup(prop, _PyUnicode_AsString(key));
                if (pkey) {
-                       IDP_RemFromGroup(self->prop, pkey);
+                       IDP_RemFromGroup(prop, pkey);
                        IDP_FreeProperty(pkey);
                        MEM_freeN(pkey);
                        return 0;
@@ -333,14 +326,27 @@ static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject
                        return -1;
                }
        }
+       else {
+               char *err;
 
-       err = BPy_IDProperty_Map_ValidateAndCreate(_PyUnicode_AsString(key), self->prop, val);
-       if (err) {
-               PyErr_SetString( PyExc_RuntimeError, err );
-               return -1;
+               if (!PyUnicode_Check(key)) {
+                       PyErr_SetString( PyExc_TypeError, "only strings are allowed as subgroup keys" );
+                       return -1;
+               }
+
+               err = BPy_IDProperty_Map_ValidateAndCreate(_PyUnicode_AsString(key), prop, val);
+               if (err) {
+                       PyErr_SetString( PyExc_RuntimeError, err );
+                       return -1;
+               }
+
+               return 0;
        }
+}
 
-       return 0;
+static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
+{
+       BPy_Wrap_SetMapItem(self->prop, key, val);
 }
 
 static PyObject *BPy_IDGroup_SpawnIterator(BPy_IDProperty *self)
index 43b13eac377358681d516042beb56f20d60318fd..044abf82329a7b80c0947d5c955e3ad6643a5b45 100644 (file)
@@ -52,6 +52,7 @@ PyObject *BPy_Wrap_IDProperty(struct ID *id, struct IDProperty *prop, struct IDP
 PyObject *BPy_Wrap_GetKeys(IDProperty *prop);
 PyObject *BPy_Wrap_GetValues(ID *id, IDProperty *prop);
 PyObject *BPy_Wrap_GetItems(ID *id, IDProperty *prop);
+int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val);
 
 
 PyObject *BPy_IDGroup_WrapData( ID *id, IDProperty *prop );
index fa45da6f28b7c39cc1d6de24969d8486c93bcac4..ddc8af117a6521afbb142c84ee2498113919e77e 100644 (file)
@@ -1225,35 +1225,18 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
        }
 
        return BPy_IDGroup_WrapData(self->ptr.id.data, idprop);
-
-
 }
 
 static int pyrna_struct_ass_subscript( BPy_StructRNA *self, PyObject *key, PyObject *value )
 {
-       IDProperty *group;
-       char *name= _PyUnicode_AsString(key);
-       char *err;
-
-       if(name==NULL) {
-               PyErr_SetString( PyExc_TypeError, "only strings are allowed as keys of ID properties");
-               return -1;
-       }
-
-       group= RNA_struct_idproperties(&self->ptr, 1);
+       IDProperty *group= RNA_struct_idproperties(&self->ptr, 1);
 
        if(group==NULL) {
                PyErr_SetString(PyExc_TypeError, "id properties not supported for this type");
                return -1;
        }
 
-       err = BPy_IDProperty_Map_ValidateAndCreate(_PyUnicode_AsString(key), group, value);
-       if (err) {
-               PyErr_SetString( PyExc_RuntimeError, err );
-               return -1;
-       }
-
-       return 0;
+       return BPy_Wrap_SetMapItem(group, key, value);
 }
 
 static PyMappingMethods pyrna_struct_as_mapping = {