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

Reply via email to