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.
This commit is contained in:
parent
a045ad9055
commit
564a6c2353
@ -93,6 +93,29 @@ class AddPresetBase():
|
|||||||
filepath,
|
filepath,
|
||||||
preset_menu_class.preset_xml_map)
|
preset_menu_class.preset_xml_map)
|
||||||
else:
|
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 = open(filepath, 'w')
|
||||||
file_preset.write("import bpy\n")
|
file_preset.write("import bpy\n")
|
||||||
|
|
||||||
@ -104,14 +127,10 @@ class AddPresetBase():
|
|||||||
|
|
||||||
for rna_path in self.preset_values:
|
for rna_path in self.preset_values:
|
||||||
value = eval(rna_path)
|
value = eval(rna_path)
|
||||||
# convert thin wrapped sequences
|
rna_recursiev_attr_expand(value, rna_path, 1)
|
||||||
# to simple lists to repr()
|
|
||||||
try:
|
|
||||||
value = value[:]
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
file_preset.write("%s = %r\n" % (rna_path, value))
|
|
||||||
|
|
||||||
file_preset.close()
|
file_preset.close()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user