[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24190] trunk/blender/source/blender/ editors/space_sequencer: 2.5 Sequencer

Andrea Weikert elubie at gmx.net
Fri Oct 30 21:40:42 CET 2009


Revision: 24190
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24190
Author:   elubie
Date:     2009-10-30 21:40:41 +0100 (Fri, 30 Oct 2009)

Log Message:
-----------
2.5 Sequencer 
Swap active sequence with the sequence on the right (CTRL+R) or left (CTRL+L).
was small Durian wish.

Note: in find_next_prev removed the code to find selected only if sel was != 0
I believe it should be possible to pass -1 in the case I want to find the next strip
regardless of selection state.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-10-30 20:20:48 UTC (rev 24189)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-10-30 20:40:41 UTC (rev 24190)
@@ -298,8 +298,6 @@
 	
 	if(ed==NULL) return NULL;
 
-	if (sel) sel = SELECT;
-	
 	seq= ed->seqbasep->first;
 	while(seq) {
 		if(		(seq!=test) &&
@@ -2560,4 +2558,114 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
 	/* properties */
+}
+
+static void swap_sequence(Sequence* seqa, Sequence* seqb)
+{
+	int gap = seqb->startdisp - seqa->enddisp;
+	seqb->start = seqa->start;
+	calc_sequence(seqb);
+	seqa->start = seqb->enddisp + gap;
+	calc_sequence(seqa);
+}
+
+static Sequence* sequence_find_parent(Scene* scene, Sequence* child)
+{
+	Editing *ed= seq_give_editing(scene, FALSE);
+	Sequence *parent= NULL;
+	Sequence *seq;
+
+	if(ed==NULL) return NULL;
+
+	for(seq= ed->seqbasep->first; seq; seq= seq->next) {
+		if ( (seq != child) && seq_is_parent(seq, child) ) {
+			parent = seq;
+			break;
+		}
+	}
+	return parent;
+
+}
+
+static int sequencer_swap_internal_exec(bContext *C, int side)
+{
+	Scene *scene= CTX_data_scene(C);
+	Editing *ed= seq_give_editing(scene, FALSE);
+	Sequence *active_seq = get_last_seq(scene);
+	Sequence *seq;
+
+	if(ed==NULL) return OPERATOR_CANCELLED;
+	if(active_seq==NULL) return OPERATOR_CANCELLED;
+
+	seq = find_next_prev_sequence(scene, active_seq, side, -1);
+	
+	if(seq) {
+		
+		/* disallow effect strips */
+		if (seq->effectdata || seq->seq1 || seq->seq2 || seq->seq3)
+			return OPERATOR_CANCELLED;
+		if (active_seq->effectdata || active_seq->seq1 || active_seq->seq2 || active_seq->seq3)
+			return OPERATOR_CANCELLED;
+
+		/* disallow if parent strip (effect strip) is attached */
+		if ( sequence_find_parent(scene, active_seq)) {
+			return OPERATOR_CANCELLED;
+		}
+
+		switch (side) {
+			case SEQ_SIDE_LEFT: 
+				swap_sequence(seq, active_seq);
+				break;
+			case SEQ_SIDE_RIGHT: 
+				swap_sequence(active_seq, seq);
+				break;
+		}
+		ED_area_tag_redraw(CTX_wm_area(C));
+	}
+
+	return OPERATOR_FINISHED;
+}
+
+static int sequencer_swap_right_exec(bContext *C, wmOperator *op)
+{
+	return sequencer_swap_internal_exec(C, SEQ_SIDE_RIGHT);
+}
+
+void SEQUENCER_OT_swap_right(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Swap Strip Right";
+	ot->idname= "SEQUENCER_OT_swap_right";
+	ot->description="Swap active strip with strip to the right.";
+	
+	/* api callbacks */
+	ot->exec= sequencer_swap_right_exec;
+	ot->poll= ED_operator_sequencer_active;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+	
+	/* properties */
+}
+
+static int sequencer_swap_left_exec(bContext *C, wmOperator *op)
+{
+	return sequencer_swap_internal_exec(C, SEQ_SIDE_LEFT);
+}
+
+void SEQUENCER_OT_swap_left(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Swap Strip Left";
+	ot->idname= "SEQUENCER_OT_swap_left";
+	ot->description="Swap active strip with strip to the left.";
+	
+	/* api callbacks */
+	ot->exec= sequencer_swap_left_exec;
+	ot->poll= ED_operator_sequencer_active;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+	
+	/* properties */
 }
\ No newline at end of file

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2009-10-30 20:20:48 UTC (rev 24189)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2009-10-30 20:40:41 UTC (rev 24190)
@@ -93,6 +93,8 @@
 void SEQUENCER_OT_snap(struct wmOperatorType *ot);
 void SEQUENCER_OT_previous_edit(struct wmOperatorType *ot);
 void SEQUENCER_OT_next_edit(struct wmOperatorType *ot);
+void SEQUENCER_OT_swap_right(struct wmOperatorType *ot);
+void SEQUENCER_OT_swap_left(struct wmOperatorType *ot);
 
 void SEQUENCER_OT_view_all(struct wmOperatorType *ot);
 void SEQUENCER_OT_view_selected(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-10-30 20:20:48 UTC (rev 24189)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-10-30 20:40:41 UTC (rev 24190)
@@ -79,6 +79,8 @@
 	WM_operatortype_append(SEQUENCER_OT_snap);
 	WM_operatortype_append(SEQUENCER_OT_next_edit);
 	WM_operatortype_append(SEQUENCER_OT_previous_edit);
+	WM_operatortype_append(SEQUENCER_OT_swap_right);
+	WM_operatortype_append(SEQUENCER_OT_swap_left);
 
 	WM_operatortype_append(SEQUENCER_OT_view_all);
 	WM_operatortype_append(SEQUENCER_OT_view_selected);
@@ -147,6 +149,8 @@
 	WM_keymap_add_item(keymap, "SEQUENCER_OT_next_edit", PAGEUPKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "SEQUENCER_OT_previous_edit", PAGEDOWNKEY, KM_PRESS, 0, 0);
 
+	WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_right", RKEY, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_left", LKEY, KM_PRESS, KM_CTRL, 0);
 
 	/* Mouse selection, a bit verbose :/ */
 	WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);





More information about the Bf-blender-cvs mailing list