Revision: 18678
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18678
Author:   campbellbarton
Date:     2009-01-26 10:13:15 +0100 (Mon, 26 Jan 2009)

Log Message:
-----------
* 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.

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
    
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
    branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
  2009-01-26 08:34:40 UTC (rev 18677)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
  2009-01-26 09:13:15 UTC (rev 18678)
@@ -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 @@
        
        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)
+       
+       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.
        
 }
 
-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));
-       
-       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 @@
                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 @@
        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 @@
                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_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 @@
        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 @@
        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_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 @@
        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 @@
        
        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_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 @@
        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);
+       

@@ 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