Revision: 19560
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19560
Author:   aligorith
Date:     2009-04-06 14:07:33 +0200 (Mon, 06 Apr 2009)

Log Message:
-----------
Graph Editor - Ctrl-LMB (Click Insert Keyframes) Operator

Now it is possible to add more keyframes to the 'active' F-Curve by simply 
Ctrl-LMB clicking in the graph space. 

NOTE: more advanced polling callbacks are needed in the Graph Editor...

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_graph/graph_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_graph/graph_intern.h
    branches/blender2.5/blender/source/blender/editors/space_graph/graph_ops.c

Modified: 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_graph/graph_edit.c 
2009-04-06 11:21:47 UTC (rev 19559)
+++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_edit.c 
2009-04-06 12:07:33 UTC (rev 19560)
@@ -244,6 +244,89 @@
 
 // TODO: insertkey
 
+/* ******************** Click-Insert Keyframes Operator 
************************* */
+
+static int graphkeys_click_insert_exec (bContext *C, wmOperator *op)
+{
+       bAnimContext ac;
+       bAnimListElem *ale;
+       float frame, val;
+       
+       /* get animation context */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+       
+       /* get active F-Curve 'anim-list-element' */
+       ale= get_active_fcurve_channel(&ac);
+       if (ELEM(NULL, ale, ale->data)) {
+               if (ale) MEM_freeN(ale);
+               return OPERATOR_CANCELLED;
+       }
+               
+       /* get frame and value from props */
+       frame= RNA_float_get(op->ptr, "frame");
+       val= RNA_float_get(op->ptr, "value");
+       
+       /* insert keyframe on the specified frame + value */
+       insert_vert_fcurve((FCurve *)ale->data, frame, val, 0);
+       
+       /* free temp data */
+       MEM_freeN(ale);
+       
+       /* set notifier that things have changed */
+       ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
+       
+       /* done */
+       return OPERATOR_FINISHED;
+}
+
+static int graphkeys_click_insert_invoke (bContext *C, wmOperator *op, wmEvent 
*evt)
+{
+       bAnimContext ac;
+       ARegion *ar;
+       View2D *v2d;
+       int mval[2];
+       float x, y;
+       
+       /* get animation context */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+       
+       /* store mouse coordinates in View2D space, into the operator's 
properties */
+       ar= ac.ar;
+       v2d= &ar->v2d;
+       
+       mval[0]= (evt->x - ar->winrct.xmin);
+       mval[1]= (evt->y - ar->winrct.ymin);
+       
+       UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y);
+       
+       RNA_float_set(op->ptr, "frame", x);
+       RNA_float_set(op->ptr, "value", y);
+       
+       /* run exec now */
+       return graphkeys_click_insert_exec(C, op);
+}
+
+void GRAPHEDIT_OT_keyframes_click_insert (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Click-Insert Keyframes";
+       ot->idname= "GRAPHEDIT_OT_keyframes_click_insert";
+       
+       /* api callbacks */
+       ot->invoke= graphkeys_click_insert_invoke;
+       ot->exec= graphkeys_click_insert_exec;
+       ot->poll= ED_operator_areaactive; // XXX active + editable poll
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       /* properties */
+       RNA_def_float(ot->srna, "frame", 1.0f, -FLT_MAX, FLT_MAX, "Frame 
Number", "Frame to insert keyframe on", 0, 100);
+       RNA_def_float(ot->srna, "value", 1.0f, -FLT_MAX, FLT_MAX, "Value", 
"Value for keyframe on", 0, 100);
+}
+
 /* ******************** Copy/Paste Keyframes Operator 
************************* */
 /* NOTE: the backend code for this is shared with the dopesheet editor */
 
@@ -302,7 +385,7 @@
                return OPERATOR_CANCELLED;
        }
        
-       /* set notifier tha things have changed */
+       /* set notifier that things have changed */
        ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
        
        return OPERATOR_FINISHED;

Modified: 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_intern.h   
    2009-04-06 11:21:47 UTC (rev 19559)
+++ 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_intern.h   
    2009-04-06 12:07:33 UTC (rev 19560)
@@ -82,6 +82,8 @@
 void GRAPHEDIT_OT_previewrange_set(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_view_all(struct wmOperatorType *ot);
 
+void GRAPHEDIT_OT_keyframes_click_insert(struct wmOperatorType *ot);
+
 void GRAPHEDIT_OT_keyframes_copy(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_keyframes_paste(struct wmOperatorType *ot);
 

Modified: 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_graph/graph_ops.c  
2009-04-06 11:21:47 UTC (rev 19559)
+++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_ops.c  
2009-04-06 12:07:33 UTC (rev 19560)
@@ -125,6 +125,8 @@
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_copy);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_paste);
        
+       WM_operatortype_append(GRAPHEDIT_OT_keyframes_click_insert);
+       
        //TODO: insertkey...
        
        /* F-Curve Modifiers */
@@ -189,7 +191,7 @@
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_duplicate", DKEY, 
KM_PRESS, KM_SHIFT, 0);
        
                /* insertkey */
-       // TODO..
+       WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_click_insert", 
LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
        
                /* copy/paste */
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_copy", CKEY, 
KM_PRESS, KM_CTRL, 0);


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

Reply via email to