From f60b4228b929ce4d77187a5bbe52f74df2c3315e Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 11 Feb 2015 17:06:09 +0100 Subject: BPY RNA: add `is_property_readonly()`. This property may be defined dynamically, so mere access to static flag value through `bl_rna.properties[...].is_readonly` is not enough. --- source/blender/python/intern/bpy_rna.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'source/blender/python/intern') diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 592150239be..fadc50e3317 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -3184,6 +3184,34 @@ static PyObject *pyrna_struct_is_property_hidden(BPy_StructRNA *self, PyObject * return PyBool_FromLong(RNA_property_flag(prop) & PROP_HIDDEN); } +PyDoc_STRVAR(pyrna_struct_is_property_readonly_doc, +".. method:: is_property_readonly(property)\n" +"\n" +" Check if a property is readonly.\n" +"\n" +" :return: True when the property is readonly (not writable).\n" +" :rtype: boolean\n" +); +static PyObject *pyrna_struct_is_property_readonly(BPy_StructRNA *self, PyObject *args) +{ + PropertyRNA *prop; + const char *name; + + PYRNA_STRUCT_CHECK_OBJ(self); + + if (!PyArg_ParseTuple(args, "s:is_property_readonly", &name)) + return NULL; + + if ((prop = RNA_struct_find_property(&self->ptr, name)) == NULL) { + PyErr_Format(PyExc_TypeError, + "%.200s.is_property_readonly(\"%.200s\") not found", + RNA_struct_identifier(self->ptr.type), name); + return NULL; + } + + return PyBool_FromLong(!RNA_property_editable(&self->ptr, prop)); +} + PyDoc_STRVAR(pyrna_struct_path_resolve_doc, ".. method:: path_resolve(path, coerce=True)\n" "\n" @@ -4676,6 +4704,7 @@ static struct PyMethodDef pyrna_struct_methods[] = { {"is_property_set", (PyCFunction)pyrna_struct_is_property_set, METH_VARARGS, pyrna_struct_is_property_set_doc}, {"property_unset", (PyCFunction)pyrna_struct_property_unset, METH_VARARGS, pyrna_struct_property_unset_doc}, {"is_property_hidden", (PyCFunction)pyrna_struct_is_property_hidden, METH_VARARGS, pyrna_struct_is_property_hidden_doc}, + {"is_property_readonly", (PyCFunction)pyrna_struct_is_property_readonly, METH_VARARGS, pyrna_struct_is_property_readonly_doc}, {"path_resolve", (PyCFunction)pyrna_struct_path_resolve, METH_VARARGS, pyrna_struct_path_resolve_doc}, {"path_from_id", (PyCFunction)pyrna_struct_path_from_id, METH_VARARGS, pyrna_struct_path_from_id_doc}, {"type_recast", (PyCFunction)pyrna_struct_type_recast, METH_NOARGS, pyrna_struct_type_recast_doc}, -- cgit v1.2.3