diff options
-rw-r--r-- | source/blender/include/BIF_editarmature.h | 4 | ||||
-rw-r--r-- | source/blender/src/editarmature.c | 26 | ||||
-rw-r--r-- | source/blender/src/header_view3d.c | 4 | ||||
-rw-r--r-- | source/blender/src/outliner.c | 12 | ||||
-rw-r--r-- | source/blender/src/space.c | 4 |
5 files changed, 32 insertions, 18 deletions
diff --git a/source/blender/include/BIF_editarmature.h b/source/blender/include/BIF_editarmature.h index a48ca3bbe82..1bf40393e5f 100644 --- a/source/blender/include/BIF_editarmature.h +++ b/source/blender/include/BIF_editarmature.h @@ -81,8 +81,8 @@ void docentre_armature (struct Object *ob, int centremode); void clear_armature(struct Object *ob, char mode); void delete_armature(void); -void deselectall_armature(int toggle); -void deselectall_posearmature (struct Object *ob, int test); +void deselectall_armature(int toggle, int doundo); +void deselectall_posearmature (struct Object *ob, int test, int doundo); int draw_armature(struct Base *base, int dt); void extrude_armature(int forked); void subdivide_armature(void); diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c index 8f8b0353489..742746d0d09 100644 --- a/source/blender/src/editarmature.c +++ b/source/blender/src/editarmature.c @@ -1093,7 +1093,7 @@ void mouse_armature(void) if (nearBone) { if (!(G.qual & LR_SHIFTKEY)) { - deselectall_armature(0); + deselectall_armature(0, 0); } /* by definition the non-root connected bones have no root point drawn, @@ -1214,7 +1214,7 @@ void load_editArmature(void) toggle==1: swap toggle==2: only active tag */ -void deselectall_armature(int toggle) +void deselectall_armature(int toggle, int doundo) { bArmature *arm= G.obedit->data; EditBone *eBone; @@ -1255,6 +1255,10 @@ void deselectall_armature(int toggle) allqueue(REDRAWOOPS, 0); countall(); // flushes selection! + if (doundo) { + if (sel==1) BIF_undo_push("Select All"); + else BIF_undo_push("Deselect All"); + } } void auto_align_armature(void) @@ -1403,7 +1407,7 @@ static void add_primitive_bone(Object *ob) Mat3MulMat3(totmat, obmat, viewmat); Mat3Inv(imat, totmat); - deselectall_armature(0); + deselectall_armature(0, 0); /* Create a bone */ bone= add_editbone("Bone"); @@ -1472,7 +1476,7 @@ void addvert_armature(void) to_root= 1; } - deselectall_armature(0); + deselectall_armature(0, 0); /* we re-use code for mirror editing... */ flipbone= NULL; @@ -1637,6 +1641,7 @@ void hide_selected_armature_bones(void) countall(); allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWBUTSEDIT, 0); + BIF_undo_push("Hide Bones"); } void hide_unselected_armature_bones(void) @@ -1656,6 +1661,7 @@ void hide_unselected_armature_bones(void) countall(); allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWBUTSEDIT, 0); + BIF_undo_push("Reveal Bones"); } void show_all_armature_bones(void) @@ -2020,6 +2026,7 @@ void subdivide_armature(void) } } } + BIF_undo_push("Subdivide"); } /* ***************** Pose tools ********************* */ @@ -2081,7 +2088,7 @@ int do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits) if (nearBone) { /* since we do unified select, we don't shift+select a bone if the armature object was not active yet */ if (!(G.qual & LR_SHIFTKEY) || base!=BASACT){ - deselectall_posearmature(ob, 0); + deselectall_posearmature(ob, 0, 0); nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); select_actionchannel_by_name(ob->action, nearBone->name, 1); } @@ -2132,7 +2139,7 @@ int do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits) test==1: swap select test==2: only clear active tag */ -void deselectall_posearmature (Object *ob, int test) +void deselectall_posearmature (Object *ob, int test, int doundo) { bArmature *arm; bPoseChannel *pchan; @@ -2176,6 +2183,11 @@ void deselectall_posearmature (Object *ob, int test) allqueue(REDRAWACTION, 0); countall(); + + if (doundo) { + if (selectmode==1) BIF_undo_push("Select All"); + else BIF_undo_push("Deselect All"); + } } @@ -2540,6 +2552,7 @@ void hide_unselected_pose_bones(void) allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWBUTSEDIT, 0); + BIF_undo_push("Hide Bone"); } static int show_pose_bone(Object *ob, Bone *bone, void *ptr) @@ -2571,6 +2584,7 @@ void show_all_pose_bones(void) allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWBUTSEDIT, 0); + BIF_undo_push("Show Bone"); } diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index d7c8db7fedb..66f69ac3a78 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -1246,7 +1246,7 @@ static void do_view3d_select_armaturemenu(void *arg, int event) borderselect(); break; case 2: /* Select/Deselect all */ - deselectall_armature(1); + deselectall_armature(1, 1); break; case 3: /* Select Parent(s) */ select_bone_parent(); @@ -1292,7 +1292,7 @@ static void do_view3d_select_pose_armaturemenu(void *arg, int event) borderselect(); break; case 2: /* Select/Deselect all */ - deselectall_posearmature(OBACT, 1); + deselectall_posearmature(OBACT, 1, 1); break; case 3: pose_select_constraint_target(); diff --git a/source/blender/src/outliner.c b/source/blender/src/outliner.c index 8bb2797405b..6b777377a0f 100644 --- a/source/blender/src/outliner.c +++ b/source/blender/src/outliner.c @@ -1600,8 +1600,8 @@ static int tree_element_active_posechannel(TreeElement *te, TreeStoreElem *tsele if(set) { if(!(pchan->bone->flag & BONE_HIDDEN_P)) { - if(G.qual & LR_SHIFTKEY) deselectall_posearmature(ob, 2); // 2 = clear active tag - else deselectall_posearmature(ob, 0); // 0 = deselect + if(G.qual & LR_SHIFTKEY) deselectall_posearmature(ob, 2, 0); // 2 = clear active tag + else deselectall_posearmature(ob, 0, 0); // 0 = deselect pchan->bone->flag |= BONE_SELECTED|BONE_ACTIVE; allqueue(REDRAWVIEW3D, 0); @@ -1624,8 +1624,8 @@ static int tree_element_active_bone(TreeElement *te, TreeStoreElem *tselem, int if(set) { if(!(bone->flag & BONE_HIDDEN_P)) { - if(G.qual & LR_SHIFTKEY) deselectall_posearmature(OBACT, 2); // 2 is clear active tag - else deselectall_posearmature(OBACT, 0); + if(G.qual & LR_SHIFTKEY) deselectall_posearmature(OBACT, 2, 0); // 2 is clear active tag + else deselectall_posearmature(OBACT, 0, 0); bone->flag |= BONE_SELECTED|BONE_ACTIVE; allqueue(REDRAWVIEW3D, 0); @@ -1652,8 +1652,8 @@ static int tree_element_active_ebone(TreeElement *te, TreeStoreElem *tselem, int if(set) { if(!(ebone->flag & BONE_HIDDEN_A)) { - if(G.qual & LR_SHIFTKEY) deselectall_armature(2); // only clear active tag - else deselectall_armature(0); // deselect + if(G.qual & LR_SHIFTKEY) deselectall_armature(2, 0); // only clear active tag + else deselectall_armature(0, 0); // deselect ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL|BONE_ACTIVE; // flush to parent? diff --git a/source/blender/src/space.c b/source/blender/src/space.c index 4162f37e7d6..0c0299c0f6b 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -1556,10 +1556,10 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt) else if(G.obedit->type==OB_LATTICE) deselectall_Latt(); else if(G.obedit->type==OB_ARMATURE) - deselectall_armature(1); /* 1 == toggle */ + deselectall_armature(1, 1); /* 1 == toggle */ } else if (ob && (ob->flag & OB_POSEMODE)){ - deselectall_posearmature(ob, 1); + deselectall_posearmature(ob, 1, 1); } else { if(G.f & G_FACESELECT) deselectall_tface(); |