diff options
author | Roland Hess <me@harkyman.com> | 2009-02-11 19:17:34 +0300 |
---|---|---|
committer | Roland Hess <me@harkyman.com> | 2009-02-11 19:17:34 +0300 |
commit | f3c67b070fc6baa18cd84aee26170d8ac6ee98ab (patch) | |
tree | 7ff7971ab83c8861862f0ab4bb21f2d934e26ac7 /source | |
parent | 1a039aaf71da9daaa2c53fe23467532211f8d896 (diff) |
First operator done as a test and to get to know the ropes. "Select Parent" in pose mode. Had to move the command to Shift-P, as naked P is taken up by some crazy person's script command.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/armature/armature_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/armature/armature_ops.c | 4 | ||||
-rw-r--r-- | source/blender/editors/armature/editarmature.c | 37 |
3 files changed, 42 insertions, 0 deletions
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 2e021c2f4ae..a6fa50cfc6a 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -49,6 +49,7 @@ void POSE_OT_rot_clear(struct wmOperatorType *ot); void POSE_OT_loc_clear(struct wmOperatorType *ot); void POSE_OT_scale_clear(struct wmOperatorType *ot); void POSE_OT_de_select_all(struct wmOperatorType *ot); +void POSE_OT_select_parent(struct wmOperatorType *ot); #endif /* ED_ARMATURE_INTERN_H */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 65345094720..5f482e13183 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -129,6 +129,8 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_scale_clear); WM_operatortype_append(POSE_OT_de_select_all); + + WM_operatortype_append(POSE_OT_select_parent); WM_operatortype_append(ARMATURE_OT_test); // XXX temp test for context iterators... to be removed } @@ -172,5 +174,7 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "POSE_OT_de_select_all", AKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "POSE_OT_select_parent", PKEY, KM_PRESS, KM_SHIFT, 0); } diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index e18497c42c8..125f9bb889d 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -4421,6 +4421,43 @@ void POSE_OT_de_select_all(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +static int pose_select_parent_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + bArmature *arm= ob->data; + bPoseChannel *pchan,*parent; + + /* Determine if there is an active bone */ + pchan=CTX_data_active_pchan(C); + if (pchan) { + parent=pchan->parent; + if ((parent) && !(parent->bone->flag & BONE_HIDDEN_P)) { + parent->bone->flag |= BONE_SELECTED; + parent->bone->flag |= BONE_ACTIVE; + pchan->bone->flag &= ~BONE_ACTIVE; + } + } + + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, NULL); + + return OPERATOR_FINISHED; +} + +void POSE_OT_select_parent(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "select parent bone"; + ot->idname= "POSE_OT_select_parent"; + + /* api callbacks */ + ot->exec= pose_select_parent_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + +} /* ************* hide/unhide pose bones ******************* */ static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr) |