diff options
author | Martin Poirier <theeth@yahoo.com> | 2010-01-05 06:29:41 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2010-01-05 06:29:41 +0300 |
commit | 22c32973e73363b7179303d601f59bd5c4d17d45 (patch) | |
tree | ed0b7967621c8df9d8a8f63ee11094c835fe2d11 /source/blender/blenkernel/intern/idprop.c | |
parent | 8f3db6bb241fbc7f01e0ce9f036007f77bf1b5e3 (diff) |
IDGroup utility function to copy a group inside another one
Diffstat (limited to 'source/blender/blenkernel/intern/idprop.c')
-rw-r--r-- | source/blender/blenkernel/intern/idprop.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c index 7e081982f24..ddfb28437a9 100644 --- a/source/blender/blenkernel/intern/idprop.c +++ b/source/blender/blenkernel/intern/idprop.c @@ -386,6 +386,31 @@ IDProperty *IDP_CopyGroup(IDProperty *prop) } /* + replaces all properties with the same name in a destination group from a source group. +*/ +void IDP_ReplaceGroupInGroup(IDProperty *dest, IDProperty *src) +{ + IDProperty *loop, *prop; + for (prop=src->data.group.first; prop; prop=prop->next) { + IDProperty *copy = IDP_CopyProperty(prop); + + for (loop=dest->data.group.first; loop; loop=loop->next) { + if (BSTR_EQ(loop->name, prop->name)) { + if (loop->next) BLI_insertlinkbefore(&dest->data.group, loop->next, copy); + else BLI_addtail(&dest->data.group, copy); + + BLI_remlink(&dest->data.group, loop); + IDP_FreeProperty(loop); + MEM_freeN(loop); + break; + } + } + + dest->len++; + BLI_addtail(&dest->data.group, copy); + } +} +/* replaces a property with the same name in a group, or adds it if the propery doesn't exist. */ |