fix for duplicating metastrips, unique names and animation data.

This commit is contained in:
2010-07-07 16:37:41 +00:00
parent 9ab34c36ed
commit 6debe0fcf6
2 changed files with 15 additions and 11 deletions

View File

@@ -3881,7 +3881,6 @@ void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs)
void seq_dupe_animdata(Scene *scene, char *name_from, char *name_to)
{
char str_from[32];
char str_to[32];
FCurve *fcu;
FCurve *fcu_last;
FCurve *fcu_cpy;
@@ -3891,7 +3890,6 @@ void seq_dupe_animdata(Scene *scene, char *name_from, char *name_to)
return;
sprintf(str_from, "[\"%s\"]", name_from);
sprintf(str_to, "[\"%s\"]", name_to);
fcu_last= scene->adt->action->curves.last;
@@ -4265,10 +4263,8 @@ static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
" now...\n");
}
if(dupe_flag & SEQ_DUPE_UNIQUE_NAME) {
if(dupe_flag & SEQ_DUPE_UNIQUE_NAME)
seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
printf("%s %s\n", seqn->name+2, seq->name+2);
}
if(dupe_flag & SEQ_DUPE_ANIM)
seq_dupe_animdata(scene, seq->name+2, seqn->name+2);

View File

@@ -1588,6 +1588,18 @@ void SEQUENCER_OT_cut(struct wmOperatorType *ot)
}
/* duplicate operator */
static int apply_unique_name_cb(Sequence *seq, void *arg_pt)
{
Scene *scene= (Scene *)arg_pt;
char name[sizeof(seq->name)-2];
strcpy(name, seq->name+2);
seqbase_unique_name_recursive(&scene->ed->seqbase, seq);
seq_dupe_animdata(scene, name, seq->name+2);
return 1;
}
static int sequencer_add_duplicate_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
@@ -1605,12 +1617,8 @@ static int sequencer_add_duplicate_exec(bContext *C, wmOperator *op)
/* rely on the nseqbase list being added at the end */
addlisttolist(ed->seqbasep, &nseqbase);
for( ; seq; seq= seq->next) {
char name[sizeof(seq->name)-2];
strcpy(name, seq->name+2);
seqbase_unique_name_recursive(&ed->seqbase, seq);
seq_dupe_animdata(scene, name, seq->name+2);
}
for( ; seq; seq= seq->next)
seq_recursive_apply(seq, apply_unique_name_cb, scene);
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
return OPERATOR_FINISHED;