Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / armature / armature_relations.c
index 91f8a87..5d6c383 100644 (file)
@@ -110,7 +110,7 @@ static void joined_armature_fix_links_constraints(
                        bActionConstraint *data = con->data;
 
                        if (data->act) {
-                               BKE_action_fix_paths_rename(&tarArm->id, data->act, "pose.bones[", 
+                               BKE_action_fix_paths_rename(&tarArm->id, data->act, "pose.bones[",
                                                            pchan->name, curbone->name, 0, 0, false);
                        }
                }
@@ -122,7 +122,7 @@ static void joined_armature_fix_links_constraints(
 typedef struct tJoinArmature_AdtFixData {
        Object *srcArm;
        Object *tarArm;
-       
+
        GHash *names_map;
 } tJoinArmature_AdtFixData;
 
@@ -135,34 +135,34 @@ static void joined_armature_fix_animdata_cb(ID *id, FCurve *fcu, void *user_data
        tJoinArmature_AdtFixData *afd = (tJoinArmature_AdtFixData *)user_data;
        ID *src_id = &afd->srcArm->id;
        ID *dst_id = &afd->tarArm->id;
-       
+
        GHashIterator gh_iter;
-       
+
        /* Fix paths - If this is the target object, it will have some "dirty" paths */
        if ((id == src_id) && strstr(fcu->rna_path, "pose.bones[")) {
                GHASH_ITER(gh_iter, afd->names_map) {
                        const char *old_name = BLI_ghashIterator_getKey(&gh_iter);
                        const char *new_name = BLI_ghashIterator_getValue(&gh_iter);
-                       
+
                        /* only remap if changed; this still means there will be some waste if there aren't many drivers/keys */
                        if (!STREQ(old_name, new_name) && strstr(fcu->rna_path, old_name)) {
                                fcu->rna_path = BKE_animsys_fix_rna_path_rename(id, fcu->rna_path, "pose.bones",
                                                                                old_name, new_name, 0, 0, false);
-                               
-                               /* we don't want to apply a second remapping on this driver now, 
+
+                               /* we don't want to apply a second remapping on this driver now,
                                 * so stop trying names, but keep fixing drivers
                                 */
                                break;
                        }
                }
        }
-       
-       
+
+
        /* Driver targets */
        if (fcu->driver) {
                ChannelDriver *driver = fcu->driver;
                DriverVar *dvar;
-               
+
                /* Fix driver references to invalid ID's */
                for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
                        /* only change the used targets, since the others will need fixing manually anyway */
@@ -171,7 +171,7 @@ static void joined_armature_fix_animdata_cb(ID *id, FCurve *fcu, void *user_data
                                /* change the ID's used... */
                                if (dtar->id == src_id) {
                                        dtar->id = dst_id;
-                                       
+
                                        /* also check on the subtarget...
                                         * XXX: We duplicate the logic from drivers_path_rename_fix() here, with our own
                                         *      little twists so that we know that it isn't going to clobber the wrong data
@@ -180,7 +180,7 @@ static void joined_armature_fix_animdata_cb(ID *id, FCurve *fcu, void *user_data
                                                GHASH_ITER(gh_iter, afd->names_map) {
                                                        const char *old_name = BLI_ghashIterator_getKey(&gh_iter);
                                                        const char *new_name = BLI_ghashIterator_getValue(&gh_iter);
-                                                       
+
                                                        /* only remap if changed */
                                                        if (!STREQ(old_name, new_name)) {
                                                                if ((dtar->rna_path) && strstr(dtar->rna_path, old_name)) {
@@ -210,7 +210,7 @@ static void joined_armature_fix_links(Main *bmain, Object *tarArm, Object *srcAr
        Object *ob;
        bPose *pose;
        bPoseChannel *pchant;
-       
+
        /* let's go through all objects in database */
        for (ob = bmain->object.first; ob; ob = ob->id.next) {
                /* do some object-type specific things */
@@ -220,12 +220,12 @@ static void joined_armature_fix_links(Main *bmain, Object *tarArm, Object *srcAr
                                joined_armature_fix_links_constraints(tarArm, srcArm, pchan, curbone, &pchant->constraints);
                        }
                }
-                       
+
                /* fix object-level constraints */
                if (ob != srcArm) {
                        joined_armature_fix_links_constraints(tarArm, srcArm, pchan, curbone, &ob->constraints);
                }
-               
+
                /* See if an object is parented to this armature */
                if (ob->parent && (ob->parent == srcArm)) {
                        /* Is object parented to a bone of this src armature? */
@@ -235,7 +235,7 @@ static void joined_armature_fix_links(Main *bmain, Object *tarArm, Object *srcAr
                                        BLI_strncpy(ob->parsubstr, curbone->name, sizeof(ob->parsubstr));
                                }
                        }
-                       
+
                        /* make tar armature be new parent */
                        ob->parent = tarArm;
                }
@@ -254,13 +254,13 @@ int join_armature_exec(bContext *C, wmOperator *op)
        EditBone *curbone;
        float mat[4][4], oimat[4][4];
        bool ok = false;
-       
+
        /*      Ensure we're not in editmode and that the active object is an armature*/
        if (!ob || ob->type != OB_ARMATURE)
                return OPERATOR_CANCELLED;
        if (!arm || arm->edbo)
                return OPERATOR_CANCELLED;
-       
+
        CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases)
        {
                if (base->object == ob) {
@@ -278,7 +278,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
 
        /* Get editbones of active armature to add editbones to */
        ED_armature_to_edit(arm);
-       
+
        /* get pose of active object and move it out of posemode */
        pose = ob->pose;
        ob->mode &= ~OB_MODE_POSE;
@@ -288,36 +288,36 @@ int join_armature_exec(bContext *C, wmOperator *op)
                if ((base->object->type == OB_ARMATURE) && (base->object != ob)) {
                        tJoinArmature_AdtFixData afd = {NULL};
                        bArmature *curarm = base->object->data;
-                       
+
                        /* we assume that each armature datablock is only used in a single place */
                        BLI_assert(ob->data != base->object->data);
-                       
+
                        /* init callback data for fixing up AnimData links later */
                        afd.srcArm = base->object;
                        afd.tarArm = ob;
                        afd.names_map = BLI_ghash_str_new("join_armature_adt_fix");
-                       
+
                        /* Make a list of editbones in current armature */
                        ED_armature_to_edit(base->object->data);
-                       
+
                        /* Get Pose of current armature */
                        opose = base->object->pose;
                        base->object->mode &= ~OB_MODE_POSE;
                        //BASACT->flag &= ~OB_MODE_POSE;
-                       
+
                        /* Find the difference matrix */
                        invert_m4_m4(oimat, ob->obmat);
                        mul_m4_m4m4(mat, oimat, base->object->obmat);
-                       
+
                        /* Copy bones and posechannels from the object to the edit armature */
                        for (pchan = opose->chanbase.first; pchan; pchan = pchann) {
                                pchann = pchan->next;
                                curbone = ED_armature_ebone_find_name(curarm->edbo, pchan->name);
-                               
+
                                /* Get new name */
                                ED_armature_ebone_unique_name(arm->edbo, curbone->name, NULL);
                                BLI_ghash_insert(afd.names_map, BLI_strdup(pchan->name), curbone->name);
-                               
+
                                /* Transform the bone */
                                {
                                        float premat[4][4];
@@ -325,48 +325,48 @@ int join_armature_exec(bContext *C, wmOperator *op)
                                        float difmat[4][4];
                                        float imat[4][4];
                                        float temp[3][3];
-                                       
+
                                        /* Get the premat */
                                        ED_armature_ebone_to_mat3(curbone, temp);
-                                       
+
                                        unit_m4(premat); /* mul_m4_m3m4 only sets 3x3 part */
                                        mul_m4_m3m4(premat, temp, mat);
-                                       
+
                                        mul_m4_v3(mat, curbone->head);
                                        mul_m4_v3(mat, curbone->tail);
-                                       
+
                                        /* Get the postmat */
                                        ED_armature_ebone_to_mat3(curbone, temp);
                                        copy_m4_m3(postmat, temp);
-                                       
+
                                        /* Find the roll */
                                        invert_m4_m4(imat, premat);
                                        mul_m4_m4m4(difmat, imat, postmat);
-                                       
+
                                        curbone->roll -= atan2f(difmat[2][0], difmat[2][2]);
                                }
-                               
+
                                /* Fix Constraints and Other Links to this Bone and Armature */
                                joined_armature_fix_links(bmain, ob, base->object, pchan, curbone);
-                               
+
                                /* Rename pchan */
                                BLI_strncpy(pchan->name, curbone->name, sizeof(pchan->name));
-                               
+
                                /* Jump Ship! */
                                BLI_remlink(curarm->edbo, curbone);
                                BLI_addtail(arm->edbo, curbone);
-                               
+
                                BLI_remlink(&opose->chanbase, pchan);
                                BLI_addtail(&pose->chanbase, pchan);
                                BKE_pose_channels_hash_free(opose);
                                BKE_pose_channels_hash_free(pose);
                        }
-                       
+
                        /* Fix all the drivers (and animation data) */
                        BKE_fcurves_main_cb(bmain, joined_armature_fix_animdata_cb, &afd);
                        BLI_ghash_free(afd.names_map, MEM_freeN, NULL);
-                       
-                       /* Only copy over animdata now, after all the remapping has been done, 
+
+                       /* Only copy over animdata now, after all the remapping has been done,
                         * so that we don't have to worry about ambiguities re which armature
                         * a bone came from!
                         */
@@ -380,7 +380,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
                                        BKE_animdata_merge_copy(&ob->id, &base->object->id, ADT_MERGECOPY_KEEP_DST, false);
                                }
                        }
-                       
+
                        if (curarm->adt) {
                                if (arm->adt == NULL) {
                                        /* no animdata, so just use a copy of the whole thing */
@@ -391,20 +391,20 @@ int join_armature_exec(bContext *C, wmOperator *op)
                                        BKE_animdata_merge_copy(&arm->id, &curarm->id, ADT_MERGECOPY_KEEP_DST, false);
                                }
                        }
-                       
+
                        /* Free the old object data */
                        ED_object_base_free_and_unlink(bmain, scene, base->object);
                }
        }
        CTX_DATA_END;
-       
+
        DEG_relations_tag_update(bmain);  /* because we removed object(s) */
 
        ED_armature_from_edit(arm);
        ED_armature_edit_free(arm);
 
        WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
-       
+
        return OPERATOR_FINISHED;
 }
 
@@ -417,11 +417,11 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm)
        bPoseChannel *pchan;
        bConstraint *con;
        ListBase *opchans, *npchans;
-       
+
        /* get reference to list of bones in original and new armatures  */
        opchans = &origArm->pose->chanbase;
        npchans = &newArm->pose->chanbase;
-       
+
        /* let's go through all objects in database */
        for (ob = G.main->object.first; ob; ob = ob->id.next) {
                /* do some object-type specific things */
@@ -431,11 +431,11 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm)
                                        const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
                                        ListBase targets = {NULL, NULL};
                                        bConstraintTarget *ct;
-                                       
+
                                        /* constraint targets */
                                        if (cti && cti->get_constraint_targets) {
                                                cti->get_constraint_targets(con, &targets);
-                                               
+
                                                for (ct = targets.first; ct; ct = ct->next) {
                                                        /* any targets which point to original armature are redirected to the new one only if:
                                                         *      - the target isn't origArm/newArm itself
@@ -462,18 +462,18 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm)
                                }
                        }
                }
-                       
+
                /* fix object-level constraints */
                if (ob != origArm) {
                        for (con = ob->constraints.first; con; con = con->next) {
                                const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
                                ListBase targets = {NULL, NULL};
                                bConstraintTarget *ct;
-                               
+
                                /* constraint targets */
                                if (cti && cti->get_constraint_targets) {
                                        cti->get_constraint_targets(con, &targets);
-                                       
+
                                        for (ct = targets.first; ct; ct = ct->next) {
                                                /* any targets which point to original armature are redirected to the new one only if:
                                                 *      - the target isn't origArm/newArm itself
@@ -492,14 +492,14 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm)
                                                        }
                                                }
                                        }
-                                       
+
                                        if (cti->flush_constraint_targets) {
                                                cti->flush_constraint_targets(con, &targets, 0);
                                        }
                                }
                        }
                }
-               
+
                /* See if an object is parented to this armature */
                if (ob->parent && (ob->parent == origArm)) {
                        /* Is object parented to a bone of this src armature? */
@@ -512,31 +512,31 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm)
        }
 }
 
-/* Helper function for armature separating - remove certain bones from the given armature 
+/* Helper function for armature separating - remove certain bones from the given armature
  *     sel: remove selected bones from the armature, otherwise the unselected bones are removed
  *  (ob is not in editmode)
  */
-static void separate_armature_bones(Object *ob, short sel) 
+static void separate_armature_bones(Object *ob, short sel)
 {
        bArmature *arm = (bArmature *)ob->data;
        bPoseChannel *pchan, *pchann;
        EditBone *curbone;
-       
+
        /* make local set of editbones to manipulate here */
        ED_armature_to_edit(arm);
-       
+
        /* go through pose-channels, checking if a bone should be removed */
        for (pchan = ob->pose->chanbase.first; pchan; pchan = pchann) {
                pchann = pchan->next;
                curbone = ED_armature_ebone_find_name(arm->edbo, pchan->name);
-               
+
                /* check if bone needs to be removed */
                if ( (sel && (curbone->flag & BONE_SELECTED)) ||
                     (!sel && !(curbone->flag & BONE_SELECTED)) )
                {
                        EditBone *ebo;
                        bPoseChannel *pchn;
-                       
+
                        /* clear the bone->parent var of any bone that had this as its parent  */
                        for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
                                if (ebo->parent == curbone) {
@@ -545,23 +545,23 @@ static void separate_armature_bones(Object *ob, short sel)
                                        ebo->flag &= ~BONE_CONNECTED;
                                }
                        }
-                       
+
                        /* clear the pchan->parent var of any pchan that had this as its parent */
                        for (pchn = ob->pose->chanbase.first; pchn; pchn = pchn->next) {
                                if (pchn->parent == pchan)
                                        pchn->parent = NULL;
                        }
-                       
+
                        /* free any of the extra-data this pchan might have */
                        BKE_pose_channel_free(pchan);
                        BKE_pose_channels_hash_free(ob->pose);
-                       
+
                        /* get rid of unneeded bone */
                        bone_free(arm, curbone);
                        BLI_freelinkN(&ob->pose->chanbase, pchan);
                }
        }
-       
+
        /* exit editmode (recalculates pchans too) */
        ED_armature_from_edit(ob->data);
        ED_armature_edit_free(ob->data);
@@ -576,14 +576,14 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
        Object *obedit = CTX_data_edit_object(C);
        Object *oldob, *newob;
        Base *oldbase, *newbase;
-       
+
        /* sanity checks */
        if (obedit == NULL)
                return OPERATOR_CANCELLED;
-       
+
        /* set wait cursor in case this takes a while */
        WM_cursor_wait(1);
-       
+
        /* we are going to do this as follows (unlike every other instance of separate):
         *      1. exit editmode +posemode for active armature/base. Take note of what this is.
         *      2. duplicate base - BASACT is the new one now
@@ -604,16 +604,16 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
                }
        }
        CTX_DATA_END;
-       
+
        /* 1) store starting settings and exit editmode */
        oldob = obedit;
        oldbase = view_layer->basact;
        oldob->mode &= ~OB_MODE_POSE;
        //oldbase->flag &= ~OB_POSEMODE;
-       
+
        ED_armature_from_edit(obedit->data);
        ED_armature_edit_free(obedit->data);
-       
+
        /* 2) duplicate base */
        newbase = ED_object_add_duplicate(bmain, scene, view_layer, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
        DEG_relations_tag_update(bmain);
@@ -625,20 +625,20 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
        /* 3) remove bones that shouldn't still be around on both armatures */
        separate_armature_bones(oldob, 1);
        separate_armature_bones(newob, 0);
-       
-       
+
+
        /* 4) fix links before depsgraph flushes */ // err... or after?
        separated_armature_fix_links(oldob, newob);
-       
+
        DEG_id_tag_update(&oldob->id, OB_RECALC_DATA);  /* this is the original one */
        DEG_id_tag_update(&newob->id, OB_RECALC_DATA);  /* this is the separated one */
-       
-       
+
+
        /* 5) restore original conditions */
        obedit = oldob;
-       
+
        ED_armature_to_edit(obedit->data);
-       
+
        /* parents tips remain selected when connected children are removed. */
        ED_armature_edit_deselect_all(obedit);
 
@@ -646,10 +646,10 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
 
        /* note, notifier might evolve */
        WM_event_add_notifier(C, NC_OBJECT | ND_POSE, obedit);
-       
+
        /* recalc/redraw + cleanup */
        WM_cursor_wait(0);
-       
+
        return OPERATOR_FINISHED;
 }
 
@@ -659,12 +659,12 @@ void ARMATURE_OT_separate(wmOperatorType *ot)
        ot->name = "Separate Bones";
        ot->idname = "ARMATURE_OT_separate";
        ot->description = "Isolate selected bones into a separate armature";
-       
+
        /* callbacks */
        ot->invoke = WM_operator_confirm;
        ot->exec = separate_armature_exec;
        ot->poll = ED_operator_editarmature;
-       
+
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
@@ -688,13 +688,13 @@ static void bone_connect_to_new_parent(ListBase *edbo, EditBone *selbone, EditBo
 {
        EditBone *ebone;
        float offset[3];
-       
+
        if ((selbone->parent) && (selbone->flag & BONE_CONNECTED))
                selbone->parent->flag &= ~(BONE_TIPSEL);
-       
+
        /* make actbone the parent of selbone */
        selbone->parent = actbone;
-       
+
        /* in actbone tree we cannot have a loop */
        for (ebone = actbone->parent; ebone; ebone = ebone->parent) {
                if (ebone->parent == selbone) {
@@ -702,21 +702,21 @@ static void bone_connect_to_new_parent(ListBase *edbo, EditBone *selbone, EditBo
                        ebone->flag &= ~BONE_CONNECTED;
                }
        }
-       
+
        if (mode == ARM_PAR_CONNECT) {
                /* Connected: Child bones will be moved to the parent tip */
                selbone->flag |= BONE_CONNECTED;
                sub_v3_v3v3(offset, actbone->tail, selbone->head);
-               
+
                copy_v3_v3(selbone->head, actbone->tail);
                selbone->rad_head = actbone->rad_tail;
-               
+
                add_v3_v3(selbone->tail, offset);
-               
+
                /* offset for all its children */
                for (ebone = edbo->first; ebone; ebone = ebone->next) {
                        EditBone *par;
-                       
+
                        for (par = ebone->parent; par; par = par->parent) {
                                if (par == selbone) {
                                        add_v3_v3(ebone->head, offset);
@@ -739,14 +739,14 @@ static const EnumPropertyItem prop_editarm_make_parent_types[] = {
        {0, NULL, 0, NULL, NULL}
 };
 
-static int armature_parent_set_exec(bContext *C, wmOperator *op) 
+static int armature_parent_set_exec(bContext *C, wmOperator *op)
 {
        Object *ob = CTX_data_edit_object(C);
        bArmature *arm = (bArmature *)ob->data;
        EditBone *actbone = CTX_data_active_bone(C);
        EditBone *actmirb = NULL;
        short val = RNA_enum_get(op->ptr, "type");
-       
+
        /* there must be an active bone */
        if (actbone == NULL) {
                BKE_report(op->reports, RPT_ERROR, "Operation requires an active bone");
@@ -754,27 +754,27 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op)
        }
        else if (arm->flag & ARM_MIRROR_EDIT) {
                /* For X-Axis Mirror Editing option, we may need a mirror copy of actbone
-                * - if there's a mirrored copy of selbone, try to find a mirrored copy of actbone 
+                * - if there's a mirrored copy of selbone, try to find a mirrored copy of actbone
                 *   (i.e.  selbone="child.L" and actbone="parent.L", find "child.R" and "parent.R").
                 * This is useful for arm-chains, for example parenting lower arm to upper arm
                 * - if there's no mirrored copy of actbone (i.e. actbone = "parent.C" or "parent")
                 *   then just use actbone. Useful when doing upper arm to spine.
                 */
                actmirb = ED_armature_ebone_get_mirrored(arm->edbo, actbone);
-               if (actmirb == NULL) 
+               if (actmirb == NULL)
                        actmirb = actbone;
        }
-       
-       /* if there is only 1 selected bone, we assume that that is the active bone, 
+
+       /* if there is only 1 selected bone, we assume that that is the active bone,
         * since a user will need to have clicked on a bone (thus selecting it) to make it active
         */
        if (CTX_DATA_COUNT(C, selected_editable_bones) <= 1) {
                /* When only the active bone is selected, and it has a parent,
-                * connect it to the parent, as that is the only possible outcome. 
+                * connect it to the parent, as that is the only possible outcome.
                 */
                if (actbone->parent) {
                        bone_connect_to_existing_parent(actbone);
-                       
+
                        if ((arm->flag & ARM_MIRROR_EDIT) && (actmirb->parent))
                                bone_connect_to_existing_parent(actmirb);
                }
@@ -783,16 +783,16 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op)
                /* Parent 'selected' bones to the active one
                 * - the context iterator contains both selected bones and their mirrored copies,
                 *   so we assume that unselected bones are mirrored copies of some selected bone
-                * - since the active one (and/or its mirror) will also be selected, we also need 
+                * - since the active one (and/or its mirror) will also be selected, we also need
                 *  to check that we are not trying to operate on them, since such an operation
                 *      would cause errors
                 */
-               
+
                /* parent selected bones to the active one */
                CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
                {
                        if (ELEM(ebone, actbone, actmirb) == 0) {
-                               if (ebone->flag & BONE_SELECTED) 
+                               if (ebone->flag & BONE_SELECTED)
                                        bone_connect_to_new_parent(arm->edbo, ebone, actbone, val);
                                else
                                        bone_connect_to_new_parent(arm->edbo, ebone, actmirb, val);
@@ -800,11 +800,11 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op)
                }
                CTX_DATA_END;
        }
-       
+
 
        /* note, notifier might evolve */
        WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
-       
+
        return OPERATOR_FINISHED;
 }
 
@@ -814,7 +814,7 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *UNUSED(op), const
        uiPopupMenu *pup = UI_popup_menu_begin(C, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Make Parent"), ICON_NONE);
        uiLayout *layout = UI_popup_menu_layout(pup);
        int allchildbones = 0;
-       
+
        CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
        {
                if (ebone != actbone) {
@@ -824,13 +824,13 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *UNUSED(op), const
        CTX_DATA_END;
 
        uiItemEnumO(layout, "ARMATURE_OT_parent_set", NULL, 0, "type", ARM_PAR_CONNECT);
-       
+
        /* ob becomes parent, make the associated menus */
        if (allchildbones)
                uiItemEnumO(layout, "ARMATURE_OT_parent_set", NULL, 0, "type", ARM_PAR_OFFSET);
-               
+
        UI_popup_menu_end(C, pup);
-       
+
        return OPERATOR_INTERFACE;
 }
 
@@ -840,15 +840,15 @@ void ARMATURE_OT_parent_set(wmOperatorType *ot)
        ot->name = "Make Parent";
        ot->idname = "ARMATURE_OT_parent_set";
        ot->description = "Set the active bone as the parent of the selected bones";
-       
+
        /* api callbacks */
        ot->invoke = armature_parent_set_invoke;
        ot->exec = armature_parent_set_exec;
        ot->poll = ED_operator_editarmature;
-       
+
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-       
+
        RNA_def_enum(ot->srna, "type", prop_editarm_make_parent_types, 0, "ParentType", "Type of parenting");
 }
 
@@ -866,28 +866,28 @@ static void editbone_clear_parent(EditBone *ebone, int mode)
                /* for nice selection */
                ebone->parent->flag &= ~(BONE_TIPSEL);
        }
-       
+
        if (mode == 1) ebone->parent = NULL;
        ebone->flag &= ~BONE_CONNECTED;
 }
 
-static int armature_parent_clear_exec(bContext *C, wmOperator *op) 
+static int armature_parent_clear_exec(bContext *C, wmOperator *op)
 {
        Object *ob = CTX_data_edit_object(C);
        bArmature *arm = (bArmature *)ob->data;
        int val = RNA_enum_get(op->ptr, "type");
-               
+
        CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
        {
                editbone_clear_parent(ebone, val);
        }
        CTX_DATA_END;
-       
+
        ED_armature_edit_sync_selection(arm->edbo);
 
        /* note, notifier might evolve */
        WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
-       
+
        return OPERATOR_FINISHED;
 }
 
@@ -897,15 +897,15 @@ void ARMATURE_OT_parent_clear(wmOperatorType *ot)
        ot->name = "Clear Parent";
        ot->idname = "ARMATURE_OT_parent_clear";
        ot->description = "Remove the parent-child relationship between selected bones and their parents";
-       
+
        /* api callbacks */
        ot->invoke = WM_menu_invoke;
        ot->exec = armature_parent_clear_exec;
        ot->poll = ED_operator_editarmature;
-       
+
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-       
+
        ot->prop = RNA_def_enum(ot->srna, "type", prop_editarm_clear_parent_types, 0, "ClearType", "What way to clear parenting");
 }