[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28011] trunk/blender: Animation Editors: Select Linked Operator
Joshua Leung
aligorith at gmail.com
Mon Apr 5 13:47:56 CEST 2010
Revision: 28011
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28011
Author: aligorith
Date: 2010-04-05 13:47:55 +0200 (Mon, 05 Apr 2010)
Log Message:
-----------
Animation Editors: Select Linked Operator
This operator selects all the keyframes in the same F-Curve as a selected keyframe.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_dopesheet.py
trunk/blender/release/scripts/ui/space_graph.py
trunk/blender/source/blender/editors/space_action/action_intern.h
trunk/blender/source/blender/editors/space_action/action_ops.c
trunk/blender/source/blender/editors/space_action/action_select.c
trunk/blender/source/blender/editors/space_graph/graph_intern.h
trunk/blender/source/blender/editors/space_graph/graph_ops.c
trunk/blender/source/blender/editors/space_graph/graph_select.c
Modified: trunk/blender/release/scripts/ui/space_dopesheet.py
===================================================================
--- trunk/blender/release/scripts/ui/space_dopesheet.py 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/release/scripts/ui/space_dopesheet.py 2010-04-05 11:47:55 UTC (rev 28011)
@@ -124,7 +124,10 @@
layout.operator("action.select_more")
layout.operator("action.select_less")
+ layout.separator()
+ layout.operator("action.select_linked")
+
class DOPESHEET_MT_channel(bpy.types.Menu):
bl_label = "Channel"
Modified: trunk/blender/release/scripts/ui/space_graph.py
===================================================================
--- trunk/blender/release/scripts/ui/space_graph.py 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/release/scripts/ui/space_graph.py 2010-04-05 11:47:55 UTC (rev 28011)
@@ -126,6 +126,9 @@
layout.separator()
layout.operator("graph.select_more")
layout.operator("graph.select_less")
+
+ layout.separator()
+ layout.operator("graph.select_linked")
class GRAPH_MT_channel(bpy.types.Menu):
Modified: trunk/blender/source/blender/editors/space_action/action_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_intern.h 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_intern.h 2010-04-05 11:47:55 UTC (rev 28011)
@@ -56,6 +56,7 @@
void ACTION_OT_select_all_toggle(struct wmOperatorType *ot);
void ACTION_OT_select_border(struct wmOperatorType *ot);
void ACTION_OT_select_column(struct wmOperatorType *ot);
+void ACTION_OT_select_linked(struct wmOperatorType *ot);
void ACTION_OT_select_more(struct wmOperatorType *ot);
void ACTION_OT_select_less(struct wmOperatorType *ot);
void ACTION_OT_clickselect(struct wmOperatorType *ot);
Modified: trunk/blender/source/blender/editors/space_action/action_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_ops.c 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_ops.c 2010-04-05 11:47:55 UTC (rev 28011)
@@ -119,7 +119,10 @@
WM_keymap_add_item(keymap, "ACTION_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "ACTION_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
+ /* select linekd */
+ WM_keymap_add_item(keymap, "ACTION_OT_select_linked", LKEY, KM_PRESS, 0, 0);
+
/* action_edit.c */
/* snap - current frame to selected keys */
// TODO: maybe since this is called jump, we're better to have it on <something>-J?
Modified: trunk/blender/source/blender/editors/space_action/action_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_select.c 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_select.c 2010-04-05 11:47:55 UTC (rev 28011)
@@ -558,6 +558,61 @@
ot->prop= RNA_def_enum(ot->srna, "mode", prop_column_select_types, 0, "Mode", "");
}
+/* ******************** Select Linked Operator *********************** */
+
+static int actkeys_select_linked_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+
+ ListBase anim_data= {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ KeyframeEditFunc ok_cb = ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+ KeyframeEditFunc sel_cb = ANIM_editkeyframes_select(SELECT_ADD);
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* loop through all of the keys and select additional keyframes based on these */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY);
+ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ FCurve *fcu= (FCurve *)ale->key_data;
+
+ /* check if anything selected? */
+ if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, ok_cb, NULL)) {
+ /* select every keyframe in this curve then */
+ ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL);
+ }
+ }
+
+ /* Cleanup */
+ BLI_freelistN(&anim_data);
+
+ /* set notifier that keyframe selection has changed */
+ WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void ACTION_OT_select_linked (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select Linked";
+ ot->idname= "ACTION_OT_select_linked";
+ ot->description = "Select keyframes occurring the same F-Curves as selected ones";
+
+ /* api callbacks */
+ ot->exec= actkeys_select_linked_exec;
+ ot->poll= ED_operator_action_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
+}
+
/* ******************** Select More/Less Operators *********************** */
/* Common code to perform selection */
Modified: trunk/blender/source/blender/editors/space_graph/graph_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_intern.h 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_intern.h 2010-04-05 11:47:55 UTC (rev 28011)
@@ -63,6 +63,7 @@
void GRAPH_OT_select_all_toggle(struct wmOperatorType *ot);
void GRAPH_OT_select_border(struct wmOperatorType *ot);
void GRAPH_OT_select_column(struct wmOperatorType *ot);
+void GRAPH_OT_select_linked(struct wmOperatorType *ot);
void GRAPH_OT_select_more(struct wmOperatorType *ot);
void GRAPH_OT_select_less(struct wmOperatorType *ot);
void GRAPH_OT_clickselect(struct wmOperatorType *ot);
@@ -149,6 +150,7 @@
/* ***************************************** */
/* graph_buttons.c */
+
void GRAPH_OT_properties(struct wmOperatorType *ot);
void graph_buttons_register(struct ARegionType *art);
Modified: trunk/blender/source/blender/editors/space_graph/graph_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_ops.c 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_ops.c 2010-04-05 11:47:55 UTC (rev 28011)
@@ -231,6 +231,7 @@
WM_operatortype_append(GRAPH_OT_select_all_toggle);
WM_operatortype_append(GRAPH_OT_select_border);
WM_operatortype_append(GRAPH_OT_select_column);
+ WM_operatortype_append(GRAPH_OT_select_linked);
WM_operatortype_append(GRAPH_OT_select_more);
WM_operatortype_append(GRAPH_OT_select_less);
@@ -318,7 +319,10 @@
WM_keymap_add_item(keymap, "GRAPH_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "GRAPH_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
+ /* select linked */
+ WM_keymap_add_item(keymap, "GRAPH_OT_select_linked", LKEY, KM_PRESS, 0, 0);
+
/* graph_edit.c */
/* snap - current frame to selected keys */
// TODO: maybe since this is called jump, we're better to have it on <something>-J?
Modified: trunk/blender/source/blender/editors/space_graph/graph_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_select.c 2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_select.c 2010-04-05 11:47:55 UTC (rev 28011)
@@ -547,6 +547,61 @@
ot->prop= RNA_def_enum(ot->srna, "mode", prop_column_select_types, 0, "Mode", "");
}
+/* ******************** Select Linked Operator *********************** */
+
+static int graphkeys_select_linked_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+
+ ListBase anim_data= {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ KeyframeEditFunc ok_cb = ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+ KeyframeEditFunc sel_cb = ANIM_editkeyframes_select(SELECT_ADD);
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* loop through all of the keys and select additional keyframes based on these */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY);
+ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ FCurve *fcu= (FCurve *)ale->key_data;
+
+ /* check if anything selected? */
+ if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, ok_cb, NULL)) {
+ /* select every keyframe in this curve then */
+ ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL);
+ }
+ }
+
+ /* Cleanup */
+ BLI_freelistN(&anim_data);
+
+ /* set notifier that keyframe selection has changed */
+ WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void GRAPH_OT_select_linked (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select Linked";
+ ot->idname= "GRAPH_OT_select_linked";
+ ot->description = "Select keyframes occurring the same F-Curves as selected ones";
+
+ /* api callbacks */
+ ot->exec= graphkeys_select_linked_exec;
+ ot->poll= graphop_visible_keyframes_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
+}
+
/* ******************** Select More/Less Operators *********************** */
/* Common code to perform selection */
More information about the Bf-blender-cvs
mailing list