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-01-21 21:47:09 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-01-21 21:47:09 +0300
commitb9682a7ec8b197b69df83d6fdaa512ab7e0acf26 (patch)
tree77e7de4ac6f61700c8f57550fb20a0bce3edc518 /source
parentb4bef32bd9d43178454c678374c7eff2222e9d7b (diff)
sequencer operators duplicate, delete, separate images.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c349
-rw-r--r--source/blender/editors/space_sequencer/sequencer_header.c3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_intern.h4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_ops.c10
4 files changed, 224 insertions, 142 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 77fcebafdf4..23c2bac1fc6 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -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 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
}
}
-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 @@ static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe
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 @@ void _transform_seq_nomarker_(Scene *scene, SpaceSeq *sseq, View2D *v2d, int mod
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 @@ void SEQUENCER_OT_cut(struct wmOperatorType *ot)
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;
+}
diff --git a/source/blender/editors/space_sequencer/sequencer_header.c b/source/blender/editors/space_sequencer/sequencer_header.c
index fd5b4a53b5f..dff233e1b95 100644
--- a/source/blender/editors/space_sequencer/sequencer_header.c
+++ b/source/blender/editors/space_sequencer/sequencer_header.c
@@ -651,8 +651,9 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar)
}
} else {
/* ZOOM and BORDER */
- uiBlockBeginAlign(block);
static int viewmovetemp; // XXX dummy var
+
+ uiBlockBeginAlign(block);
uiDefIconButI(block, TOG, B_VIEW2DZOOM,
ICON_VIEWZOOM,
xco,0,XIC,YIC, &viewmovetemp,
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 3c082bf774b..199ae016f50 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -69,6 +69,10 @@ struct wmWindowManager;
void SEQUENCER_OT_cut(struct wmOperatorType *ot);
void SEQUENCER_OT_mute(struct wmOperatorType *ot);
void SEQUENCER_OT_unmute(struct wmOperatorType *ot);
+void SEQUENCER_OT_add_duplicate(struct wmOperatorType *ot);
+void SEQUENCER_OT_delete(struct wmOperatorType *ot);
+void SEQUENCER_OT_separate_images(struct wmOperatorType *ot);
+
/* sequencer_select.c */
void SEQUENCER_OT_deselect_all(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index b31b4a44bde..4f3794ca3cf 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -66,6 +66,9 @@ void sequencer_operatortypes(void)
WM_operatortype_append(SEQUENCER_OT_cut);
WM_operatortype_append(SEQUENCER_OT_mute);
WM_operatortype_append(SEQUENCER_OT_unmute);
+ WM_operatortype_append(SEQUENCER_OT_add_duplicate);
+ WM_operatortype_append(SEQUENCER_OT_delete);
+ WM_operatortype_append(SEQUENCER_OT_separate_images);
/* sequencer_select.c */
WM_operatortype_append(SEQUENCER_OT_deselect_all);
@@ -103,6 +106,13 @@ void sequencer_keymap(wmWindowManager *wm)
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT, 0)->ptr, "type", SEQ_SELECTED);
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "type", SEQ_UNSELECTED);
+
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_add_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
+
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0);
+
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_separate_images", YKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1);