[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25457] trunk/blender/source/blender: sequencer copy clipboard wasnt checking if all related strips were selected

Campbell Barton ideasman42 at gmail.com
Fri Dec 18 00:29:11 CET 2009


Revision: 25457
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25457
Author:   campbellbarton
Date:     2009-12-18 00:29:11 +0100 (Fri, 18 Dec 2009)

Log Message:
-----------
sequencer copy clipboard wasnt checking if all related strips were selected

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2009-12-17 22:18:24 UTC (rev 25456)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2009-12-17 23:29:11 UTC (rev 25457)
@@ -186,6 +186,7 @@
 void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
 int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test);
 int shuffle_seq_time(ListBase * seqbasep);
+int seqbase_isolated_sel_check(struct ListBase *seqbase);
 void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
 
 void seq_update_sound(struct Sequence *seq);

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2009-12-17 22:18:24 UTC (rev 25456)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2009-12-17 23:29:11 UTC (rev 25457)
@@ -76,7 +76,7 @@
 //static int blender_test_break() {return 0;}
 
 /* **** XXX ******** */
-
+#define SELECT 1
 ListBase seqbase_clipboard;
 int seqbase_clipboard_frame;
 
@@ -3283,6 +3283,42 @@
 		return 0;
 }
 
+/* check if the selected seq's reference unselected seq's */
+int seqbase_isolated_sel_check(ListBase *seqbase)
+{
+	Sequence *seq;
+	/* is there more than 1 select */
+	int ok= FALSE;
+
+	for(seq= seqbase->first; seq; seq= seq->next) {
+		if(seq->flag & SELECT) {
+			ok= TRUE;
+			break;
+		}
+	}
+
+	if(ok == FALSE)
+		return FALSE;
+
+	/* test relationships */
+	for(seq= seqbase->first; seq; seq= seq->next) {
+		if(seq->flag & SELECT) {
+			if(seq->type & SEQ_EFFECT) {
+				if(seq->seq1 && (seq->seq1->flag & SELECT)==0) return FALSE;
+				if(seq->seq2 && (seq->seq2->flag & SELECT)==0) return FALSE;
+				if(seq->seq3 && (seq->seq3->flag & SELECT)==0) return FALSE;
+			}
+		}
+		else if(seq->type & SEQ_EFFECT) {
+			if(seq->seq1 && (seq->seq1->flag & SELECT)) return FALSE;
+			if(seq->seq2 && (seq->seq2->flag & SELECT)) return FALSE;
+			if(seq->seq3 && (seq->seq3->flag & SELECT)) return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
 /* use to impose limits when dragging/extending - so impossible situations dont happen
  * Cant use the SEQ_LEFTSEL and SEQ_LEFTSEL directly because the strip may be in a metastrip */
 void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag)
@@ -3636,7 +3672,7 @@
 		}
 
 		if(seq_load->flag & SEQ_LOAD_REPLACE_SEL) {
-			seq_load->flag |= 1; /* SELECT */
+			seq_load->flag |= SELECT;
 			active_seq_set(scene, seq);
 		}
 
@@ -3662,7 +3698,7 @@
 	*( (short *)seq->name )= ID_SEQ;
 	seq->name[2]= 0;
 
-	seq->flag= 1; /* SELECT */
+	seq->flag= SELECT;
 	seq->start= cfra;
 	seq->machine= machine;
 	seq->mul= 1.0;

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-17 22:18:24 UTC (rev 25456)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-17 23:29:11 UTC (rev 25457)
@@ -2105,52 +2105,14 @@
 	if(ed==NULL)
 		return OPERATOR_CANCELLED;
 
-	/* is there more than 1 select */
-	tot= 0;
-	seq= ed->seqbasep->first;
-	while(seq) {
-		if(seq->flag & SELECT) {
-			tot++;
-		}
-		seq= seq->next;
-	}
-	if(tot < 1) return OPERATOR_CANCELLED;;
-
-
-	/* test relationships */
-	seq= ed->seqbasep->first;
-	while(seq) {
-		if(seq->flag & SELECT) {
-			channel_max= MAX2(seq->machine, channel_max);
-			if(seq->type & SEQ_EFFECT) {
-				if(seq->seq1 &&
-				   (seq->seq1->flag & SELECT)==0) tot= 0;
-				if(seq->seq2 &&
-				   (seq->seq2->flag & SELECT)==0) tot= 0;
-				if(seq->seq3 &&
-				   (seq->seq3->flag & SELECT)==0) tot= 0;
-			}
-		}
-		else if(seq->type & SEQ_EFFECT) {
-			if(seq->seq1 &&
-			   (seq->seq1->flag & SELECT)) tot= 0;
-			if(seq->seq2 &&
-			   (seq->seq2->flag & SELECT)) tot= 0;
-			if(seq->seq3 &&
-			   (seq->seq3->flag & SELECT)) tot= 0;
-		}
-		if(tot==0) break;
-		seq= seq->next;
-	}
-
-	if(tot==0) {
+	if(seqbase_isolated_sel_check(ed->seqbasep)==FALSE) {
 		BKE_report(op->reports, RPT_ERROR, "Please select all related strips");
 		return OPERATOR_CANCELLED;
 	}
 
 	/* remove all selected from main list, and put in meta */
 
-	seqm= alloc_sequence(ed->seqbasep, 1, channel_max);
+	seqm= alloc_sequence(ed->seqbasep, 1, 1); /* channel number set later */
 	strcpy(seqm->name+2, "MetaStrip");
 	seqm->type= SEQ_META;
 	seqm->flag= SELECT;
@@ -2159,11 +2121,13 @@
 	while(seq) {
 		next= seq->next;
 		if(seq!=seqm && (seq->flag & SELECT)) {
+			channel_max= MAX2(seq->machine, channel_max);
 			BLI_remlink(ed->seqbasep, seq);
 			BLI_addtail(&seqm->seqbase, seq);
 		}
 		seq= next;
 	}
+	seqm->machine= channel_max;
 	calc_sequence(seqm);
 
 	seqm->strip= MEM_callocN(sizeof(Strip), "metastrip");
@@ -2758,9 +2722,10 @@
 			seq_del_sound(scene, iseq);
 		}
 	}
-	else if(seq->sound_handle)
+	else if(seq->sound_handle) {
 		sound_delete_handle(scene, seq->sound_handle);
-
+		seq->sound_handle= NULL;
+	}
 }
 
 /* TODO, validate scenes */
@@ -2775,6 +2740,11 @@
 
 	seq_free_clipboard();
 
+	if(seqbase_isolated_sel_check(ed->seqbasep)==FALSE) {
+		BKE_report(op->reports, RPT_ERROR, "Please select all related strips");
+		return OPERATOR_CANCELLED;
+	}
+
 	recurs_dupli_seq(scene, ed->seqbasep, &seqbase_clipboard, FALSE);
 	seqbase_clipboard_frame= scene->r.cfra;
 





More information about the Bf-blender-cvs mailing list