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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-09 19:00:53 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-09 19:00:53 +0300
commit2cc8ef127e1a626f4517c8a0ee9f555fb8b66758 (patch)
treecce0351b19db2cc7f32c972ad7bc5bbe27f583b3 /source
parentdaf043b3fea6e8c8c3430d0055a8e3a721a0770a (diff)
added collection sequences_all so strips within meta's can be animated
Diffstat (limited to 'source')
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h4
-rw-r--r--source/blender/makesrna/intern/rna_sequence.c53
2 files changed, 54 insertions, 3 deletions
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index 3b8182b8759..6adaf936ed4 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -183,8 +183,8 @@ typedef struct MetaStack {
} MetaStack;
typedef struct Editing {
- ListBase *seqbasep;
- ListBase seqbase;
+ ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */
+ ListBase seqbase; /* pointer to the top-most seq's */
ListBase metastack;
/* Context vars, used to be static */
diff --git a/source/blender/makesrna/intern/rna_sequence.c b/source/blender/makesrna/intern/rna_sequence.c
index 68bfea7161d..6f9cbd608e3 100644
--- a/source/blender/makesrna/intern/rna_sequence.c
+++ b/source/blender/makesrna/intern/rna_sequence.c
@@ -43,6 +43,51 @@
#ifdef RNA_RUNTIME
+/* build a temp referene to the parent */
+static int meta_tmp_ref(Sequence *seq_par, Sequence *seq)
+{
+ for (; seq; seq= seq->next) {
+ seq->tmp= seq_par;
+ if(seq->type == SEQ_META) {
+ meta_tmp_ref(seq, seq->seqbase.first);
+ }
+ }
+}
+
+static void rna_SequenceEditor_sequences_all_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ Scene *sce= (Scene*)ptr->id.data;
+ Editing *ed= seq_give_editing(sce, FALSE);
+
+ meta_tmp_ref(NULL, ed->seqbase.first);
+
+ rna_iterator_listbase_begin(iter, &ed->seqbase, NULL);
+}
+
+static void rna_SequenceEditor_sequences_all_next(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal= iter->internal;
+ Sequence *seq= (Sequence*)internal->link;
+
+ if(seq->seqbase.first)
+ internal->link= (Link*)seq->seqbase.first;
+ else if(seq->next)
+ internal->link= (Link*)seq->next;
+ else {
+ internal->link= NULL;
+
+ do {
+ seq= seq->tmp; // XXX - seq's dont reference their parents!
+ if(seq && seq->next) {
+ internal->link= (Link*)seq->next;
+ break;
+ }
+ } while(seq);
+ }
+
+ iter->valid= (internal->link != NULL);
+}
+
static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
{
Sequence *seq= (Sequence*)ptr->data;
@@ -222,7 +267,7 @@ static char *rna_Sequence_path(PointerRNA *ptr)
* TODO: would be nice to make SequenceEditor data a datablock of its own (for shorter paths)
*/
if (seq->name+2)
- return BLI_sprintfN("sequence_editor.sequences[\"%s\"]", seq->name+2);
+ return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", seq->name+2);
else
return BLI_strdup("");
}
@@ -613,6 +658,12 @@ static void rna_def_editor(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Sequence");
RNA_def_property_ui_text(prop, "Sequences", "");
+ prop= RNA_def_property(srna, "sequences_all", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
+ RNA_def_property_struct_type(prop, "Sequence");
+ RNA_def_property_ui_text(prop, "Sequences", "");
+ RNA_def_property_collection_funcs(prop, "rna_SequenceEditor_sequences_all_begin", "rna_SequenceEditor_sequences_all_next", 0, 0, 0, 0, 0);
+
prop= RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "metastack", NULL);
RNA_def_property_struct_type(prop, "Sequence");