IDGroup utility function to copy a group inside another one

This commit is contained in:
2010-01-05 03:29:41 +00:00
parent 8f3db6bb24
commit 22c32973e7
2 changed files with 30 additions and 0 deletions

View File

@@ -82,6 +82,11 @@ void IDP_UnlinkID(struct IDProperty *prop);
/*-------- Group Functions -------*/
/*
replaces all properties with the same name in a destination group from a source group.
*/
void IDP_ReplaceGroupInGroup(struct IDProperty *dest, struct IDProperty *src);
/*checks if a property with the same name as prop exists, and if so replaces it.
Use this to preserve order!*/
void IDP_ReplaceInGroup(struct IDProperty *group, struct IDProperty *prop);

View File

@@ -385,6 +385,31 @@ IDProperty *IDP_CopyGroup(IDProperty *prop)
return newp;
}
/*
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.