Fix for [#22714] Constraints stack : move up and move down buttons problem
* Constraint template now uses 2 rows as well, when the area width is small. * UI Code could use some code/layout cleanup still, will look into that soon.
This commit is contained in:
parent
db4d317f6b
commit
ce94f52dbc
@ -20,6 +20,7 @@
|
||||
import bpy
|
||||
|
||||
narrowui = bpy.context.user_preferences.view.properties_width_check
|
||||
narrowcon = 260
|
||||
|
||||
|
||||
class ConstraintButtonsPanel(bpy.types.Panel):
|
||||
@ -30,8 +31,9 @@ class ConstraintButtonsPanel(bpy.types.Panel):
|
||||
def draw_constraint(self, context, con):
|
||||
layout = self.layout
|
||||
|
||||
box = layout.template_constraint(con)
|
||||
wide_ui = context.region.width > narrowui
|
||||
compact_con = context.region.width < narrowcon
|
||||
box = layout.template_constraint(con, compact = compact_con)
|
||||
|
||||
if box:
|
||||
# match enum type to our functions, avoids a lookup table.
|
||||
|
@ -676,7 +676,7 @@ void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *pt
|
||||
void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
|
||||
struct PointerRNA *root_ptr, char *text);
|
||||
uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, int compact);
|
||||
uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
|
||||
uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr, int compact);
|
||||
void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
|
||||
void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
|
||||
void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
|
||||
|
@ -944,12 +944,12 @@ static void constraint_active_func(bContext *C, void *ob_v, void *con_v)
|
||||
}
|
||||
|
||||
/* draw panel showing settings for a constraint */
|
||||
static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con, int compact)
|
||||
{
|
||||
bPoseChannel *pchan= get_active_posechannel(ob);
|
||||
bConstraintTypeInfo *cti;
|
||||
uiBlock *block;
|
||||
uiLayout *result= NULL, *col, *box, *row, *subrow;
|
||||
uiLayout *result= NULL, *col, *col1, *col2, *box, *row, *subrow, *split;
|
||||
PointerRNA ptr;
|
||||
char typestr[32];
|
||||
short width = 265;
|
||||
@ -985,13 +985,15 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
uiLayoutSetContextPointer(col, "constraint", &ptr);
|
||||
|
||||
box= uiLayoutBox(col);
|
||||
row= uiLayoutRow(box, 0);
|
||||
split = uiLayoutSplit(box, 0.35, 0);
|
||||
|
||||
col1= uiLayoutColumn(split, 0);
|
||||
col2= uiLayoutColumn(split, 0);
|
||||
row = uiLayoutRow(col1, 0);
|
||||
subrow = uiLayoutRow(col2, 0);
|
||||
|
||||
block= uiLayoutGetBlock(box);
|
||||
|
||||
subrow= uiLayoutRow(row, 0);
|
||||
//uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_LEFT);
|
||||
|
||||
/* Draw constraint header */
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
|
||||
@ -999,7 +1001,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
rb_col= (con->flag & CONSTRAINT_ACTIVE)?50:20;
|
||||
|
||||
/* open/close */
|
||||
uiItemR(subrow, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
|
||||
uiItemR(row, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
|
||||
|
||||
/* name */
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
@ -1008,15 +1010,12 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
uiBlockSetCol(block, TH_REDALERT);*/
|
||||
|
||||
uiDefBut(block, LABEL, B_CONSTRAINT_TEST, typestr, xco+10, yco, 100, 18, NULL, 0.0, 0.0, 0.0, 0.0, "");
|
||||
|
||||
|
||||
if(proxy_protected == 0) {
|
||||
uiItemR(subrow, &ptr, "name", 0, "", 0);
|
||||
}
|
||||
else
|
||||
uiItemL(subrow, con->name, 0);
|
||||
|
||||
subrow= uiLayoutRow(row, 0);
|
||||
//uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_RIGHT);
|
||||
|
||||
/* proxy-protected constraints cannot be edited, so hide up/down + close buttons */
|
||||
if (proxy_protected) {
|
||||
@ -1051,23 +1050,36 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
show_upbut= ((prev_proxylock == 0) && (con->prev));
|
||||
show_downbut= (con->next) ? 1 : 0;
|
||||
|
||||
uiLayoutSetOperatorContext(subrow, WM_OP_INVOKE_DEFAULT);
|
||||
|
||||
if (compact) {
|
||||
/* Draw "Delete" Button in first row, before splitting */
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
uiItemO(subrow, "", ICON_X, "CONSTRAINT_OT_delete");
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
|
||||
subrow = uiLayoutRow(col2, 0);
|
||||
}
|
||||
|
||||
if (show_upbut || show_downbut) {
|
||||
uiBlockBeginAlign(block);
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
|
||||
if (show_upbut)
|
||||
uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_up", WM_OP_INVOKE_DEFAULT, ICON_TRIA_UP, xco+width-50, yco, 16, 18, "Move constraint up in constraint stack");
|
||||
uiItemO(subrow, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
|
||||
|
||||
if (show_downbut)
|
||||
uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_down", WM_OP_INVOKE_DEFAULT, ICON_TRIA_DOWN, xco+width-50+18, yco, 16, 18, "Move constraint down in constraint stack");
|
||||
uiItemO(subrow, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
|
||||
uiBlockEndAlign(block);
|
||||
}
|
||||
|
||||
/* Close 'button' - emboss calls here disable drawing of 'button' behind X */
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
uiDefIconButBitS(block, ICONTOGN, CONSTRAINT_OFF, B_CONSTRAINT_TEST, ICON_CHECKBOX_DEHLT, xco+243, yco, 19, 19, &con->flag, 0.0, 0.0, 0.0, 0.0, "enable/disable constraint");
|
||||
uiItemR(subrow, &ptr, "enabled", 0, "", 0);
|
||||
|
||||
uiDefIconButO(block, BUT, "CONSTRAINT_OT_delete", WM_OP_INVOKE_DEFAULT, ICON_X, xco+262, yco, 19, 19, "Delete constraint");
|
||||
if (!compact) {
|
||||
uiItemO(subrow, "", ICON_X, "CONSTRAINT_OT_delete");
|
||||
}
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
}
|
||||
|
||||
@ -1093,7 +1105,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
|
||||
return result;
|
||||
}
|
||||
|
||||
uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
|
||||
uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
|
||||
{
|
||||
Object *ob;
|
||||
bConstraint *con;
|
||||
@ -1121,7 +1133,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return draw_constraint(layout, ob, con);
|
||||
return draw_constraint(layout, ob, con, compact);
|
||||
}
|
||||
|
||||
|
||||
|
@ -866,7 +866,7 @@ 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";
|
||||
ot->description= "Move constraint down in constraint stack";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= constraint_move_down_exec;
|
||||
@ -913,7 +913,7 @@ 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";
|
||||
ot->description= "Move constraint up in constraint stack";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= constraint_move_up_exec;
|
||||
|
@ -1937,11 +1937,16 @@ void RNA_def_constraint(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in");
|
||||
|
||||
/* flags */
|
||||
prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
|
||||
RNA_def_property_ui_text(prop, "Enabled", "Enable/Disable Constraint");
|
||||
RNA_def_property_ui_icon(prop, ICON_CHECKBOX_DEHLT, 1);
|
||||
|
||||
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
|
||||
RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
|
||||
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
|
||||
|
||||
|
||||
// XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
|
||||
prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
|
@ -317,6 +317,7 @@ void RNA_api_ui_layout(StructRNA *srna)
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
|
||||
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
|
||||
RNA_def_function_return(func, parm);
|
||||
RNA_def_boolean(func, "compact", 0, "", "Show a smaller version of the template, split on two lines.");
|
||||
|
||||
func= RNA_def_function(srna, "template_preview", "uiTemplatePreview");
|
||||
parm= RNA_def_pointer(func, "id", "ID", "", "ID datablock.");
|
||||
|
Loading…
Reference in New Issue
Block a user