From 48d7cf680ebe8ea7c09ef3e0e4abd1dc93d3fa5f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 3 Jul 2018 15:44:56 +0200 Subject: Keymap: Select/De-Select support for anim-editors Also update menu items, adding select/de-select. --- source/blender/editors/space_graph/graph_intern.h | 2 +- source/blender/editors/space_graph/graph_ops.c | 12 +++++---- source/blender/editors/space_graph/graph_select.c | 30 +++++++++++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/space_graph') diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index c50e0497519..398561927dd 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -58,7 +58,7 @@ void graph_draw_ghost_curves(struct bAnimContext *ac, struct SpaceIpo *sipo, str void deselect_graph_keys(struct bAnimContext *ac, bool test, short sel, bool do_channels); -void GRAPH_OT_select_all_toggle(struct wmOperatorType *ot); +void GRAPH_OT_select_all(struct wmOperatorType *ot); void GRAPH_OT_select_border(struct wmOperatorType *ot); void GRAPH_OT_select_lasso(struct wmOperatorType *ot); void GRAPH_OT_select_circle(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index 8ac2c61b8e9..5e269a9c99d 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -427,7 +427,7 @@ void graphedit_operatortypes(void) /* keyframes */ /* selection */ WM_operatortype_append(GRAPH_OT_clickselect); - WM_operatortype_append(GRAPH_OT_select_all_toggle); + WM_operatortype_append(GRAPH_OT_select_all); WM_operatortype_append(GRAPH_OT_select_border); WM_operatortype_append(GRAPH_OT_select_lasso); WM_operatortype_append(GRAPH_OT_select_circle); @@ -550,10 +550,12 @@ static void graphedit_keymap_keyframes(wmKeyConfig *keyconf, wmKeyMap *keymap) RNA_enum_set(kmi->ptr, "mode", GRAPHKEYS_LRSEL_RIGHT); /* deselect all */ - kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); - RNA_boolean_set(kmi->ptr, "invert", false); - kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0); - RNA_boolean_set(kmi->ptr, "invert", true); + kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_all", AKEY, KM_PRESS, 0, 0); + RNA_enum_set(kmi->ptr, "action", SEL_SELECT); + kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_all", AKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "action", SEL_DESELECT); + kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "action", SEL_INVERT); /* borderselect */ kmi = WM_keymap_add_item(keymap, "GRAPH_OT_select_border", BKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 9a6b733a5ff..e91bb192d3c 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -162,10 +162,24 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op) ale_active = get_active_fcurve_channel(&ac); /* 'standard' behavior - check if selected, then apply relevant selection */ - if (RNA_boolean_get(op->ptr, "invert")) - deselect_graph_keys(&ac, 0, SELECT_INVERT, true); - else - deselect_graph_keys(&ac, 1, SELECT_ADD, true); + const int action = RNA_enum_get(op->ptr, "action"); + switch (action) { + case SEL_TOGGLE: + deselect_graph_keys(&ac, 1, SELECT_ADD, true); + break; + case SEL_SELECT: + deselect_graph_keys(&ac, 0, SELECT_ADD, true); + break; + case SEL_DESELECT: + deselect_graph_keys(&ac, 0, SELECT_SUBTRACT, true); + break; + case SEL_INVERT: + deselect_graph_keys(&ac, 0, SELECT_INVERT, true); + break; + default: + BLI_assert(0); + break; + } /* restore active F-Curve... */ if (ale_active) { @@ -186,11 +200,11 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_select_all_toggle(wmOperatorType *ot) +void GRAPH_OT_select_all(wmOperatorType *ot) { /* identifiers */ ot->name = "Select All"; - ot->idname = "GRAPH_OT_select_all_toggle"; + ot->idname = "GRAPH_OT_select_all"; ot->description = "Toggle selection of all keyframes"; /* api callbacks */ @@ -200,8 +214,8 @@ void GRAPH_OT_select_all_toggle(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - /* props */ - ot->prop = RNA_def_boolean(ot->srna, "invert", 0, "Invert", ""); + /* properties */ + WM_operator_properties_select_all(ot); } /* ******************** Border Select Operator **************************** */ -- cgit v1.2.3