2.5 - Made more operators for constraint buttons
authorJoshua Leung <aligorith@gmail.com>
Sat, 11 Jul 2009 12:54:17 +0000 (12:54 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sat, 11 Jul 2009 12:54:17 +0000 (12:54 +0000)
* Move Up/Down and Delete are now operators
* Made TrackTo constraint use expanded enum toggles for up axis too.
--> BUG ALERT: specifying name and expand in the arguments to itemR doesn't work (name gets skipped)

release/ui/buttons_object_constraint.py
source/blender/editors/include/ED_object.h
source/blender/editors/interface/interface_templates.c
source/blender/editors/object/editconstraint.c
source/blender/editors/object/object_intern.h
source/blender/editors/object/object_ops.c

index 142e9045ec788333ef3e99d9f7739dcf8bb61343..12aed082381879054381f9dc2bbf4c8f4e4fdf25 100644 (file)
@@ -109,7 +109,6 @@ class ConstraintButtonsPanel(bpy.types.Panel):
                sub.itemR(con, "sizey", text="Y")
                sub.itemR(con, "sizez", text="Z")
                
-               # Missing
                row = layout.row()
                row.itemO("CONSTRAINT_OT_childof_set_inverse")
                row.itemO("CONSTRAINT_OT_childof_clear_inverse")
@@ -122,6 +121,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
                row.itemR(con, "track", expand=True)
                
                row = layout.row()
+               #row.itemR(con, "up", text="Up", expand=True) # XXX: up and expand don't play nice together
                row.itemR(con, "up", text="Up")
                row.itemR(con, "target_z")
                
index 83bcd6a517620c8bce37e938809677c539766ac2..f7dcc7fd1a0d7cc0e06a3589db00b60ac3cb75b2 100644 (file)
@@ -82,9 +82,6 @@ void object_test_constraints(struct Object *ob);
 
 void ED_object_constraint_rename(struct Object *ob, struct bConstraint *con, char *oldname);
 void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con);
-int ED_object_constraint_delete(struct ReportList *reports, struct Object *ob, struct bConstraint *con);
-int ED_object_constraint_move_down(struct ReportList *reports, struct Object *ob, struct bConstraint *con);
-int ED_object_constraint_move_up(struct ReportList *reports, struct Object *ob, struct bConstraint *con);
 
 /* editlattice.c */
 void mouse_lattice(struct bContext *C, short mval[2], int extend);
index 91fbd24f8a6d0457bc52ee6ab597c74b65d6f455..8f25459a682d7789f02935148cb4717db0991cdc 100644 (file)
@@ -616,12 +616,6 @@ static void constraint_active_func(bContext *C, void *ob_v, void *con_v)
        ED_object_constraint_set_active(ob_v, con_v);
 }
 
-static void del_constraint_func (bContext *C, void *ob_v, void *con_v)
-{
-       if(ED_object_constraint_delete(NULL, ob_v, con_v))
-               ED_undo_push(C, "Delete Constraint");
-}
-
 static void verify_constraint_name_func (bContext *C, void *con_v, void *name_v)
 {
        Object *ob= CTX_data_active_object(C);
@@ -639,18 +633,6 @@ static void verify_constraint_name_func (bContext *C, void *con_v, void *name_v)
        // XXX allqueue(REDRAWACTION, 0); 
 }
 
-static void constraint_moveUp(bContext *C, void *ob_v, void *con_v)
-{
-       if(ED_object_constraint_move_up(NULL, ob_v, con_v))
-               ED_undo_push(C, "Move Constraint");
-}
-
-static void constraint_moveDown(bContext *C, void *ob_v, void *con_v)
-{
-       if(ED_object_constraint_move_down(NULL, ob_v, con_v))
-               ED_undo_push(C, "Move Constraint");
-}
-
 /* some commonly used macros in the constraints drawing code */
 #define is_armature_target(target) (target && target->type==OB_ARMATURE)
 #define is_armature_owner(ob) ((ob->type == OB_ARMATURE) && (ob->flag & OB_POSEMODE))
@@ -828,25 +810,18 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
                        uiBlockBeginAlign(block);
                                uiBlockSetEmboss(block, UI_EMBOSS);
                                
-                               if (show_upbut) {
-                                       but = uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, VICON_MOVE_UP, xco+width-50, yco, 16, 18, NULL, 0.0, 0.0, 0.0, 0.0, "Move constraint up in constraint stack");
-                                       uiButSetFunc(but, constraint_moveUp, ob, con);
-                               }
+                               if (show_upbut)
+                                       uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_up", WM_OP_INVOKE_DEFAULT, VICON_MOVE_UP, xco+width-50, yco, 16, 18, "Move constraint up in constraint stack");
                                
-                               if (show_downbut) {
-                                       but = uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, VICON_MOVE_DOWN, xco+width-50+18, yco, 16, 18, NULL, 0.0, 0.0, 0.0, 0.0, "Move constraint down in constraint stack");
-                                       uiButSetFunc(but, constraint_moveDown, ob, con);
-                               }
+                               if (show_downbut)
+                                       uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_down", WM_OP_INVOKE_DEFAULT, VICON_MOVE_DOWN, xco+width-50+18, yco, 16, 18, "Move constraint down in constraint stack");
                        uiBlockEndAlign(block);
                }
                
                
                /* Close 'button' - emboss calls here disable drawing of 'button' behind X */
                uiBlockSetEmboss(block, UI_EMBOSSN);
-               
-               but = uiDefIconBut(block, BUT, B_CONSTRAINT_CHANGETARGET, ICON_X, xco+262, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete constraint");
-               uiButSetFunc(but, del_constraint_func, ob, con);
-               
+                       uiDefIconButO(block, BUT, "CONSTRAINT_OT_delete", WM_OP_INVOKE_DEFAULT, ICON_X, xco+262, yco, 19, 19, "Delete constraint");
                uiBlockSetEmboss(block, UI_EMBOSS);
        }
        
@@ -944,19 +919,6 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
                        }
                        break;
 #endif /* DISABLE_PYTHON */
-               /*case CONSTRAINT_TYPE_CHILDOF:
-                       {
-                               // Inverse options 
-                               uiBlockBeginAlign(block);
-                                       but=uiDefBut(block, BUT, B_CONSTRAINT_TEST, "Set Offset", xco, yco-151, (width/2),18, NULL, 0, 24, 0, 0, "Calculate current Parent-Inverse Matrix (i.e. restore offset from parent)");
-                                       // XXX uiButSetFunc(but, childof_const_setinv, con, NULL);
-                                       
-                                       but=uiDefBut(block, BUT, B_CONSTRAINT_TEST, "Clear Offset", xco+((width/2)+10), yco-151, (width/2),18, NULL, 0, 24, 0, 0, "Clear Parent-Inverse Matrix (i.e. clear offset from parent)");
-                                       // XXX uiButSetFunc(but, childof_const_clearinv, con, NULL);
-                               uiBlockEndAlign(block);
-                       }
-                       break; 
-               */
                
                /*case CONSTRAINT_TYPE_RIGIDBODYJOINT:
                        {
index 4c9a0bf4c6726e799b33d4a04fb77867a1526c82..7be4697d0c82ce2627ba5510ce1714dc946198be 100644 (file)
@@ -81,7 +81,6 @@ static int pupmenu() {return 0;}
 
 /* -------------- Get Active Constraint Data ---------------------- */
 
-
 /* if object in posemode, active bone constraints, else object constraints */
 ListBase *get_active_constraints (Object *ob)
 {
@@ -841,7 +840,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname)
        bConstraint *tcon;
        ListBase *conlist= NULL;
        int from_object= 0;
-       char *channame="";
        
        /* get context by searching for con (primitive...) */
        for (tcon= ob->constraints.first; tcon; tcon= tcon->next) {
@@ -851,7 +849,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname)
        
        if (tcon) {
                conlist= &ob->constraints;
-               channame= "Object";
                from_object= 1;
        }
        else if (ob->pose) {
@@ -868,7 +865,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname)
                
                if (tcon) {
                        conlist= &pchan->constraints;
-                       channame= pchan->name;
                }
        }
        
@@ -878,7 +874,7 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname)
        }
        
        /* first make sure it's a unique name within context */
-       unique_constraint_name (con, conlist);
+       unique_constraint_name(con, conlist);
 }
 
 
@@ -901,77 +897,111 @@ void ED_object_constraint_set_active(Object *ob, bConstraint *con)
                if(con==origcon) con->flag |= CONSTRAINT_ACTIVE;
                else con->flag &= ~CONSTRAINT_ACTIVE;
        }
-
-       /* make sure ipowin and buttons shows it */
-       if(ob->ipowin==ID_CO) {
-               // XXX allqueue(REDRAWIPO, ID_CO);
-               // XXX allspace(REMAKEIPO, 0);
-               // XXX allqueue(REDRAWNLA, 0);
-       }
-       // XXX allqueue(REDRAWBUTSOBJECT, 0);
 }
 
-int ED_object_constraint_delete(ReportList *reports, Object *ob, bConstraint *con)
+static int constraint_delete_exec (bContext *C, wmOperator *op)
 {
-       bConstraintChannel *chan;
+       PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
+       Object *ob= ptr.id.data;
+       bConstraint *con= ptr.data;
        ListBase *lb;
        
-       /* remove ipo channel */
-       lb= NULL; // XXX get_active_constraint_channels(ob, 0);
-       if(lb) {
-               chan = NULL; // XXX get_constraint_channel(lb, con->name);
-               if(chan) {
-                       if(chan->ipo) chan->ipo->id.us--;
-                       BLI_freelinkN(lb, chan);
-               }
-       }
-
        /* remove constraint itself */
        lb= get_active_constraints(ob);
        free_constraint_data(con);
        BLI_freelinkN(lb, con);
        
        ED_object_constraint_set_active(ob, NULL);
+       WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob);
 
-       return 1;
+       return OPERATOR_FINISHED;
 }
 
-int ED_object_constraint_move_down(ReportList *reports, Object *ob, bConstraint *constr)
+void CONSTRAINT_OT_delete (wmOperatorType *ot)
 {
-       bConstraint *con;
-       ListBase *conlist;
-       
-       if(constr->next) {
-               conlist = get_active_constraints(ob);
-               for(con= conlist->first; con; con= con->next) {
-                       if(con==constr) {
-                               BLI_remlink(conlist, con);
-                               BLI_insertlink(conlist, con->next, con);
-                               return 1;
-                       }
-               }
+       /* identifiers */
+       ot->name= "Delete Constraint";
+       ot->idname= "CONSTRAINT_OT_delete";
+       ot->description= "Remove constraitn from constraint stack.";
+       
+       /* callbacks */
+       ot->exec= constraint_delete_exec;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; 
+}
+
+static int constraint_move_down_exec (bContext *C, wmOperator *op)
+{
+       PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
+       Object *ob= ptr.id.data;
+       bConstraint *con= ptr.data;
+       
+       if (con->next) {
+               ListBase *conlist= get_active_constraints(ob);
+               bConstraint *nextCon= con->next;
+               
+               /* insert the nominated constraint after the one that used to be after it */
+               BLI_remlink(conlist, con);
+               BLI_insertlinkafter(conlist, nextCon, con);
+               
+               WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob);
+               
+               return OPERATOR_FINISHED;
        }
+       
+       return OPERATOR_CANCELLED;
+}
 
-       return 0;
+void CONSTRAINT_OT_move_down (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Move Constraint Down";
+       ot->idname= "CONSTRAINT_OT_move_down";
+       ot->description= "Move constraint down constraint stack.";
+       
+       /* callbacks */
+       ot->exec= constraint_move_down_exec;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; 
 }
 
-int ED_object_constraint_move_up(ReportList *reports, Object *ob, bConstraint *constr)
+
+static int constraint_move_up_exec (bContext *C, wmOperator *op)
 {
-       bConstraint *con;
-       ListBase *conlist;
-       
-       if(constr->prev) {
-               conlist = get_active_constraints(ob);
-               for(con= conlist->first; con; con= con->next) {
-                       if(con==constr) {
-                               BLI_remlink(conlist, con);
-                               BLI_insertlink(conlist, con->prev->prev, con);
-                               return 1;
-                       }
-               }
+       PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
+       Object *ob= ptr.id.data;
+       bConstraint *con= ptr.data;
+       
+       if (con->prev) {
+               ListBase *conlist= get_active_constraints(ob);
+               bConstraint *prevCon= con->prev;
+               
+               /* insert the nominated constraint before the one that used to be before it */
+               BLI_remlink(conlist, con);
+               BLI_insertlinkbefore(conlist, prevCon, con);
+               
+               WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob);
+               
+               return OPERATOR_FINISHED;
        }
+       
+       return OPERATOR_CANCELLED;
+}
 
-       return 0;
+void CONSTRAINT_OT_move_up (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Move Constraint Up";
+       ot->idname= "CONSTRAINT_OT_move_up";
+       ot->description= "Move constraint up constraint stack.";
+       
+       /* callbacks */
+       ot->exec= constraint_move_up_exec;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; 
 }
 
 /***************************** OPERATORS ****************************/
@@ -1015,10 +1045,10 @@ static int constraint_add_exec(bContext *C, wmOperator *op)
                case CONSTRAINT_TYPE_RIGIDBODYJOINT:
                        {
                                bRigidBodyJointConstraint *data;
-
+                               
                                /* set selected first object as target - moved from new_constraint_data */
                                data = (bRigidBodyJointConstraint*)con->data;
-
+                               
                                CTX_DATA_BEGIN(C, Object*, selob, selected_objects) {
                                        if(selob != ob) {
                                                data->tar= selob;
index 0ad5bd7d08e6382d6b89693789ec38c3931181fa..76ce8857c2cf8931034ff8a30c844cef5a446151 100644 (file)
@@ -101,6 +101,10 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot);
 
 /* editconstraint.c */
 void OBJECT_OT_constraint_add(struct wmOperatorType *ot);
+void CONSTRAINT_OT_delete(struct wmOperatorType *ot);
+
+void CONSTRAINT_OT_move_up(struct wmOperatorType *ot);
+void CONSTRAINT_OT_move_down(struct wmOperatorType *ot);
 
 void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot);
 void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot);
index 66dd1b8fbb976778e8f0d7cbb1ad075130d4236c..9a0ce23a97094d68b25fdfc494ecd777f8d613d8 100644 (file)
@@ -111,6 +111,9 @@ void ED_operatortypes_object(void)
        WM_operatortype_append(OBJECT_OT_modifier_mdef_bind);
 
        WM_operatortype_append(OBJECT_OT_constraint_add);
+       WM_operatortype_append(CONSTRAINT_OT_delete);
+       WM_operatortype_append(CONSTRAINT_OT_move_up);
+       WM_operatortype_append(CONSTRAINT_OT_move_down);
        WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse);
        WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse);