diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-01-26 12:13:15 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-01-26 12:13:15 +0300 |
commit | bf05827319f07d7a7b34ff34d0556cb54f6284d9 (patch) | |
tree | 316ef06abbd79f761dfb467937c1392132d053d8 | |
parent | 87627374000b7de7445736a7239a3f2b168ce7eb (diff) |
* Added WM_operator_filesel which can be used for an operators invoke function (like WM_operator_confirm).
It opens the files selector if "filename" property has not been set, else it executes the operator directly. Brecht, you might want to check, currently only sequencer add operators use it.
* Added back Effects menu back, replaced SEQUENCER_OT_add_color_strip with SEQUENCER_OT_add_effect_strip.
* Made sequencer header use operator UI functions.
* gcc complains when char's are used as array indicies when they are not explicitly signed/unsigned, corrected previous change for vpaint to silence this error.
9 files changed, 416 insertions, 568 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 7e7076d56d8..cff145c5046 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -93,29 +93,38 @@ #include "sequencer_intern.h" /* Generic functions, reused by add strip operators */ -static void sequencer_generic_props__internal(wmOperatorType *ot, int do_filename, int do_endframe) + +/* avoid passing multiple args and be more verbose */ +#define SEQPROP_STARTFRAME 1<<0 +#define SEQPROP_ENDFRAME 1<<1 +#define SEQPROP_FILENAME 1<<2 + +static void sequencer_generic_props__internal(wmOperatorType *ot, int flag) { RNA_def_string(ot->srna, "name", "", MAX_ID_NAME-2, "Name", "Name of the new sequence strip"); - RNA_def_int(ot->srna, "start_frame", 0, INT_MIN, INT_MAX, "Start Frame", "Start frame of the sequence strip", INT_MIN, INT_MAX); + + if(flag & SEQPROP_STARTFRAME) + RNA_def_int(ot->srna, "start_frame", 0, INT_MIN, INT_MAX, "Start Frame", "Start frame of the sequence strip", INT_MIN, INT_MAX); - if (do_endframe) + if(flag & SEQPROP_ENDFRAME) RNA_def_int(ot->srna, "end_frame", 0, INT_MIN, INT_MAX, "End Frame", "End frame for the color strip", INT_MIN, INT_MAX); /* not useual since most strips have a fixed length */ RNA_def_int(ot->srna, "channel", 1, 1, MAXSEQ, "Channel", "Channel to place this strip into", 1, MAXSEQ); - if (do_filename) + if(flag & SEQPROP_FILENAME) RNA_def_string(ot->srna, "filename", "", FILE_MAX, "Scene Name", "full path to load the strip data from"); RNA_def_boolean(ot->srna, "replace_sel", 1, "Replace Selection", "replace the current selection"); } -static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, wmEvent *event, int do_endframe) +static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, wmEvent *event, int flag) { ARegion *ar= CTX_wm_region(C); View2D *v2d= UI_view2d_fromcontext(C); short mval[2]; float mval_v2d[2]; + mval[0]= event->x - ar->winrct.xmin; mval[1]= event->y - ar->winrct.ymin; @@ -124,107 +133,12 @@ static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, w RNA_int_set(op->ptr, "channel", (int)mval_v2d[1]+0.5f); RNA_int_set(op->ptr, "start_frame", (int)mval_v2d[0]); - if (do_endframe) - RNA_int_set(op->ptr, "end_frame", (int)mval_v2d[0] + 25); // XXX arbitary but ok for now. - -} - -static void sequencer_generic_filesel__internal(bContext *C, wmOperator *op, char *title, char *path) -{ - SpaceFile *sfile; - - ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_FILE); - - /* settings for filebrowser */ - sfile= (SpaceFile*)CTX_wm_space_data(C); - sfile->op = op; - ED_fileselect_set_params(sfile, FILE_BLENDER, title, path, 0, 0, 0); - - /* screen and area have been reset already in ED_screen_full_newspace */ -} - -/* add operators */ -static int sequencer_add_color_strip_exec(bContext *C, wmOperator *op) -{ - Scene *scene= CTX_data_scene(C); - Editing *ed= scene->ed; - - - Sequence *seq; /* generic strip vars */ - Strip *strip; - StripElem *se; - - SolidColorVars *colvars; /* type spesific vars */ - - int start_frame, end_frame, channel; /* operator props */ - - start_frame= RNA_int_get(op->ptr, "start_frame"); - end_frame= RNA_int_get(op->ptr, "end_frame"); - channel= RNA_int_get(op->ptr, "channel"); - - if (end_frame <= start_frame) /* XXX use error reporter for bad frame values? */ - end_frame= start_frame+1; - - seq = alloc_sequence(ed->seqbasep, start_frame, channel); /* warning, this sets last */ - - seq->effectdata = MEM_callocN(sizeof(struct SolidColorVars), "solidcolor"); - colvars= (SolidColorVars *)seq->effectdata; - - seq->type= SEQ_COLOR; - - /* basic defaults */ - seq->strip= strip= MEM_callocN(sizeof(Strip), "strip"); - strip->len = seq->len = 1; /* Color strips are different in that they can be any length */ - strip->us= 1; - - strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem"); - RNA_string_get(op->ptr, "name", seq->name); - RNA_float_get_array(op->ptr, "color", colvars->col); - - seq_tx_set_final_right(seq, end_frame); - - calc_sequence_disp(seq); - sort_seq(scene); - - if (RNA_boolean_get(op->ptr, "replace_sel")) { - deselect_all_seq(scene); - set_last_seq(scene, seq); - seq->flag |= SELECT; - } - ED_undo_push(C, "Add Color Strip, Sequencer"); - ED_area_tag_redraw(CTX_wm_area(C)); + if ((flag & SEQPROP_ENDFRAME) && RNA_property_is_set(op->ptr, "end_frame")==0) + RNA_int_set(op->ptr, "end_frame", (int)mval_v2d[0] + 25); // XXX arbitary but ok for now. - return OPERATOR_FINISHED; -} - - -/* add color */ -static int sequencer_add_color_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - sequencer_generic_invoke_xy__internal(C, op, event, 1); - return sequencer_add_color_strip_exec(C, op); } - -void SEQUENCER_OT_add_color_strip(struct wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Add Color Strip"; - ot->idname= "SEQUENCER_OT_add_color_strip"; - - /* api callbacks */ - ot->invoke= sequencer_add_color_strip_invoke; - ot->exec= sequencer_add_color_strip_exec; - - ot->poll= ED_operator_sequencer_active; - ot->flag= OPTYPE_REGISTER; - - sequencer_generic_props__internal(ot, 0, 1); - RNA_def_float_vector(ot->srna, "color", 3, NULL, 0.0f, 1.0f, "Color", "Initialize the strip with this color", 0.0f, 1.0f); -} - - /* add scene operator */ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) { @@ -252,7 +166,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - seq = alloc_sequence(ed->seqbasep, start_frame, channel); /* warning, this sets last */ + seq = alloc_sequence(ed->seqbasep, start_frame, channel); seq->type= SEQ_SCENE; seq->scene= sce_seq; @@ -308,7 +222,7 @@ void SEQUENCER_OT_add_scene_strip(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - sequencer_generic_props__internal(ot, 0, 0); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); RNA_def_string(ot->srna, "scene", "", MAX_ID_NAME-2, "Scene Name", "Scene name to add as a strip"); } @@ -339,7 +253,7 @@ static int sequencer_add_movie_strip_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - seq = alloc_sequence(ed->seqbasep, start_frame, channel); /* warning, this sets last */ + seq = alloc_sequence(ed->seqbasep, start_frame, channel); seq->type= SEQ_MOVIE; seq->anim= an; @@ -375,8 +289,7 @@ static int sequencer_add_movie_strip_exec(bContext *C, wmOperator *op) static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) { sequencer_generic_invoke_xy__internal(C, op, event, 0); - sequencer_generic_filesel__internal(C, op, "Load Movie", "/"); - return OPERATOR_RUNNING_MODAL; + return WM_operator_filesel(C, op, event); //return sequencer_add_movie_strip_exec(C, op); } @@ -395,7 +308,8 @@ void SEQUENCER_OT_add_movie_strip(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - sequencer_generic_props__internal(ot, 1, 0); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); + RNA_def_boolean(ot->srna, "sound", FALSE, "Sound", "Load hd sound with the movie"); // XXX need to impliment this } @@ -436,7 +350,7 @@ static int sequencer_add_sound_strip_exec(bContext *C, wmOperator *op) sound->flags |= SOUND_FLAGS_SEQUENCE; // XXX audio_makestream(sound); - seq = alloc_sequence(ed->seqbasep, start_frame, channel); /* warning, this sets last */ + seq = alloc_sequence(ed->seqbasep, start_frame, channel); seq->type= SEQ_RAM_SOUND; seq->sound= sound; @@ -472,13 +386,9 @@ static int sequencer_add_sound_strip_exec(bContext *C, wmOperator *op) static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - Scene *scene= CTX_data_scene(C); - Editing *ed= scene->ed; - +{ sequencer_generic_invoke_xy__internal(C, op, event, 0); - sequencer_generic_filesel__internal(C, op, "Load Sound", ed->act_sounddir); - return OPERATOR_RUNNING_MODAL; + return WM_operator_filesel(C, op, event); //return sequencer_add_sound_strip_exec(C, op); } @@ -497,7 +407,8 @@ void SEQUENCER_OT_add_sound_strip(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - sequencer_generic_props__internal(ot, 1, 0); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); + RNA_def_boolean(ot->srna, "hd", FALSE, "HD Sound", "Load the sound as streaming audio"); // XXX need to impliment this } /* add image operator */ @@ -523,7 +434,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filename", filename); - seq = alloc_sequence(ed->seqbasep, start_frame, channel); /* warning, this sets last */ + seq = alloc_sequence(ed->seqbasep, start_frame, channel); seq->type= SEQ_IMAGE; @@ -567,13 +478,8 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) static int sequencer_add_image_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) { - Scene *scene= CTX_data_scene(C); - Editing *ed= scene->ed; - sequencer_generic_invoke_xy__internal(C, op, event, 0); - sequencer_generic_filesel__internal(C, op, "Load Image", ed->act_imagedir); - return OPERATOR_RUNNING_MODAL; - + return WM_operator_filesel(C, op, event); //return sequencer_add_image_strip_exec(C, op); } @@ -592,6 +498,143 @@ void SEQUENCER_OT_add_image_strip(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - sequencer_generic_props__internal(ot, 1, 0); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); } + +/* add_effect_strip operator */ +static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Editing *ed= scene->ed; + + Sequence *seq; /* generic strip vars */ + Strip *strip; + StripElem *se; + struct SeqEffectHandle sh; + + int start_frame, end_frame, channel, type; /* operator props */ + + Sequence *seq1, *seq2, *seq3; + char *error_msg; + + start_frame= RNA_int_get(op->ptr, "start_frame"); + end_frame= RNA_int_get(op->ptr, "end_frame"); + channel= RNA_int_get(op->ptr, "channel"); + + type= RNA_enum_get(op->ptr, "type"); + + // XXX We need unique names and move to invoke + if(!seq_effect_find_selected(scene, NULL, type, &seq1, &seq2, &seq3, &error_msg)) { + BKE_report(op->reports, RPT_ERROR, error_msg); + return OPERATOR_CANCELLED; + } + + /* If seq1 is NULL and no error was rasied it means the seq is standalone + * (like color strips) and we need to check its start and end frames are valid */ + if (seq1==NULL && end_frame <= start_frame) { + BKE_report(op->reports, RPT_ERROR, "Start and end frame are not set"); + return OPERATOR_CANCELLED; + } + + seq = alloc_sequence(ed->seqbasep, start_frame, channel); + seq->type= type; + + sh = get_sequence_effect(seq); + + seq->seq1= seq1; + seq->seq2= seq2; + seq->seq3= seq3; + + sh.init(seq); + + if (!seq1) { /* effect has no deps */ + seq->len= 1; + seq_tx_set_final_right(seq, end_frame); + } + + calc_sequence(seq); + + /* basic defaults */ + seq->strip= strip= MEM_callocN(sizeof(Strip), "strip"); + strip->len = seq->len; + strip->us= 1; + if(seq->len>0) + strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem"); + + if (seq->type==SEQ_PLUGIN) { + char filename[FILE_MAX]; + RNA_string_get(op->ptr, "filename", filename); + + sh.init_plugin(seq, filename); + + if(seq->plugin==NULL) { + BLI_remlink(ed->seqbasep, seq); + seq_free_sequence(ed, seq); + BKE_reportf(op->reports, RPT_ERROR, "Sequencer plugin \"%s\" could not load.", filename); + return OPERATOR_CANCELLED; + } + } + else if (seq->type==SEQ_COLOR) { + SolidColorVars *colvars= (SolidColorVars *)seq->effectdata; + RNA_float_get_array(op->ptr, "color", colvars->col); + } + + if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq); + + update_changed_seq_and_deps(scene, seq, 1, 1); /* runs calc_sequence */ + + + /* not sure if this is needed with update_changed_seq_and_deps. + * it was NOT called in blender 2.4x, but wont hurt */ + sort_seq(scene); + + if (RNA_boolean_get(op->ptr, "replace_sel")) { + deselect_all_seq(scene); + set_last_seq(scene, seq); + seq->flag |= SELECT; + } + + if (seq->type==SEQ_PLUGIN) { + ED_undo_push(C, "Add Plugin Strip, Sequencer"); + } + else { + ED_undo_push(C, "Add Effect Strip, Sequencer"); + } + + ED_area_tag_redraw(CTX_wm_area(C)); + return OPERATOR_FINISHED; +} + + +/* add color */ +static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + sequencer_generic_invoke_xy__internal(C, op, event, SEQPROP_ENDFRAME); + + if (RNA_property_is_set(op->ptr, "type") && RNA_enum_get(op->ptr, "type")==SEQ_PLUGIN) { + /* only plugins need the file selector */ + return WM_operator_filesel(C, op, event); + } + else { + return sequencer_add_effect_strip_exec(C, op); + } +} + +void SEQUENCER_OT_add_effect_strip(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Effect Strip"; + ot->idname= "SEQUENCER_OT_add_effect_strip"; + + /* api callbacks */ + ot->invoke= sequencer_add_effect_strip_invoke; + ot->exec= sequencer_add_effect_strip_exec; + + ot->poll= ED_operator_sequencer_active; + ot->flag= OPTYPE_REGISTER; + + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_ENDFRAME|SEQPROP_FILENAME); + RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_CROSS, "Type", "Sequencer effect type"); + RNA_def_float_vector(ot->srna, "color", 3, NULL, 0.0f, 1.0f, "Color", "Initialize the strip with this color (only used when type='COLOR')", 0.0f, 1.0f); +} diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index a66c7b8bd39..fde72f64efb 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -104,6 +104,32 @@ static int okee() {return 0;} /* XXX */ +/* RNA Enums, used in multiple files */ +EnumPropertyItem sequencer_prop_effect_types[] = { + {SEQ_CROSS, "CROSS", "Crossfade", "Crossfade effect strip type"}, + {SEQ_ADD, "ADD", "Add", "Add effect strip type"}, + {SEQ_SUB, "SUBTRACT", "Subtract", "Subtract effect strip type"}, + {SEQ_ALPHAOVER, "ALPHA_OVER", "Alpha Over", "Alpha Over effect strip type"}, + {SEQ_ALPHAUNDER, "ALPHA_UNDER", "Alpha Under", "Alpha Under effect strip type"}, + {SEQ_GAMCROSS, "GAMMA_CROSS", "Gamma Cross", "Gamma Cross effect strip type"}, + {SEQ_MUL, "MULTIPLY", "Multiply", "Multiply effect strip type"}, + {SEQ_OVERDROP, "ALPHA_OVER_DROP", "Alpha Over Drop", "Alpha Over Drop effect strip type"}, + {SEQ_PLUGIN, "PLUGIN", "Plugin", "Plugin effect strip type"}, + {SEQ_WIPE, "WIPE", "Wipe", "Wipe effect strip type"}, + {SEQ_GLOW, "GLOW", "Glow", "Glow effect strip type"}, + {SEQ_TRANSFORM, "TRANSFORM", "Transform", "Transform effect strip type"}, + {SEQ_COLOR, "COLOR", "Color", "Color effect strip type"}, + {SEQ_SPEED, "SPEED", "Speed", "Color effect strip type"}, + {0, NULL, NULL, NULL} +}; + +/* mute operator */ +EnumPropertyItem sequencer_prop_operate_types[] = { /* better name? */ + {SEQ_SELECTED, "SELECTED", "Selected", ""}, + {SEQ_UNSELECTED, "UNSELECTED", "Unselected ", ""}, + {0, NULL, NULL, NULL} +}; + typedef struct TransSeq { int start, machine; @@ -696,20 +722,20 @@ void change_sequence(Scene *scene) } -int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequence **selseq1, Sequence **selseq2, Sequence **selseq3) +int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequence **selseq1, Sequence **selseq2, Sequence **selseq3, char **error_str) { Editing *ed = scene->ed; Sequence *seq1= 0, *seq2= 0, *seq3= 0, *seq; + *error_str= NULL; + if (!activeseq) seq2= get_last_seq(scene); for(seq=ed->seqbasep->first; seq; seq=seq->next) { if(seq->flag & SELECT) { - if (seq->type == SEQ_RAM_SOUND - || seq->type == SEQ_HD_SOUND) { - error("Can't apply effects to " - "audio sequence strips"); + if (seq->type == SEQ_RAM_SOUND || seq->type == SEQ_HD_SOUND) { + *error_str= "Can't apply effects to audio sequence strips"; return 0; } if((seq != activeseq) && (seq != seq2)) { @@ -717,8 +743,8 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen else if(seq1==0) seq1= seq; else if(seq3==0) seq3= seq; else { - error("Can't apply effect to more than 3 sequence strips"); - return 0; + *error_str= "Can't apply effect to more than 3 sequence strips"; + return 0; } } } @@ -736,23 +762,26 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen switch(get_sequence_effect_num_inputs(type)) { case 0: *selseq1 = *selseq2 = *selseq3 = 0; - return 1; + return 1; /* succsess */ case 1: if(seq2==0) { - error("Need at least one selected sequence strip"); + *error_str= "Need at least one selected sequence strip"; return 0; } if(seq1==0) seq1= seq2; if(seq3==0) seq3= seq2; case 2: if(seq1==0 || seq2==0) { - error("Need 2 selected sequence strips"); + *error_str= "Need 2 selected sequence strips"; return 0; } if(seq3==0) seq3= seq2; } - if (seq1==NULL && seq2==NULL && seq3==NULL) return 0; + if (seq1==NULL && seq2==NULL && seq3==NULL) { + *error_str= "TODO: in what cases does this happen?"; + return 0; + } *selseq1= seq1; *selseq2= seq2; @@ -765,17 +794,21 @@ void reassign_inputs_seq_effect(Scene *scene) { Editing *ed= scene->ed; Sequence *seq1, *seq2, *seq3, *last_seq = get_last_seq(scene); + char *error_msg; if(last_seq==0 || !(last_seq->type & SEQ_EFFECT)) return; if(ed==NULL) return; - if(!seq_effect_find_selected(scene, last_seq, last_seq->type, &seq1, &seq2, &seq3)) + if(!seq_effect_find_selected(scene, last_seq, last_seq->type, &seq1, &seq2, &seq3, &error_msg)) { + //BKE_report(op->reports, RPT_ERROR, error_msg); // XXX operatorify return; - + } /* see reassigning would create a cycle */ - if(seq_is_predecessor(seq1, last_seq) || seq_is_predecessor(seq2, last_seq) || - seq_is_predecessor(seq3, last_seq)) { - error("Can't reassign inputs: no cycles allowed"); + if( seq_is_predecessor(seq1, last_seq) || + seq_is_predecessor(seq2, last_seq) || + seq_is_predecessor(seq3, last_seq) + ) { + //BKE_report(op->reports, RPT_ERROR, "Can't reassign inputs: no cycles allowed"); // XXX operatorify return; } @@ -1407,14 +1440,6 @@ void seq_snap_menu(Scene *scene) /* Operator functions */ - -/* mute operator */ -static EnumPropertyItem prop_set_mute_types[] = { - {SEQ_SELECTED, "SELECTED", "Selected", ""}, - {SEQ_UNSELECTED, "UNSELECTED", "Unselected ", ""}, - {0, NULL, NULL, NULL} -}; - static int sequencer_mute_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); @@ -1459,7 +1484,7 @@ void SEQUENCER_OT_mute(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - RNA_def_enum(ot->srna, "type", prop_set_mute_types, SEQ_SELECTED, "Type", ""); + RNA_def_enum(ot->srna, "type", sequencer_prop_operate_types, SEQ_SELECTED, "Type", ""); } @@ -1508,7 +1533,7 @@ void SEQUENCER_OT_unmute(struct wmOperatorType *ot) ot->poll= ED_operator_sequencer_active; ot->flag= OPTYPE_REGISTER; - RNA_def_enum(ot->srna, "type", prop_set_mute_types, SEQ_SELECTED, "Type", ""); + RNA_def_enum(ot->srna, "type", sequencer_prop_operate_types, SEQ_SELECTED, "Type", ""); } @@ -1842,7 +1867,8 @@ static int sequencer_delete_exec(bContext *C, wmOperator *op) } ED_undo_push(C, "Delete Strip(s), Sequencer"); - ED_area_tag_redraw(CTX_wm_area(C)); + //ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, NULL); /* redraw other sequencer views */ return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_sequencer/sequencer_header.c b/source/blender/editors/space_sequencer/sequencer_header.c index a36828813ef..88dec2287e6 100644 --- a/source/blender/editors/space_sequencer/sequencer_header.c +++ b/source/blender/editors/space_sequencer/sequencer_header.c @@ -71,29 +71,14 @@ #define B_IPOBORDER 4 #define B_SEQCLEAR 5 -static void do_viewmenu(bContext *C, void *arg, int event) -{ - switch (event) { // XXX more to go - case 3: - WM_operator_name_call(C, "SEQUENCER_OT_view_all", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 4: - WM_operator_name_call(C, "SEQUENCER_OT_view_selected", WM_OP_INVOKE_REGION_WIN, NULL); - break; - } -} - static uiBlock *seq_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); SpaceSeq *sseq= sa->spacedata.first; View2D *v2d= UI_view2d_fromcontext(C); - uiBlock *block; + uiBlock *block= uiBeginBlock(C, handle->region, "seq_viewmenu", UI_EMBOSSP, UI_HELV); short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, handle->region, "seq_viewmenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_viewmenu, NULL); if (sseq->mainb == SEQ_DRAW_SEQUENCE) { uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, @@ -106,7 +91,7 @@ static uiBlock *seq_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_u "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation " @@ -119,11 +104,12 @@ static uiBlock *seq_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_u 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuButO(block, "SEQUENCER_OT_view_all", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_view_selected", NULL); + + uiDefMenuSep(block); /* Lock Time */ #define V2D_VIEWLOCK 0 // XXX add back @@ -133,7 +119,7 @@ static uiBlock *seq_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_u menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); /* Draw time or frames.*/ - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); if(sseq->flag & SEQ_DRAWFRAMES) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Seconds|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); @@ -159,59 +145,30 @@ static uiBlock *seq_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_u return block; } - -static void do_selectmenu(bContext *C, void *arg, int event) -{ - switch (event) { - case 0: - WM_operator_name_call(C, "SEQUENCER_OT_borderselect", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 1: - WM_operator_name_call(C, "SEQUENCER_OT_select_linked", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 2: /* strips to left */ - break; - case 3: /* strips to right */ - break; - case 5: /* strips to left */ - break; - case 6: /* strips to right */ - break; - case 7: - WM_operator_name_call(C, "SEQUENCER_OT_select_linked", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 8: /* sel all markers */ - break; - case 9: - WM_operator_name_call(C, "SEQUENCER_OT_select_invert", WM_OP_INVOKE_REGION_WIN, NULL); - break; - } -} - static uiBlock *seq_selectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, handle->region, "seq_selectmenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_selectmenu, NULL); - - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strips to the Left", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strips to the Right", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surrounding Handles", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Left Handles", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Right Handles", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Strips|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Markers|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Invert Selection|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); + uiBlock *block= uiBeginBlock(C, handle->region, "seq_selectmenu", UI_EMBOSSP, UI_HELV); + uiBut *but; + + but= uiDefMenuButO(block, "SEQUENCER_OT_select_active_side", "Strips to the Left"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "side", 'l'); + but= uiDefMenuButO(block, "SEQUENCER_OT_select_active_side", "Strips to the Right"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "side", 'r'); + uiDefMenuSep(block); + but= uiDefMenuButO(block, "SEQUENCER_OT_select_handles", "Surrounding Handles"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "side", 'b'); + but= uiDefMenuButO(block, "SEQUENCER_OT_select_handles", "Left Handles"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "side", 'l'); + but= uiDefMenuButO(block, "SEQUENCER_OT_select_handles", "Right Handles"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "side", 'r'); + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_borderselect", NULL); + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_select_linked", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_deselect_all", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_select_invert", NULL); if(sa->headertype==HEADERTOP) { @@ -222,53 +179,23 @@ static uiBlock *seq_selectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg uiBlockFlipOrder(block); } - uiTextBoundsBlock(block, 50); + /* position menu */ + uiTextBoundsBlock(block, 60); + uiEndBlock(C, block); return block; } - -static void do_markermenu(bContext *C, void *arg, int event) -{ -#if 0 - switch(event) - { - case 1: - add_marker(CFRA); - break; - case 2: - duplicate_marker(); - break; - case 3: - remove_marker(); - break; - case 4: - rename_marker(); - break; - case 5: - transform_markers('g', 0); - break; - case 6: - sseq->flag ^= SEQ_MARKER_TRANS; - break; - - } -#endif -} - static uiBlock *seq_markermenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); SpaceSeq *sseq= sa->spacedata.first; - uiBlock *block; + uiBlock *block= uiBeginBlock(C, handle->region, "seq_markermenu", UI_EMBOSSP, UI_HELV); short yco= 0, menuwidth=120; - block= uiBeginBlock(C, handle->region, "seq_markermenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_markermenu, NULL); - @@ -279,14 +206,14 @@ static uiBlock *seq_markermenu(bContext *C, uiMenuBlockHandle *handle, void *arg uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "(Re)Name Marker|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Marker|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); uiDefIconTextBut(block, BUTM, 1, (sseq->flag & SEQ_MARKER_TRANS)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, "Transform Markers", 0, yco-=20, @@ -307,144 +234,64 @@ static uiBlock *seq_markermenu(bContext *C, uiMenuBlockHandle *handle, void *arg return block; } - -static void do_seq_addmenu_effectmenu(bContext *C, void *arg, int event) -{ -#if 0 - switch(event) - { - case 0: - add_sequence(SEQ_ADD); - break; - case 1: - add_sequence(SEQ_SUB); - break; - case 2: - add_sequence(SEQ_MUL); - break; - case 3: - add_sequence(SEQ_CROSS); - break; - case 4: - add_sequence(SEQ_GAMCROSS); - break; - case 5: - add_sequence(SEQ_ALPHAOVER); - break; - case 6: - add_sequence(SEQ_ALPHAUNDER); - break; - case 7: - add_sequence(SEQ_OVERDROP); - break; - case 8: - add_sequence(SEQ_PLUGIN); - break; - case 9: - add_sequence(SEQ_WIPE); - break; - case 10: - add_sequence(SEQ_GLOW); - break; - case 11: - add_sequence(SEQ_TRANSFORM); - break; - case 12: - add_sequence(SEQ_COLOR); - break; - case 13: - add_sequence(SEQ_SPEED); - break; - } -#endif -} - static uiBlock *seq_addmenu_effectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, handle->region, "seq_addmenu_effectmenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_seq_addmenu_effectmenu, NULL); - - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subtract", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Multiply", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cross", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Gamma Cross", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Alpha Over", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Alpha Under", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Alpha Over Drop", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Wipe", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Glow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Color Generator", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Speed Control", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Plugin...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); + uiBlock *block= uiBeginBlock(C, handle->region, "seq_addmenu_effectmenu", UI_EMBOSSP, UI_HELV); + + + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Add")), "type", SEQ_ADD); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Subtract")), "type", SEQ_SUB); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Multiply")), "type", SEQ_MUL); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Cross")), "type", SEQ_CROSS); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Gamma Cross")), "type", SEQ_GAMCROSS); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Alpha Over")), "type", SEQ_ALPHAOVER); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Alpha Under")), "type", SEQ_ALPHAUNDER); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Alpha Over Drop")), "type", SEQ_OVERDROP); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Wipe")), "type", SEQ_WIPE); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Glow")), "type", SEQ_GLOW); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Transform")), "type", SEQ_TRANSFORM); + /* Color is an effect but moved to the other menu since its not that exciting */ + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Speed Control")), "type", SEQ_SPEED); + uiDefMenuSep(block); + RNA_enum_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Plugin...")), "type", SEQ_PLUGIN); + + /* position menu */ + uiBlockSetDirection(block, UI_RIGHT); + uiTextBoundsBlock(block, 60); + uiEndBlock(C, block); - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); return block; } -static void do_addmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case SEQ_COLOR: - WM_operator_name_call(C, "SEQUENCER_OT_add_color_strip", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case SEQ_SCENE: - WM_operator_name_call(C, "SEQUENCER_OT_add_scene_strip", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case SEQ_MOVIE: - WM_operator_name_call(C, "SEQUENCER_OT_add_movie_strip", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case SEQ_RAM_SOUND: - WM_operator_name_call(C, "SEQUENCER_OT_add_sound_strip", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case SEQ_IMAGE: - WM_operator_name_call(C, "SEQUENCER_OT_add_image_strip", WM_OP_INVOKE_REGION_WIN, NULL); - break; - } - // XXX todo: SEQ_HD_SOUND and SEQ_MOVIE_AND_HD_SOUND -} static uiBlock *seq_addmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); - - - - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, handle->region, "seq_addmenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_addmenu, NULL); - + uiBlock *block= uiBeginBlock(C, handle->region, "seq_addmenu", UI_EMBOSSP, UI_HELV); + uiBut *but; + uiDefMenuSub(block, seq_addmenu_effectmenu, "Effect"); - uiDefIconTextBlockBut(block, seq_addmenu_effectmenu, NULL, ICON_RIGHTARROW_THIN, "Effect", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuSep(block); #ifdef WITH_FFMPEG - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Audio (RAM)", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_RAM_SOUND, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Audio (HD)", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_HD_SOUND, ""); + uiDefMenuButO(block, "SEQUENCER_OT_add_sound_strip", "Audio (RAM)"); + but= uiDefMenuButO(block, "SEQUENCER_OT_add_sound_strip", "Audio (HD)"); + RNA_boolean_set(uiButGetOperatorPtrRNA(but), "hd", TRUE); #else - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Audio (Wav)", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_RAM_SOUND, ""); + uiDefMenuButO(block, "SEQUENCER_OT_add_sound_strip", NULL); #endif - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scene", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_SCENE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Images", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_IMAGE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Movie", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_MOVIE, ""); + but= uiDefMenuButO(block, "SEQUENCER_OT_add_effect_strip", "Color"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "type", SEQ_COLOR); + + uiDefMenuButO(block, "SEQUENCER_OT_add_image_strip", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_add_movie_strip", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_add_scene_strip", NULL); #ifdef WITH_FFMPEG - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Movie + Audio (HD)", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_MOVIE_AND_HD_SOUND, ""); + but= uiDefMenuButO(block, "SEQUENCER_OT_add_movie_strip"); + RNA_boolean_set(uiButGetOperatorPtrRNA(but), "sound", TRUE); #endif - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Color", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, SEQ_COLOR, ""); - if(sa->headertype==HEADERTOP) { uiBlockSetDirection(block, UI_DOWN); @@ -460,170 +307,72 @@ static uiBlock *seq_addmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_un return block; } - -static void do_editmenu(bContext *C, void *arg, int event) -{ - PointerRNA ptr; - - switch (event) { - case 7: - WM_operator_properties_create(&ptr, "TFM_OT_transform"); - RNA_int_set(&ptr, "mode", TFM_TIME_EXTEND); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, &ptr); - WM_operator_properties_free(&ptr); - break; - case 11: - WM_operator_properties_create(&ptr, "TFM_OT_transform"); - RNA_int_set(&ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, &ptr); - WM_operator_properties_free(&ptr); - break; - case 12: - /* snap to current frame */ - break; - - case 13: - WM_operator_properties_create(&ptr, "SEQUENCER_OT_cut"); - RNA_enum_set(&ptr, "type", 1); // CONSTANT - WM_operator_name_call(C, "SEQUENCER_OT_cut", WM_OP_INVOKE_REGION_WIN, &ptr); - WM_operator_properties_free(&ptr); - break; - case 23: - WM_operator_properties_create(&ptr, "SEQUENCER_OT_cut"); - RNA_enum_set(&ptr, "type", 0); // CONSTANT - WM_operator_name_call(C, "SEQUENCER_OT_cut", WM_OP_INVOKE_REGION_WIN, &ptr); - WM_operator_properties_free(&ptr); - break; - case 16: - WM_operator_name_call(C, "SEQUENCER_OT_separate_images", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 5: - WM_operator_name_call(C, "SEQUENCER_OT_add_duplicate", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 6: - WM_operator_name_call(C, "SEQUENCER_OT_delete", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 1: /* change efect image scene TODO */ - break; - case 14: /* reassign inputs */ - break; - case 15: /* remap paths */ - break; - case 2: - WM_operator_name_call(C, "SEQUENCER_OT_meta_make", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 3: - WM_operator_name_call(C, "SEQUENCER_OT_meta_separate", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 9: - case 10: - WM_operator_name_call(C, "SEQUENCER_OT_meta_toggle", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 17: - WM_operator_name_call(C, "SEQUENCER_OT_reload", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 18: - WM_operator_name_call(C, "SEQUENCER_OT_lock", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 19: - WM_operator_name_call(C, "SEQUENCER_OT_unlock", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 20: - WM_operator_name_call(C, "SEQUENCER_OT_mute", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 21: - WM_operator_name_call(C, "SEQUENCER_OT_unmute", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case 22: - -#define SEQ_UNSELECTED 1 // XXX - - WM_operator_properties_create(&ptr, "SEQUENCER_OT_mute"); - RNA_enum_set(&ptr, "type", SEQ_UNSELECTED); // CONSTANT - WM_operator_name_call(C, "SEQUENCER_OT_mute", WM_OP_INVOKE_REGION_WIN, &ptr); - WM_operator_properties_free(&ptr); - break; - } -} - static uiBlock *seq_editmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); - - Scene *scene= CTX_data_scene(C); Editing *ed= scene->ed; - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, handle->region, "seq_editmenu", UI_EMBOSSP, UI_HELV); - uiBlockSetButmFunc(block, do_editmenu, NULL); - - - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Extend from frame|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap to Current Frame|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); + uiBlock *block= uiBeginBlock(C, handle->region, "seq_editmenu", UI_EMBOSSP, UI_HELV); + uiBut *but; + - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + RNA_int_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "TFM_OT_transform", "Grab/Move")), "mode", TFM_TRANSLATION); + RNA_int_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "TFM_OT_transform", "Grab/Extend from frame")), "mode", TFM_TIME_EXTEND); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cut (hard) at Current Frame|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cut (soft) at Current Frame|Shift-K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate Images to Strips|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); + uiDefMenuButO(block, "SEQUENCER_OT_strip_snap", "Snap to Current Frame"); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + RNA_int_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_cut", "Cut (hard) at Current Frame")), "type", SEQ_CUT_HARD); + RNA_int_set(uiButGetOperatorPtrRNA(uiDefMenuButO(block, "SEQUENCER_OT_cut", "Cut (soft) at Current Frame")), "type", SEQ_CUT_SOFT); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - if (ed->act_seq != NULL && ed->act_seq->type != SEQ_MOVIE) { - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefMenuButO(block, "SEQUENCER_OT_separate_images", NULL); + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_add_duplicate", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_delete", NULL); - if(ed->act_seq->type >= SEQ_EFFECT) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Change Effect...|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reassign Inputs|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, ""); + if (ed->act_seq) { + switch(ed->act_seq->type) { + case SEQ_EFFECT: + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_effect_change", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_effect_reassign_inputs", NULL); + break; + case SEQ_IMAGE: + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_image_change", NULL); // Change Scene... + break; + case SEQ_SCENE: + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_scene_change", NULL); // Remap Paths... + break; + case SEQ_MOVIE: + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_movie_change", NULL); // Remap Paths... + break; } - else if(ed->act_seq->type == SEQ_IMAGE) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Change Image...|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Change Scene...|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - - if(ed->act_seq->type==SEQ_IMAGE) - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remap Paths...|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, ""); - } - if (ed->act_seq != NULL && ed->act_seq->type == SEQ_MOVIE) { -/* uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Filter Y|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); */ - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remap Paths...|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, ""); - } + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_meta_make", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_meta_separate", NULL); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Meta Strip...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate Meta Strip...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - if ((ed != NULL) && (ed->metastack.first > 0)){ - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Enter/Exit Meta Strip|Tab", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, ""); - } - else { - if (ed->act_seq != NULL && ed->act_seq->type == SEQ_META) { - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Enter/Exit Meta Strip|Tab", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); - } + if ((ed && ed->metastack.first) || (ed->act_seq && ed->act_seq->type == SEQ_META)) { + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_meta_toggle", NULL); } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reload Strip Data...|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lock Strips...|Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unlock Strips...|Alt-Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mute Strips...|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unmute Strips...|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mute Deselected Strips...|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, ""); - - - + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_reload", NULL); + uiDefMenuSep(block); + uiDefMenuButO(block, "SEQUENCER_OT_lock", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_unlock", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_mute", NULL); + uiDefMenuButO(block, "SEQUENCER_OT_unmute", NULL); + + but= uiDefMenuButO(block, "SEQUENCER_OT_mute", "Mute Deselected Strips"); + RNA_enum_set(uiButGetOperatorPtrRNA(but), "type", SEQ_UNSELECTED); + if(sa->headertype==HEADERTOP) { uiBlockSetDirection(block, UI_DOWN); } @@ -638,17 +387,6 @@ static uiBlock *seq_editmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_u return block; } - -static void do_sequencer_buttons(bContext *C, void *arg, int event) -{ - switch(event) { - case B_SEQCLEAR: - WM_operator_name_call(C, "SEQUENCER_OT_refresh_all", WM_OP_INVOKE_REGION_WIN, NULL); - break; - } -} - - void sequencer_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); @@ -656,11 +394,8 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) Scene *scene= CTX_data_scene(C); Editing *ed= scene->ed; - uiBlock *block; - int xco, yco= 3; - - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV); - uiBlockSetHandleFunc(block, do_sequencer_buttons, NULL); + uiBlock *block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV); + int xco=3, yco= 3; xco= ED_area_header_standardbuttons(C, block, yco); @@ -671,23 +406,23 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) uiBlockSetEmboss(block, UI_EMBOSSP); xmax= GetButStringLength("View"); - uiDefPulldownBut(block, seq_viewmenu, sa, "View", xco, yco-2, xmax-3, 24, ""); + uiDefPulldownBut(block, seq_viewmenu, sa, "View", xco, yco, xmax-3, 24, ""); xco+=xmax; xmax= GetButStringLength("Select"); - uiDefPulldownBut(block, seq_selectmenu, sa, "Select", xco, yco-2, xmax-3, 24, ""); + uiDefPulldownBut(block, seq_selectmenu, sa, "Select", xco, yco, xmax-3, 24, ""); xco+=xmax; xmax= GetButStringLength("Marker"); - uiDefPulldownBut(block, seq_markermenu, sa, "Marker", xco, yco-2, xmax-3, 24, ""); + uiDefPulldownBut(block, seq_markermenu, sa, "Marker", xco, yco, xmax-3, 24, ""); xco+=xmax; xmax= GetButStringLength("Add"); - uiDefPulldownBut(block, seq_addmenu, sa, "Add", xco, yco-2, xmax-3, 24, ""); + uiDefPulldownBut(block, seq_addmenu, sa, "Add", xco, yco, xmax-3, 24, ""); xco+=xmax; xmax= GetButStringLength("Strip"); - uiDefPulldownBut(block, seq_editmenu, sa, "Strip", xco, yco-2, xmax-3, 24, ""); + uiDefPulldownBut(block, seq_editmenu, sa, "Strip", xco, yco, xmax-3, 24, ""); xco+=xmax; } @@ -701,7 +436,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) "|Luma Waveform %x2" "|Chroma Vectorscope %x3" "|Histogram %x4", - xco,0,XIC+10,YIC, &sseq->mainb, 0.0, 3.0, + xco,yco,XIC+10,YIC, &sseq->mainb, 0.0, 3.0, 0, 0, "Shows the sequence output image preview"); @@ -716,7 +451,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) minchan = -BLI_countlist(&ed->metastack); uiDefButS(block, NUM, B_REDR, "Chan:", - xco, 0, 3.5 * XIC,YIC, + xco, yco, 3.5 * XIC,YIC, &sseq->chanshown, minchan, MAXSEQ, 0, 0, "The channel number shown in the image preview. 0 is the result of all strips combined."); @@ -731,7 +466,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) "|Z 90 %x90" "|Z 70 %x70" "|Z Off %x0", - xco,0,3.0 * XIC, YIC, &sseq->zebra, + xco,yco,3.0 * XIC, YIC, &sseq->zebra, 0,0,0,0, "Show overexposed " "areas with zebra stripes"); @@ -740,7 +475,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) uiDefButBitI(block, TOG, SEQ_DRAW_SAFE_MARGINS, B_REDR, "T", - xco,0,XIC,YIC, &sseq->flag, + xco,yco,XIC,YIC, &sseq->flag, 0, 0, 0, 0, "Draw title safe margins in preview"); xco+= 8 + XIC; @@ -749,7 +484,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) if (sseq->mainb == SEQ_DRAW_IMG_WAVEFORM) { uiDefButBitI(block, TOG, SEQ_DRAW_COLOR_SEPERATED, B_REDR, "CS", - xco,0,XIC,YIC, &sseq->flag, + xco,yco,XIC,YIC, &sseq->flag, 0, 0, 0, 0, "Seperate color channels in preview"); xco+= 8 + XIC; @@ -761,21 +496,20 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar) uiBlockBeginAlign(block); uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, - xco,0,XIC,YIC, &viewmovetemp, + xco,yco,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view in and out (Ctrl MiddleMouse)"); xco += XIC; uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, - xco,0,XIC,YIC, 0, + xco,yco,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to fit area"); uiBlockEndAlign(block); xco += 8 + XIC; } - uiDefBut(block, BUT, B_SEQCLEAR, "Refresh", xco,0,3*XIC,YIC, 0, 0, 0, 0, 0, "Clears all buffered images in memory"); - + uiDefButO(block, BUT, "SEQUENCER_OT_refresh_all", WM_OP_EXEC_DEFAULT, "Refresh", xco, yco, 3*XIC, YIC, "Clears all buffered images in memory"); uiBlockSetEmboss(block, UI_EMBOSS); diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index f83acdd0eba..209ad4f7131 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -21,13 +21,16 @@ * All rights reserved. * * - * Contributor(s): Blender Foundation + * Contributor(s): Blender Foundation, Campbell Barton * * ***** END GPL LICENSE BLOCK ***** */ #ifndef ED_SEQUENCER_INTERN_H #define ED_SEQUENCER_INTERN_H +#include "RNA_access.h" +#include "DNA_sequence_types.h" + /* internal exports only */ struct Sequence; @@ -58,9 +61,12 @@ void deselect_all_seq(struct Scene *scene); void recurs_sel_seq(struct Sequence *seqm); int event_to_efftype(int event); void set_last_seq(struct Scene *scene, struct Sequence *seq); -int seq_effect_find_selected(struct Scene *scene, struct Sequence *activeseq, int type, struct Sequence **selseq1, struct Sequence **selseq2, struct Sequence **selseq3); +int seq_effect_find_selected(struct Scene *scene, struct Sequence *activeseq, int type, struct Sequence **selseq1, struct Sequence **selseq2, struct Sequence **selseq3, char **error_str); struct Sequence *alloc_sequence(struct ListBase *lb, int cfra, int machine); +/* externs */ +extern EnumPropertyItem sequencer_prop_effect_types[]; + /* operators */ struct wmOperatorType; struct wmWindowManager; @@ -93,11 +99,11 @@ void SEQUENCER_OT_select_invert(struct wmOperatorType *ot); /* sequencer_select.c */ -void SEQUENCER_OT_add_color_strip(struct wmOperatorType *ot); void SEQUENCER_OT_add_scene_strip(struct wmOperatorType *ot); void SEQUENCER_OT_add_movie_strip(struct wmOperatorType *ot); void SEQUENCER_OT_add_sound_strip(struct wmOperatorType *ot); void SEQUENCER_OT_add_image_strip(struct wmOperatorType *ot); +void SEQUENCER_OT_add_effect_strip(struct wmOperatorType *ot); /* RNA enums, just to be more readable */ enum { diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 79d2853f988..19497ab5fe7 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -92,11 +92,11 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_borderselect); /* sequencer_add.c */ - WM_operatortype_append(SEQUENCER_OT_add_color_strip); WM_operatortype_append(SEQUENCER_OT_add_scene_strip); WM_operatortype_append(SEQUENCER_OT_add_movie_strip); WM_operatortype_append(SEQUENCER_OT_add_sound_strip); WM_operatortype_append(SEQUENCER_OT_add_image_strip); + WM_operatortype_append(SEQUENCER_OT_add_effect_strip); } diff --git a/source/blender/editors/space_view3d/vpaint.c b/source/blender/editors/space_view3d/vpaint.c index b4b16432245..80dbf05e049 100644 --- a/source/blender/editors/space_view3d/vpaint.c +++ b/source/blender/editors/space_view3d/vpaint.c @@ -552,7 +552,7 @@ void vpaint_dogamma(Scene *scene) Object *ob; float igam, fac; int a, temp; - char *cp, gamtab[256]; + unsigned char *cp, gamtab[256]; if((G.f & G_VERTEXPAINT)==0) return; @@ -574,7 +574,7 @@ void vpaint_dogamma(Scene *scene) } a= 4*me->totface; - cp= (char *)me->mcol; + cp= (unsigned char *)me->mcol; while(a--) { cp[1]= gamtab[ cp[1] ]; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 728e44b53ef..4fc711babae 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2326,7 +2326,7 @@ void flushTransSeq(TransInfo *t) switch (tdsq->sel_flag) { case SELECT: - if (seq->type != SEQ_META) /* for meta's, their children move */ + if (seq->type != SEQ_META && seq_tx_test(seq)) /* for meta's, their children move */ seq->start= new_frame - tdsq->start_offset; if (seq->depth==0) { @@ -2352,7 +2352,7 @@ void flushTransSeq(TransInfo *t) * children are ALWAYS transformed first * so we dont need to do this in another loop. */ calc_sequence(seq); - + /* test overlap, displayes red outline */ seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(seqbasep, seq) ) { @@ -3317,7 +3317,7 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count int left= seq_tx_get_final_left(seq, 0); int right= seq_tx_get_final_right(seq, 0); - if (seq->depth == 0 && ((seq->flag & SELECT) == 0 || (seq->flag & SEQ_LOCK) || (seq_tx_test(seq) == 0))) { + if (seq->depth == 0 && ((seq->flag & SELECT) == 0 || (seq->flag & SEQ_LOCK))) { *recursive= 0; *count= 0; *flag= 0; @@ -3359,7 +3359,7 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count /* Count */ /* Non nested strips (resect selection and handles) */ - if ((seq->flag & SELECT) == 0 || (seq->flag & SEQ_LOCK) || (seq_tx_test(seq) == 0)) { + if ((seq->flag & SELECT) == 0 || (seq->flag & SEQ_LOCK)) { *recursive= 0; *count= 0; *flag= 0; @@ -3564,14 +3564,14 @@ static void createTransSeqData(bContext *C, TransInfo *t) count = SeqTransCount(t, ed->seqbasep, 0); + /* allocate memory for data */ + t->total= count; + /* stop if trying to build list if nothing selected */ if (count == 0) { return; } - - /* allocate memory for data */ - t->total= count; - + td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransSeq TransData"); td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransSeq TransData2D"); tdsq = t->customData= MEM_callocN(t->total*sizeof(TransDataSeq), "TransSeq TransDataSeq"); @@ -4049,6 +4049,7 @@ void autokeyframe_pose_cb_func(Object *ob, int tmode, short targetless_ik) /* inserting keys, refresh ipo-keys, pointcache, redraw events... (ton) */ /* note: transdata has been freed already! */ +/* note: this runs even when createTransData exits early because (t->total==0), is this correct?... (campbell) */ void special_aftertrans_update(TransInfo *t) { Object *ob; @@ -4100,10 +4101,26 @@ void special_aftertrans_update(TransInfo *t) } } } + + /* as last: */ seq_prev= seq; } + + for(seq= seqbasep->first; seq; seq= seq->next) { + /* We might want to build a list of effects that need to be updated during transform */ + if(seq->type & SEQ_EFFECT) { + if (seq->seq1 && seq->seq1->flag & SELECT) calc_sequence(seq); + else if (seq->seq2 && seq->seq2->flag & SELECT) calc_sequence(seq); + else if (seq->seq3 && seq->seq3->flag & SELECT) calc_sequence(seq); + } + } + + sort_seq(t->scene); } - MEM_freeN(t->customData); + + if (t->customData) + MEM_freeN(t->customData); + } else if (t->spacetype == SPACE_ACTION) { SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 3ca183820a4..c46263183a9 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -120,6 +120,8 @@ void WM_event_window_timer_sleep(struct wmWindow *win, struct wmTimer *timer, i int WM_menu_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event); /* invoke callback, confirm menu + exec */ int WM_operator_confirm (struct bContext *C, struct wmOperator *op, struct wmEvent *event); + /* invoke callback, file selector "filename" unset + exec */ +int WM_operator_filesel (struct bContext *C, struct wmOperator *op, struct wmEvent *event); /* poll callback, context checks */ int WM_operator_winactive (struct bContext *C); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index d5fb3bce2e2..fe9fe2e29a4 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -236,6 +236,26 @@ int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } +/* op->invoke, opens fileselect if filename property not set, otherwise executes */ +int WM_operator_filesel(bContext *C, wmOperator *op, wmEvent *event) +{ + if (RNA_property_is_set(op->ptr, "filename")) { + return WM_operator_call(C, op); + } else { + SpaceFile *sfile; + + ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_FILE); + + /* settings for filebrowser */ + sfile= (SpaceFile*)CTX_wm_space_data(C); + sfile->op = op; + ED_fileselect_set_params(sfile, FILE_BLENDER, op->type->name, "", 0, 0, 0); + + /* screen and area have been reset already in ED_screen_full_newspace */ + return OPERATOR_RUNNING_MODAL; + } +} + /* op->poll */ int WM_operator_winactive(bContext *C) { |