[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19055] branches/blender2.5/blender/source /blender/editors: DopeSheet/Graph Editor: Restored Duplicate Keyframes operators (Shift-D) for both of them
Joshua Leung
aligorith at gmail.com
Fri Feb 20 12:17:33 CET 2009
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);
More information about the Bf-blender-cvs
mailing list