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