Revision: 18609
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18609
Author:   campbellbarton
Date:     2009-01-21 19:47:09 +0100 (Wed, 21 Jan 2009)

Log Message:
-----------
sequencer operators duplicate, delete, separate images.

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
 2009-01-21 18:44:36 UTC (rev 18608)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
 2009-01-21 18:47:09 UTC (rev 18609)
@@ -67,6 +67,7 @@
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
+#include "BIF_transform.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -979,61 +980,6 @@
        }
 }
 
-void del_seq(Scene *scene)
-{
-       Sequence *seq;
-       MetaStack *ms;
-       Editing *ed;
-       int nothingSelected = TRUE;
-
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       seq=get_last_seq(scene);
-       if (seq && seq->flag & SELECT) { /* avoid a loop since this is likely 
to be selected */
-               nothingSelected = FALSE;
-       } else {
-               for (seq = ed->seqbasep->first; seq; seq = seq->next) {
-                       if (seq->flag & SELECT) {
-                               nothingSelected = FALSE;
-                               break;
-                       }
-               }
-       }
-       
-       if(nothingSelected || okee("Erase selected")==0) return;
-
-       /* free imbufs of all dependent strips */
-       for(seq=ed->seqbasep->first; seq; seq=seq->next)
-               if(seq->flag & SELECT)
-                       update_changed_seq_and_deps(scene, seq, 1, 0);
-
-       /* for effects, try to find a replacement input */
-       for(seq=ed->seqbasep->first; seq; seq=seq->next)
-               if((seq->type & SEQ_EFFECT) && !(seq->flag & SELECT))
-                       del_seq_find_replace_recurs(scene, seq);
-
-       /* delete all selected strips */
-       recurs_del_seq_flag(scene, ed->seqbasep, SELECT, 0);
-
-       /* updates lengths etc */
-       seq= ed->seqbasep->first;
-       while(seq) {
-               calc_sequence(seq);
-               seq= seq->next;
-       }
-
-       /* free parent metas */
-       ms= ed->metastack.last;
-       while(ms) {
-               ms->parseq->strip->len= 0;              /* force new alloc */
-               calc_sequence(ms->parseq);
-               ms= ms->prev;
-       }
-
-       BIF_undo_push("Delete Strip(s), Sequencer");
-}
-
 static Sequence *dupli_seq(Sequence *seq) 
 {
        Sequence *seqn = MEM_dupallocN(seq);
@@ -1368,23 +1314,6 @@
        return did_something;
 }
 
-void add_duplicate_seq(Scene *scene)
-{
-       Editing *ed;
-       ListBase new;
-
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       new.first= new.last= 0;
-
-       recurs_dupli_seq(scene, ed->seqbasep, &new);
-       addlisttolist(ed->seqbasep, &new);
-
-       BIF_undo_push("Add Duplicate, Sequencer");
-       transform_seq_nomarker('g', 0);
-}
-
 int insert_gap(Scene *scene, int gap, int cfra)
 {
        Sequence *seq;
@@ -2355,75 +2284,6 @@
        sseq->flag = flag_back;
 }
 
-void seq_separate_images(Scene *scene)
-{
-       Editing *ed;
-       Sequence *seq, *seq_new, *seq_next;
-       Strip *strip_new;
-       StripElem *se, *se_new;
-       int start_ofs, cfra, frame_end; 
-       static int step= 1;
-       
-//     add_numbut(0, NUM|INT, "Image Duration:", 1, 256, &step, NULL);
-//     if (!do_clever_numbuts("Separate Images", 1, REDRAW))
-//             return;
-       
-       ed= scene->ed;
-       if(ed==NULL) return;
-       
-       seq= ed->seqbasep->first;
-       
-       while (seq) {
-               if((seq->flag & SELECT) && (seq->type == SEQ_IMAGE) && 
(seq->len > 1)) {
-                       /* remove seq so overlap tests dont conflict,
-                       see seq_free_sequence below for the real free'ing */
-                       seq_next = seq->next;
-                       BLI_remlink(ed->seqbasep, seq); 
-                       if(seq->ipo) seq->ipo->id.us--;
-                       
-                       start_ofs = cfra = seq_tx_get_final_left(seq, 0);
-                       frame_end = seq_tx_get_final_right(seq, 0);
-                       
-                       while (cfra < frame_end) {
-                               /* new seq */
-                               se = give_stripelem(seq, cfra);
-                               
-                               seq_new= alloc_sequence(((Editing 
*)scene->ed)->seqbasep, start_ofs, seq->machine);
-                               seq_new->type= SEQ_IMAGE;
-                               seq_new->len = 1;
-                               seq_new->endstill = step-1;
-                               
-                               /* new strip */
-                               seq_new->strip= strip_new= 
MEM_callocN(sizeof(Strip)*1, "strip");
-                               strip_new->len= 1;
-                               strip_new->us= 1;
-                               strncpy(strip_new->dir, seq->strip->dir, 
FILE_MAXDIR-1);
-                               
-                               /* new stripdata */
-                               strip_new->stripdata= se_new= 
MEM_callocN(sizeof(StripElem)*1, "stripelem");
-                               strncpy(se_new->name, se->name, FILE_MAXFILE-1);
-                               calc_sequence(seq_new);
-                               seq_new->flag &= ~SEQ_OVERLAP;
-                               if (test_overlap_seq(scene, seq_new)) {
-                                       shuffle_seq(scene, seq_new);
-                               }
-                               
-                               cfra++;
-                               start_ofs += step;
-                       }
-                       
-                       seq_free_sequence(seq);
-                       seq = seq->next;
-               } else {
-                       seq = seq->next;
-               }
-       }
-       
-       /* as last: */
-       sort_seq(scene);
-       BIF_undo_push("Separate Image Strips, Sequencer");
-}
-
 void seq_snap(Scene *scene, short event)
 {
        Editing *ed;
@@ -2718,3 +2578,210 @@
        RNA_def_enum(ot->srna, "side", prop_cut_side_types, SEQ_LEFT, "Side", 
"The side that remains selected after cutting");
 }
 
+/* duplicate operator */
+static int sequencer_add_duplicate_exec(bContext *C, wmOperator *op)
+{
+       Scene *scene= CTX_data_scene(C);
+       Editing *ed= scene->ed;
+
+       ListBase new;
+
+       new.first= new.last= 0;
+
+       recurs_dupli_seq(scene, ed->seqbasep, &new);
+       addlisttolist(ed->seqbasep, &new);
+
+       ED_undo_push(C, "Cut Strips, Sequencer");
+       ED_area_tag_redraw(CTX_wm_area(C));
+
+       return OPERATOR_FINISHED;
+}
+
+static int sequencer_add_duplicate_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       sequencer_add_duplicate_exec(C, op);
+
+       RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
+       WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, 
op->ptr);
+
+       return OPERATOR_FINISHED;
+}
+
+void SEQUENCER_OT_add_duplicate(wmOperatorType *ot)
+{
+
+       /* identifiers */
+       ot->name= "Add Duplicate";
+       ot->idname= "SEQUENCER_OT_add_duplicate";
+
+       /* api callbacks */
+       ot->invoke= sequencer_add_duplicate_invoke;
+       ot->exec= sequencer_add_duplicate_exec;
+
+       ot->poll= ED_operator_sequencer_active;
+
+       /* to give to transform */
+       RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 
0, INT_MAX);
+}
+
+/* delete operator */
+static int sequencer_delete_exec(bContext *C, wmOperator *op)
+{
+       Scene *scene= CTX_data_scene(C);
+       Editing *ed= scene->ed;
+       Sequence *seq;
+       MetaStack *ms;
+       int nothingSelected = TRUE;
+
+
+       seq=get_last_seq(scene);
+       if (seq && seq->flag & SELECT) { /* avoid a loop since this is likely 
to be selected */
+               nothingSelected = FALSE;
+       } else {
+               for (seq = ed->seqbasep->first; seq; seq = seq->next) {
+                       if (seq->flag & SELECT) {
+                               nothingSelected = FALSE;
+                               break;
+                       }
+               }
+       }
+
+       if (nothingSelected)
+               return OPERATOR_FINISHED;
+
+       /* free imbufs of all dependent strips */
+       for(seq=ed->seqbasep->first; seq; seq=seq->next)
+               if(seq->flag & SELECT)
+                       update_changed_seq_and_deps(scene, seq, 1, 0);
+
+       /* for effects, try to find a replacement input */
+       for(seq=ed->seqbasep->first; seq; seq=seq->next)
+               if((seq->type & SEQ_EFFECT) && !(seq->flag & SELECT))
+                       del_seq_find_replace_recurs(scene, seq);
+
+       /* delete all selected strips */
+       recurs_del_seq_flag(scene, ed->seqbasep, SELECT, 0);
+
+       /* updates lengths etc */
+       seq= ed->seqbasep->first;
+       while(seq) {
+               calc_sequence(seq);
+               seq= seq->next;
+       }
+
+       /* free parent metas */
+       ms= ed->metastack.last;
+       while(ms) {
+               ms->parseq->strip->len= 0;              /* force new alloc */
+               calc_sequence(ms->parseq);
+               ms= ms->prev;
+       }
+
+       ED_undo_push(C, "Delete Strip(s), Sequencer");
+       ED_area_tag_redraw(CTX_wm_area(C));
+       
+       return OPERATOR_FINISHED;
+}
+
+
+void SEQUENCER_OT_delete(wmOperatorType *ot)
+{
+
+       /* identifiers */
+       ot->name= "Erase Strips";
+       ot->idname= "SEQUENCER_OT_delete";
+
+       /* api callbacks */
+       ot->invoke= WM_operator_confirm;
+       ot->exec= sequencer_delete_exec;
+
+       ot->poll= ED_operator_sequencer_active;
+}
+
+
+/* separate_images operator */
+static int sequencer_separate_images_exec(bContext *C, wmOperator *op)
+{
+       Scene *scene= CTX_data_scene(C);
+       Editing *ed= scene->ed;
+       
+       Sequence *seq, *seq_new, *seq_next;
+       Strip *strip_new;
+       StripElem *se, *se_new;
+       int start_ofs, cfra, frame_end;
+       static int step= 1;
+
+//     add_numbut(0, NUM|INT, "Image Duration:", 1, 256, &step, NULL);
+//     if (!do_clever_numbuts("Separate Images", 1, REDRAW))
+//             return;
+
+       seq= ed->seqbasep->first;
+
+       while (seq) {
+               if((seq->flag & SELECT) && (seq->type == SEQ_IMAGE) && 
(seq->len > 1)) {
+                       /* remove seq so overlap tests dont conflict,
+                       see seq_free_sequence below for the real free'ing */
+                       seq_next = seq->next;
+                       BLI_remlink(ed->seqbasep, seq);
+                       if(seq->ipo) seq->ipo->id.us--;
+
+                       start_ofs = cfra = seq_tx_get_final_left(seq, 0);
+                       frame_end = seq_tx_get_final_right(seq, 0);
+
+                       while (cfra < frame_end) {
+                               /* new seq */
+                               se = give_stripelem(seq, cfra);
+
+                               seq_new= alloc_sequence(((Editing 
*)scene->ed)->seqbasep, start_ofs, seq->machine);
+                               seq_new->type= SEQ_IMAGE;
+                               seq_new->len = 1;
+                               seq_new->endstill = step-1;
+
+                               /* new strip */
+                               seq_new->strip= strip_new= 
MEM_callocN(sizeof(Strip)*1, "strip");
+                               strip_new->len= 1;
+                               strip_new->us= 1;
+                               strncpy(strip_new->dir, seq->strip->dir, 
FILE_MAXDIR-1);
+
+                               /* new stripdata */
+                               strip_new->stripdata= se_new= 
MEM_callocN(sizeof(StripElem)*1, "stripelem");
+                               strncpy(se_new->name, se->name, FILE_MAXFILE-1);
+                               calc_sequence(seq_new);
+                               seq_new->flag &= ~SEQ_OVERLAP;
+                               if (test_overlap_seq(scene, seq_new)) {
+                                       shuffle_seq(scene, seq_new);
+                               }
+
+                               cfra++;
+                               start_ofs += step;
+                       }
+
+                       seq_free_sequence(seq);
+                       seq = seq->next;
+               } else {
+                       seq = seq->next;
+               }
+       }
+
+       /* as last: */
+       sort_seq(scene);
+       
+       ED_undo_push(C, "Separate Image Strips, Sequencer");
+       ED_area_tag_redraw(CTX_wm_area(C));
+
+       return OPERATOR_FINISHED;
+}
+
+
+void SEQUENCER_OT_separate_images(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Separate Images";
+       ot->idname= "SEQUENCER_OT_separate_images";
+
+       /* api callbacks */
+       ot->invoke= WM_operator_confirm;
+       ot->exec= sequencer_separate_images_exec;
+
+       ot->poll= ED_operator_sequencer_active;
+}

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
       2009-01-21 18:44:36 UTC (rev 18608)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
       2009-01-21 18:47:09 UTC (rev 18609)
@@ -651,8 +651,9 @@
                }
        } else {
                /* ZOOM and BORDER */
+               static int viewmovetemp; // XXX dummy var
+               
                uiBlockBeginAlign(block);
-               static int viewmovetemp; // XXX dummy var
                uiDefIconButI(block, TOG, B_VIEW2DZOOM,
                              ICON_VIEWZOOM,
                              xco,0,XIC,YIC, &viewmovetemp,

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_intern.h
===================================================================

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to