[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