Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorRoland Hess <me@harkyman.com>2009-02-11 19:17:34 +0300
committerRoland Hess <me@harkyman.com>2009-02-11 19:17:34 +0300
commitf3c67b070fc6baa18cd84aee26170d8ac6ee98ab (patch)
tree7ff7971ab83c8861862f0ab4bb21f2d934e26ac7 /source
parent1a039aaf71da9daaa2c53fe23467532211f8d896 (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.h1
-rw-r--r--source/blender/editors/armature/armature_ops.c4
-rw-r--r--source/blender/editors/armature/editarmature.c37
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)