Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ebb <matt@mke3.net>2010-01-20 08:41:59 +0300
committerMatt Ebb <matt@mke3.net>2010-01-20 08:41:59 +0300
commit85307388bc3b3ea07e5b52479569bc21ede5b69b (patch)
tree9daa41b519b3a4c7ec3969e34f7c3c5326ff0e08
parent8830528b026c4e3efa3226ee94b302bf829f5d95 (diff)
Fix [#20602] Cluttered UI in modifiers
Split modifier header on two lines only if available space is low
-rw-r--r--release/scripts/ui/properties_data_modifier.py7
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface_templates.c119
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c1
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c1
5 files changed, 78 insertions, 52 deletions
diff --git a/release/scripts/ui/properties_data_modifier.py b/release/scripts/ui/properties_data_modifier.py
index 1bafca378c4..77d46fbb6ef 100644
--- a/release/scripts/ui/properties_data_modifier.py
+++ b/release/scripts/ui/properties_data_modifier.py
@@ -20,7 +20,7 @@
import bpy
narrowui = 180
-
+narrowmod = 260
class DataButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
@@ -36,14 +36,13 @@ class DATA_PT_modifiers(DataButtonsPanel):
ob = context.object
wide_ui = context.region.width > narrowui
+ compact_mod = context.region.width < narrowmod
row = layout.row()
row.operator_menu_enum("object.modifier_add", "type")
- if wide_ui:
- row.label()
for md in ob.modifiers:
- box = layout.template_modifier(md)
+ box = layout.template_modifier(md, compact=compact_mod)
if box:
# match enum type to our functions, avoids a lookup table.
getattr(self, md.type)(box, ob, md, wide_ui)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 66878a26db1..6c03b136775 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -651,7 +651,7 @@ void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *pt
char *proptypename, char *text);
void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
struct PointerRNA *root_ptr, char *text);
-uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr);
+uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr, int compact);
uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 540e4a81d6e..2c6bf5f2d3c 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -653,13 +653,13 @@ static int modifier_can_delete(ModifierData *md)
return 1;
}
-static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex)
+static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex, int compact)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
PointerRNA ptr;
uiBut *but;
uiBlock *block;
- uiLayout *box, *column, *row;
+ uiLayout *box, *column, *row, *col;
uiLayout *result= NULL;
int isVirtual = (md->mode & eModifierMode_Virtual);
char str[128];
@@ -673,11 +673,10 @@ static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, i
/* rounded header ------------------------------------------------------------------- */
box= uiLayoutBox(column);
- row= uiLayoutRow(box, 0);
- uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
- block= uiLayoutGetBlock(row);
-
if (isVirtual) {
+ row= uiLayoutRow(box, 0);
+ uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
+ block= uiLayoutGetBlock(row);
/* VIRTUAL MODIFIER */
// XXX this is not used now, since these cannot be accessed via RNA
sprintf(str, "%s parent deform", md->name);
@@ -688,62 +687,88 @@ static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, i
}
else {
/* REAL MODIFIER */
- uiLayout *subrow, *col2;
+ uiLayout *split;
+
+ split = uiLayoutSplit(box, 0.16, 0);
+
+ col= uiLayoutColumn(split, 0);
+ row = uiLayoutRow(col, 1);
+
+ block = uiLayoutGetBlock(row);
- /* Open/Close ................................. */
uiBlockSetEmboss(block, UI_EMBOSSN);
- uiDefIconButBitI(block, ICONTOG, eModifierMode_Expanded, 0, ICON_TRIA_RIGHT, 0, 0, UI_UNIT_X, UI_UNIT_Y, &md->mode, 0.0, 0.0, 0.0, 0.0, "Collapse/Expand Modifier");
+
+ /* Open/Close ................................. */
+ uiItemR(row, "", 0, &ptr, "expanded", 0);
/* modifier-type icon */
uiItemL(row, "", RNA_struct_ui_icon(ptr.type));
+
uiBlockSetEmboss(block, UI_EMBOSS);
+
/* 'Middle Column' ............................
* - first row is the name of the modifier
* - second row is the visibility settings, since the layouts were not wide enough to show all
*/
- col2= uiLayoutColumn(row, 0);
- /* First Row */
- subrow= uiLayoutRow(col2, 0);
- /* modifier name */
- uiItemR(subrow, "", 0, &ptr, "name", 0);
+ col= uiLayoutColumn(split, 0);
+
+ row= uiLayoutRow(col, 0);
+ uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
+
+ block = uiLayoutGetBlock(row);
+
+ /* modifier name */
+ uiItemR(row, "", 0, &ptr, "name", 0);
+
+ if (compact) {
+ /* insert delete button at end of top row before splitting to second line */
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ if (modifier_can_delete(md))
+ uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
+ uiBlockSetEmboss(block, UI_EMBOSS);
- /* Second Row */
- subrow= uiLayoutRow(col2, 1);
- uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_EXPAND);
- block= uiLayoutGetBlock(subrow);
- /* Softbody not allowed in this situation, enforce! */
- if ( ((md->type!=eModifierType_Softbody && md->type!=eModifierType_Collision) || !(ob->pd && ob->pd->deflect))
- && (md->type!=eModifierType_Surface) )
- {
- uiItemR(subrow, "", ICON_SCENE, &ptr, "render", 0);
- uiItemR(subrow, "", ICON_RESTRICT_VIEW_OFF, &ptr, "realtime", 0);
-
- if (mti->flags & eModifierTypeFlag_SupportsEditmode)
- uiItemR(subrow, "", ICON_EDITMODE_HLT, &ptr, "editmode", 0);
- }
-
- if ((ob->type==OB_MESH) && modifier_couldBeCage(md) && (index <= lastCageIndex))
- {
- but = uiDefIconButBitI(block, TOG, eModifierMode_OnCage, 0, ICON_MESH_DATA, 0, 0, 16, 20, &md->mode, 0.0, 0.0, 0.0, 0.0, "Apply modifier to editing cage during Editmode");
- if (index < cageIndex)
- uiButSetFlag(but, UI_BUT_DISABLED);
- uiButSetFunc(but, modifiers_setOnCage, ob, md);
- }
+ split = uiLayoutSplit(box, 0.17, 0);
+ col= uiLayoutColumn(split, 0);
+ uiItemL(col, "", 0);
+ col= uiLayoutColumn(split, 0);
+ row = uiLayoutRow(col, 1);
+ }
+
+ /* mode enabling buttons */
+ uiBlockBeginAlign(block);
+ /* Softbody not allowed in this situation, enforce! */
+ if ( ((md->type!=eModifierType_Softbody && md->type!=eModifierType_Collision) || !(ob->pd && ob->pd->deflect))
+ && (md->type!=eModifierType_Surface) )
+ {
+ uiItemR(row, "", 0, &ptr, "render", 0);
+ uiItemR(row, "", 0, &ptr, "realtime", 0);
+ if (mti->flags & eModifierTypeFlag_SupportsEditmode)
+ uiItemR(row, "", 0, &ptr, "editmode", 0);
+ }
+ if ((ob->type==OB_MESH) && modifier_couldBeCage(md) && (index <= lastCageIndex))
+ {
+ /* -- convert to rna ? */
+ but = uiDefIconButBitI(block, TOG, eModifierMode_OnCage, 0, ICON_MESH_DATA, 0, 0, 16, 20, &md->mode, 0.0, 0.0, 0.0, 0.0, "Apply modifier to editing cage during Editmode");
+ if (index < cageIndex)
+ uiButSetFlag(but, UI_BUT_DISABLED);
+ uiButSetFunc(but, modifiers_setOnCage, ob, md);
+ }
+ uiBlockEndAlign(block);
+
/* Up/Down + Delete ........................... */
- block= uiLayoutGetBlock(row);
uiBlockBeginAlign(block);
- uiItemO(row, "", ICON_TRIA_UP, "OBJECT_OT_modifier_move_up");
- uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_modifier_move_down");
+ uiItemO(row, "", ICON_TRIA_UP, "OBJECT_OT_modifier_move_up");
+ uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_modifier_move_down");
uiBlockEndAlign(block);
- uiBlockSetEmboss(block, UI_EMBOSSN);
-
- if (modifier_can_delete(md))
- uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
-
- uiBlockSetEmboss(block, UI_EMBOSS);
+ if(!compact) {
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ if (modifier_can_delete(md))
+ uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
+ uiBlockSetEmboss(block, UI_EMBOSS);
+ }
}
@@ -794,7 +819,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, i
return result;
}
-uiLayout *uiTemplateModifier(uiLayout *layout, PointerRNA *ptr)
+uiLayout *uiTemplateModifier(uiLayout *layout, PointerRNA *ptr, int compact)
{
Object *ob;
ModifierData *md, *vmd;
@@ -824,7 +849,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, PointerRNA *ptr)
for(i=0; vmd; i++, vmd=vmd->next) {
if(md == vmd)
- return draw_modifier(layout, ob, md, i, cageIndex, lastCageIndex);
+ return draw_modifier(layout, ob, md, i, cageIndex, lastCageIndex, compact);
else if(vmd->mode & eModifierMode_Virtual)
i--;
}
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 1516ae2536d..dabebb1ff06 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -2124,6 +2124,7 @@ void RNA_def_modifier(BlenderRNA *brna)
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface.");
+ RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
/* types */
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 2ea8f191822..c344173afb3 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -303,6 +303,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_constraint", "uiTemplateConstraint");
parm= RNA_def_pointer(func, "data", "Constraint", "", "Constraint data.");