- bugfix, operators were getting their properties registered twice.

- operator properties are now converted into python property() class members which bypass the operator 'properties' member.
  self.properties.mysetting
 ... can now be written as ...
  self.mysetting
- fix for error reloading rigify
This commit is contained in:
Campbell Barton 2010-09-09 17:41:36 +00:00
parent f9367c4c4d
commit 7bd1f9a234
4 changed files with 13 additions and 1 deletions

@ -701,6 +701,14 @@ class OrderedMeta(RNAMeta):
class Operator(StructRNA, metaclass=OrderedMeta):
__slots__ = ()
@classmethod
def easy_getsets(cls):
def bypass_attr(attr):
setattr(cls, attr, property(lambda self: getattr(self.properties, attr), lambda self, value: setattr(self.properties, attr, value)))
for attr, value in list(cls.__dict__.items()):
if type(value) == tuple and len(value) == 2 and type(value[1]) == dict:
bypass_attr(attr)
class Macro(StructRNA, metaclass=OrderedMeta):
# bpy_types is imported before ops is defined

@ -318,7 +318,7 @@ def register():
def unregister():
bpy.types.Scene.RemoveProperty("pose_templates")
del bpy.types.Scene.pose_templates
space_info.INFO_MT_armature_add.remove(menu_func)
if __name__ == "__main__":

@ -840,6 +840,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
/* create a new menu type */
dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
dummyot.ext.data= data;
dummyot.ext.call= call;
dummyot.ext.free= free;

@ -45,6 +45,9 @@ static void operator_properties_init(wmOperatorType *ot)
PyErr_Print(); /* failed to register operator props */
PyErr_Clear();
}
// see bpy_types.py:Operator, May redo this some other way!
PyObject_CallMethod(py_class, "easy_getsets", NULL);
}
void operator_wrapper(wmOperatorType *ot, void *userdata)