diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-06-27 11:51:52 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-06-27 11:51:52 +0400 |
commit | a1abdf1c1c59f908684001d1d9b0b4bbc392cca7 (patch) | |
tree | 862dda5356e2b532a86bb1774514e193b8ed3a10 /source/blender/editors/armature | |
parent | 93bb6238e0c6b7ea008776f4e1c3958ef5382c09 (diff) |
fix [#27778] Set Bone Flags - No Scale - Toggle seems not to work.
Toggling options on the selection is better done as a generic operator.
Replace ARMATURE_OT_flags_set and POSE_OT_flags_set with WM_OT_context_collection_boolean_set and use menus to access it with specific settings.
This way its easy make a key shortcut which toggles any boolean on any collection - sequences, metaballs, objects, bones etc.
Diffstat (limited to 'source/blender/editors/armature')
-rw-r--r-- | source/blender/editors/armature/armature_intern.h | 4 | ||||
-rw-r--r-- | source/blender/editors/armature/armature_ops.c | 24 | ||||
-rw-r--r-- | source/blender/editors/armature/editarmature.c | 123 |
3 files changed, 7 insertions, 144 deletions
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 82decf8d1cf..85da7a212c9 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -79,8 +79,6 @@ void ARMATURE_OT_separate(struct wmOperatorType *ot); void ARMATURE_OT_autoside_names(struct wmOperatorType *ot); void ARMATURE_OT_flip_names(struct wmOperatorType *ot); -void ARMATURE_OT_flags_set(struct wmOperatorType *ot); - void ARMATURE_OT_layers_show_all(struct wmOperatorType *ot); void ARMATURE_OT_armature_layers(struct wmOperatorType *ot); void ARMATURE_OT_bone_layers(struct wmOperatorType *ot); @@ -125,8 +123,6 @@ void POSE_OT_flip_names(struct wmOperatorType *ot); void POSE_OT_quaternions_flip(struct wmOperatorType *ot); -void POSE_OT_flags_set(struct wmOperatorType *ot); - void POSE_OT_armature_layers(struct wmOperatorType *ot); void POSE_OT_bone_layers(struct wmOperatorType *ot); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 545cff82483..7bc9bb48a4c 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -85,8 +85,6 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_autoside_names); WM_operatortype_append(ARMATURE_OT_flip_names); - WM_operatortype_append(ARMATURE_OT_flags_set); - WM_operatortype_append(ARMATURE_OT_layers_show_all); WM_operatortype_append(ARMATURE_OT_armature_layers); WM_operatortype_append(ARMATURE_OT_bone_layers); @@ -141,8 +139,6 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_quaternions_flip); - WM_operatortype_append(POSE_OT_flags_set); - WM_operatortype_append(POSE_OT_armature_layers); WM_operatortype_append(POSE_OT_bone_layers); @@ -268,12 +264,9 @@ void ED_keymap_armature(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); /* set flags */ - kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "mode", 2); // toggle - kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "mode", 1); // enable - kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); - RNA_enum_set(kmi->ptr, "mode", 0); // clear + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_toggle", WKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_enable", WKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_disable", WKEY, KM_PRESS, KM_ALT, 0); /* armature/bone layers */ WM_keymap_add_item(keymap, "ARMATURE_OT_layers_show_all", ACCENTGRAVEKEY, KM_PRESS, KM_CTRL, 0); @@ -349,13 +342,10 @@ void ED_keymap_armature(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "VIEW3D_MT_pose_group", GKEY, KM_PRESS, KM_CTRL, 0); /* set flags */ - kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "mode", 2); // toggle - kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "mode", 1); // enable - kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); - RNA_enum_set(kmi->ptr, "mode", 0); // clear - + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_toggle", WKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_enable", WKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_disable", WKEY, KM_PRESS, KM_ALT, 0); + /* armature/bone layers */ WM_keymap_add_item(keymap, "ARMATURE_OT_layers_show_all", ACCENTGRAVEKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "POSE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index abf08393544..20352206121 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -1352,30 +1352,6 @@ static void *get_nearest_bone (bContext *C, short findunsel, int x, int y) return NULL; } -/* helper for setflag_sel_bone() */ -static void bone_setflag (int *bone, int flag, short mode) -{ - if (bone && flag) { - /* exception for inverse flags */ - if (flag == BONE_NO_DEFORM) { - if (mode == 2) - *bone |= flag; - else if (mode == 1) - *bone &= ~flag; - else - *bone ^= flag; - } - else { - if (mode == 2) - *bone &= ~flag; - else if (mode == 1) - *bone |= flag; - else - *bone ^= flag; - } - } -} - /* Get the first available child of an editbone */ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_visibility) { @@ -1396,105 +1372,6 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_ return chbone; } -/* callback for posemode setflag */ -static int pose_setflag_exec (bContext *C, wmOperator *op) -{ - int flag= RNA_enum_get(op->ptr, "type"); - int mode= RNA_enum_get(op->ptr, "mode"); - - /* loop over all selected pchans */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) - { - bone_setflag(&pchan->bone->flag, flag, mode); - } - CTX_DATA_END; - - /* note, notifier might evolve */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ED_object_pose_armature(CTX_data_active_object(C))); - - return OPERATOR_FINISHED; -} - -/* callback for editbones setflag */ -static int armature_bones_setflag_exec (bContext *C, wmOperator *op) -{ - int flag= RNA_enum_get(op->ptr, "type"); - int mode= RNA_enum_get(op->ptr, "mode"); - - /* loop over all selected pchans */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_bones) - { - bone_setflag(&ebone->flag, flag, mode); - } - CTX_DATA_END; - - /* note, notifier might evolve */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_edit_object(C)); - - return OPERATOR_FINISHED; -} - -/* settings that can be changed */ -static EnumPropertyItem prop_bone_setting_types[] = { - {BONE_DRAWWIRE, "DRAWWIRE", 0, "Draw Wire", ""}, - {BONE_NO_DEFORM, "DEFORM", 0, "Deform", ""}, - {BONE_MULT_VG_ENV, "MULT_VG", 0, "Multiply Vertex Groups", ""}, - {BONE_HINGE, "HINGE", 0, "Hinge", ""}, - {BONE_NO_SCALE, "NO_SCALE", 0, "No Scale", ""}, - {BONE_EDITMODE_LOCKED, "LOCKED", 0, "Locked", "(For EditMode only)"}, - {0, NULL, 0, NULL, NULL} -}; - -/* ways that settings can be changed */ -static EnumPropertyItem prop_bone_setting_modes[] = { - {0, "CLEAR", 0, "Clear", ""}, - {1, "ENABLE", 0, "Enable", ""}, - {2, "TOGGLE", 0, "Toggle", ""}, - {0, NULL, 0, NULL, NULL} -}; - - -void ARMATURE_OT_flags_set (wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Set Bone Flags"; - ot->idname= "ARMATURE_OT_flags_set"; - ot->description= "Set flags for armature bones"; - - /* callbacks */ - ot->invoke= WM_menu_invoke; - ot->exec= armature_bones_setflag_exec; - ot->poll= ED_operator_editarmature; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - /* properties */ - ot->prop= RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", ""); - RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", ""); -} - -void POSE_OT_flags_set (wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Set Bone Flags"; - ot->idname= "POSE_OT_flags_set"; - ot->description= "Set flags for armature bones"; - - /* callbacks */ - ot->invoke= WM_menu_invoke; - ot->exec= pose_setflag_exec; - ot->poll= ED_operator_posemode; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - /* properties */ - ot->prop= RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", ""); - RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", ""); -} - - /* **************** END PoseMode & EditMode *************************** */ /* **************** Posemode stuff ********************** */ |