Revision: 46560
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46560
Author: campbellbarton
Date: 2012-05-11 18:55:14 +0000 (Fri, 11 May 2012)
Log Message:
-----------
fix [#30905] Operator preset save doesn't serialize PropertyGroups
fix based on patch by Julien Rivaud (frnchfrgg), but re-written a bit
differently not to be operator specific.
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_operators/presets.py
Modified: trunk/blender/release/scripts/startup/bl_operators/presets.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/presets.py
2012-05-11 17:41:38 UTC (rev 46559)
+++ trunk/blender/release/scripts/startup/bl_operators/presets.py
2012-05-11 18:55:14 UTC (rev 46560)
@@ -93,6 +93,29 @@
filepath,
preset_menu_class.preset_xml_map)
else:
+
+ def rna_recursiev_attr_expand(value, rna_path_step, level):
+ if isinstance(value, bpy.types.PropertyGroup):
+ for sub_value_attr in
value.bl_rna.properties.keys():
+ if sub_value_attr == "rna_type":
+ continue
+ sub_value = getattr(value, sub_value_attr)
+ rna_recursiev_attr_expand(sub_value, "%s.%s" %
(rna_path_step, sub_value_attr), level)
+ elif type(value).__name__ ==
"bpy_prop_collection_idprop": # could use nicer method
+ file_preset.write("%s.clear()\n" % rna_path_step)
+ for sub_value in value:
+ file_preset.write("item_sub_%d = %s.add()\n" %
(level, rna_path_step))
+ rna_recursiev_attr_expand(sub_value,
"item_sub_%d" % level, level + 1)
+ else:
+ # convert thin wrapped sequences
+ # to simple lists to repr()
+ try:
+ value = value[:]
+ except:
+ pass
+
+ file_preset.write("%s = %r\n" % (rna_path_step,
value))
+
file_preset = open(filepath, 'w')
file_preset.write("import bpy\n")
@@ -104,15 +127,11 @@
for rna_path in self.preset_values:
value = eval(rna_path)
- # convert thin wrapped sequences
- # to simple lists to repr()
- try:
- value = value[:]
- except:
- pass
+ rna_recursiev_attr_expand(value, rna_path, 1)
- file_preset.write("%s = %r\n" % (rna_path, value))
+
+
file_preset.close()
preset_menu_class.bl_label = bpy.path.display_name(filename)
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs