Revision: 19055
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19055
Author:   aligorith
Date:     2009-02-20 12:17:33 +0100 (Fri, 20 Feb 2009)

Log Message:
-----------
DopeSheet/Graph Editor: Restored Duplicate Keyframes operators (Shift-D) for 
both of them

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/space_action/action_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_action/action_intern.h
    branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
    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_action/action_edit.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_action/action_edit.c   
    2009-02-20 10:39:31 UTC (rev 19054)
+++ 
branches/blender2.5/blender/source/blender/editors/space_action/action_edit.c   
    2009-02-20 11:17:33 UTC (rev 19055)
@@ -72,6 +72,8 @@
 
 #include "UI_view2d.h"
 
+#include "BIF_transform.h"
+
 #include "ED_anim_api.h"
 #include "ED_keyframing.h"
 #include "ED_keyframes_draw.h"
@@ -573,6 +575,83 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
+/* ******************** Duplicate Keyframes Operator ************************* 
*/
+
+static void duplicate_action_keys (bAnimContext *ac)
+{
+       ListBase anim_data = {NULL, NULL};
+       bAnimListElem *ale;
+       int filter;
+       
+       /* filter data */
+       if (ac->datatype == ANIMCONT_GPENCIL)
+               filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT);
+       else
+               filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | 
ANIMFILTER_CURVESONLY);
+       ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+       
+       /* loop through filtered data and delete selected keys */
+       for (ale= anim_data.first; ale; ale= ale->next) {
+               //if (ale->type == ANIMTYPE_GPLAYER)
+               //      delete_gplayer_frames((bGPDlayer *)ale->data);
+               //else
+                       duplicate_fcurve_keys((FCurve *)ale->key_data);
+       }
+       
+       /* free filtered list */
+       BLI_freelistN(&anim_data);
+}
+
+/* ------------------- */
+
+static int actkeys_duplicate_exec(bContext *C, wmOperator *op)
+{
+       bAnimContext ac;
+       
+       /* get editor data */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+               
+       /* duplicate keyframes */
+       duplicate_action_keys(&ac);
+       
+       /* validate keyframes after editing */
+       ANIM_editkeyframes_refresh(&ac);
+       
+       /* set notifier tha things have changed */
+       ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
+       
+       return OPERATOR_FINISHED; // xxx - start transform
+}
+
+static int actkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       actkeys_duplicate_exec(C, op);
+       
+       RNA_int_set(op->ptr, "mode", TFM_TIME_TRANSLATE);
+       WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, 
op->ptr);
+
+       return OPERATOR_FINISHED;
+}
+ 
+void ACT_OT_keyframes_duplicate (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Duplicate Keyframes";
+       ot->idname= "ACT_OT_keyframes_duplicate";
+       
+       /* api callbacks */
+       ot->invoke= actkeys_duplicate_invoke;
+       ot->exec= actkeys_duplicate_exec;
+       ot->poll= ED_operator_areaactive;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       /* to give to transform */
+       RNA_def_int(ot->srna, "mode", TFM_TIME_TRANSLATE, 0, INT_MAX, "Mode", 
"", 0, INT_MAX);
+}
+
 /* ******************** Delete Keyframes Operator ************************* */
 
 static void delete_action_keys (bAnimContext *ac)

Modified: 
branches/blender2.5/blender/source/blender/editors/space_action/action_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_action/action_intern.h 
    2009-02-20 10:39:31 UTC (rev 19054)
+++ 
branches/blender2.5/blender/source/blender/editors/space_action/action_intern.h 
    2009-02-20 11:17:33 UTC (rev 19055)
@@ -83,6 +83,7 @@
 void ACT_OT_keyframes_copy(struct wmOperatorType *ot);
 void ACT_OT_keyframes_paste(struct wmOperatorType *ot);
 
+void ACT_OT_keyframes_duplicate(struct wmOperatorType *ot);
 void ACT_OT_keyframes_delete(struct wmOperatorType *ot);
 void ACT_OT_keyframes_clean(struct wmOperatorType *ot);
 void ACT_OT_keyframes_sample(struct wmOperatorType *ot);

Modified: 
branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c    
    2009-02-20 10:39:31 UTC (rev 19054)
+++ 
branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c    
    2009-02-20 11:17:33 UTC (rev 19055)
@@ -78,6 +78,7 @@
        WM_operatortype_append(ACT_OT_keyframes_sample);
        WM_operatortype_append(ACT_OT_keyframes_clean);
        WM_operatortype_append(ACT_OT_keyframes_delete);
+       WM_operatortype_append(ACT_OT_keyframes_duplicate);
        WM_operatortype_append(ACT_OT_keyframes_copy);
        WM_operatortype_append(ACT_OT_keyframes_paste);
        
@@ -131,6 +132,8 @@
        WM_keymap_add_item(keymap, "ACT_OT_keyframes_delete", XKEY, KM_PRESS, 
0, 0);
        WM_keymap_add_item(keymap, "ACT_OT_keyframes_delete", DELKEY, KM_PRESS, 
0, 0);
        
+       WM_keymap_add_item(keymap, "ACT_OT_keyframes_duplicate", DKEY, 
KM_PRESS, KM_SHIFT, 0);
+       
                /* copy/paste */
        WM_keymap_add_item(keymap, "ACT_OT_keyframes_copy", CKEY, KM_PRESS, 
KM_CTRL, 0);
        WM_keymap_add_item(keymap, "ACT_OT_keyframes_paste", VKEY, KM_PRESS, 
KM_CTRL, 0);

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-02-20 10:39:31 UTC (rev 19054)
+++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_edit.c 
2009-02-20 11:17:33 UTC (rev 19055)
@@ -72,6 +72,8 @@
 
 #include "UI_view2d.h"
 
+#include "BIF_transform.h"
+
 #include "ED_anim_api.h"
 #include "ED_keyframing.h"
 #include "ED_keyframes_draw.h"
@@ -558,6 +560,77 @@
 
 #endif // XXX code to be sanitied for new system
 
+/* ******************** Duplicate Keyframes Operator ************************* 
*/
+
+static void duplicate_graph_keys (bAnimContext *ac)
+{
+       ListBase anim_data = {NULL, NULL};
+       bAnimListElem *ale;
+       int filter;
+       
+       /* filter data */
+       filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| 
ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);
+       ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+       
+       /* loop through filtered data and delete selected keys */
+       for (ale= anim_data.first; ale; ale= ale->next) {
+               duplicate_fcurve_keys((FCurve *)ale->key_data);
+       }
+       
+       /* free filtered list */
+       BLI_freelistN(&anim_data);
+}
+
+/* ------------------- */
+
+static int graphkeys_duplicate_exec(bContext *C, wmOperator *op)
+{
+       bAnimContext ac;
+       
+       /* get editor data */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+               
+       /* duplicate keyframes */
+       duplicate_graph_keys(&ac);
+       
+       /* validate keyframes after editing */
+       ANIM_editkeyframes_refresh(&ac);
+       
+       /* set notifier tha things have changed */
+       ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
+       
+       return OPERATOR_FINISHED;
+}
+
+static int graphkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       graphkeys_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 GRAPHEDIT_OT_keyframes_duplicate (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Duplicate Keyframes";
+       ot->idname= "GRAPHEDIT_OT_keyframes_duplicate";
+       
+       /* api callbacks */
+       ot->invoke= graphkeys_duplicate_invoke;
+       ot->exec= graphkeys_duplicate_exec;
+       ot->poll= ED_operator_areaactive;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       /* to give to transform */
+       RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 
0, INT_MAX);
+}
+
 /* ******************** Delete Keyframes Operator ************************* */
 
 static void delete_graph_keys (bAnimContext *ac)

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-02-20 10:39:31 UTC (rev 19054)
+++ 
branches/blender2.5/blender/source/blender/editors/space_graph/graph_intern.h   
    2009-02-20 11:17:33 UTC (rev 19055)
@@ -78,6 +78,7 @@
 void GRAPHEDIT_OT_keyframes_copy(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_keyframes_paste(struct wmOperatorType *ot);
 
+void GRAPHEDIT_OT_keyframes_duplicate(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_keyframes_delete(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_keyframes_clean(struct wmOperatorType *ot);
 void GRAPHEDIT_OT_keyframes_sample(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-02-20 10:39:31 UTC (rev 19054)
+++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_ops.c  
2009-02-20 11:17:33 UTC (rev 19055)
@@ -118,6 +118,7 @@
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_smooth);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_clean);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_delete);
+       WM_operatortype_append(GRAPHEDIT_OT_keyframes_duplicate);
 #if 0 // XXX code to be sanitied for new system        
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_copy);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_paste);
@@ -131,7 +132,7 @@
        /* view */
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_view_toggle_handles", HKEY, 
KM_PRESS, KM_CTRL, 0);
        
-       /* iposelect.c - selection tools */
+       /* graph_select.c - selection tools */
                /* click-select */
                // TODO: column to alt, left-right to ctrl (for select-linked 
consistency)
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", 
SELECTMOUSE, KM_PRESS, 0, 0);
@@ -155,7 +156,7 @@
        RNA_enum_set(WM_keymap_add_item(keymap, 
"GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", 
GRAPHKEYS_COLUMNSEL_MARKERS_BETWEEN);
        
        
-       /* ipo_edit.c */
+       /* graph_edit.c */
                /* snap - current frame to selected keys */
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_cfrasnap", SKEY, 
KM_PRESS, KM_CTRL|KM_SHIFT, 0);
                
@@ -176,6 +177,8 @@
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_delete", XKEY, 
KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_delete", DELKEY, 
KM_PRESS, 0, 0);
        
+       WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_duplicate", DKEY, 
KM_PRESS, KM_SHIFT, 0);
+       
 #if 0 // XXX code to be sanitied for new system
                /* copy/paste */
        WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_copy", CKEY, 
KM_PRESS, KM_CTRL, 0);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to