Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-05-11 22:55:14 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-05-11 22:55:14 +0400
commit564a6c2353bc2d55d993d8e89fdbb4456e72b7b9 (patch)
tree2648f7b7d93220ee6148c40fd831b90651d4e9dd /release
parenta045ad90557a1029b112023c9d6208e7807decd2 (diff)
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.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/startup/bl_operators/presets.py35
1 files changed, 27 insertions, 8 deletions
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 6297945f8bd..dceeae07500 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -93,6 +93,29 @@ class AddPresetBase():
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,14 +127,10 @@ class AddPresetBase():
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
-
- file_preset.write("%s = %r\n" % (rna_path, value))
+ rna_recursiev_attr_expand(value, rna_path, 1)
+
+
+
file_preset.close()