Commit: f60b4228b929ce4d77187a5bbe52f74df2c3315e
Author: Bastien Montagne
Date:   Wed Feb 11 17:06:09 2015 +0100
Branches: master
https://developer.blender.org/rBf60b4228b929ce4d77187a5bbe52f74df2c3315e

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.

===================================================================

M       source/blender/python/intern/bpy_rna.c

===================================================================

diff --git a/source/blender/python/intern/bpy_rna.c 
b/source/blender/python/intern/bpy_rna.c
index 5921502..fadc50e 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},

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to