[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26130] trunk/blender: Fix [#20602] Cluttered UI in modifiers

Matt Ebb matt at mke3.net
Wed Jan 20 06:42:00 CET 2010


Revision: 26130
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26130
Author:   broken
Date:     2010-01-20 06:41:59 +0100 (Wed, 20 Jan 2010)

Log Message:
-----------
Fix [#20602] Cluttered UI in modifiers

Split modifier header on two lines only if available space is low

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_data_modifier.py
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: trunk/blender/release/scripts/ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_modifier.py	2010-01-20 04:29:00 UTC (rev 26129)
+++ trunk/blender/release/scripts/ui/properties_data_modifier.py	2010-01-20 05:41:59 UTC (rev 26130)
@@ -20,8 +20,8 @@
 import bpy
 
 narrowui = 180
+narrowmod = 260
 
-
 class DataButtonsPanel(bpy.types.Panel):
     bl_space_type = 'PROPERTIES'
     bl_region_type = 'WINDOW'
@@ -36,14 +36,13 @@
 
         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)

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-20 04:29:00 UTC (rev 26129)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-20 05:41:59 UTC (rev 26130)
@@ -651,7 +651,7 @@
 	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);

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2010-01-20 04:29:00 UTC (rev 26129)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2010-01-20 05:41:59 UTC (rev 26130)
@@ -653,13 +653,13 @@
 	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 @@
 	/* 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 @@
 	}
 	else {
 		/* REAL MODIFIER */
-		uiLayout *subrow, *col2;
+		uiLayout *split;
 		
-		/* Open/Close .................................  */
+		split = uiLayoutSplit(box, 0.16, 0);
+		
+		col= uiLayoutColumn(split, 0);
+		row = uiLayoutRow(col, 1);
+		
+		block = uiLayoutGetBlock(row);
+		
 		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 @@
 	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 @@
 
 	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--;
 	}

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-01-20 04:29:00 UTC (rev 26129)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-01-20 05:41:59 UTC (rev 26130)
@@ -2124,6 +2124,7 @@
 	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 */

Modified: trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2010-01-20 04:29:00 UTC (rev 26129)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2010-01-20 05:41:59 UTC (rev 26130)
@@ -303,6 +303,7 @@
 	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.");





More information about the Bf-blender-cvs mailing list