[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20850] branches/blender2.5/blender: 2. 5 - Armature Buttons + UI-Templates

Joshua Leung aligorith at gmail.com
Sat Jun 13 13:21:02 CEST 2009


Revision: 20850
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20850
Author:   aligorith
Date:     2009-06-13 13:21:02 +0200 (Sat, 13 Jun 2009)

Log Message:
-----------
2.5 - Armature Buttons + UI-Templates

Added a new template for layer-buttons, which auto-determines the layout of the buttons instead of relying on some hardcoded pattern for n-layers (i.e. 16 or 20 currently). This is a still bit rough, and could do with some refining to allow us to define what extra info (icons) should get drawn on the buttons or so.

Currently, this is only used in the Armature buttons to allow showing/hiding layers.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_armature.py
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_armature.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_armature.py	2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/release/ui/buttons_data_armature.py	2009-06-13 11:21:02 UTC (rev 20850)
@@ -45,9 +45,9 @@
 			
 			sub = split.column()
 			sub.itemL(text="Layers:")
-			sub.itemL(text="LAYERS")
-			#sub.itemR(arm, "layer")
-			#sub.itemR(arm, "layer_protection")
+			sub.template_layers(arm, "layer")
+			sub.itemL(text="Protected Layers:")
+			sub.template_layers(arm, "layer_protection")
 
 class DATA_PT_display(DataButtonsPanel):
 	__idname__ = "DATA_PT_display"

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-13 11:21:02 UTC (rev 20850)
@@ -615,6 +615,7 @@
 void uiTemplatePreview(uiLayout *layout, struct ID *id);
 void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int type);
+void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname);
 
 /* items */
 void uiItemO(uiLayout *layout, char *name, int icon, char *opname);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_api.c	2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_api.c	2009-06-13 11:21:02 UTC (rev 20850)
@@ -230,5 +230,11 @@
 	parm= RNA_def_pointer(func, "ramp", "ColorRamp", "", "Color ramp pointer.");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 	RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
+	
+	func= RNA_def_function(srna, "template_layers", "uiTemplateLayers");
+	parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm= RNA_def_string(func, "property", "", 0, "", "Identifier of pointer property in data.");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-13 11:21:02 UTC (rev 20850)
@@ -1439,3 +1439,56 @@
 	}
 }
 
+/********************* Layer Buttons Template ************************/
+
+// TODO:
+//	- option for showing extra info like whether layer has contents?
+//	- for now, grouping of layers is determined by dividing up the length of 
+//	  the array of layer bitflags
+
+void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname)
+{
+	uiBlock *block;
+	uiLayout *uRow, *uSplit, *uCol;
+	PropertyRNA *prop;
+	StructRNA *type;
+	int groups, cols, layers;
+	int group, col, layer, row;
+	
+	if (!ptr->data)
+		return;
+	
+	prop= RNA_struct_find_property(ptr, propname);
+	if (!prop) {
+		printf("uiTemplateLayer: layers property not found: %s\n", propname);
+		return;
+	}
+	
+	/* the number of layers determines the way we group them 
+	 *	- we want 2 rows only (for now)
+	 *	- the number of columns (cols) is the total number of buttons per row
+	 *	  the 'remainder' is added to this, as it will be ok to have first row slightly wider if need be
+	 *	- for now, only split into groups if if group will have at least 5 items
+	 */
+	layers= RNA_property_array_length(prop);
+	cols= (layers / 2) + (layers % 2);
+	groups= ((cols / 2) < 5) ? (1) : (cols / 2);
+	
+	/* layers are laid out going across rows, with the columns being divided into groups */
+	uSplit= uiLayoutSplit(layout, (1.0f/(float)groups));
+	
+	for (group= 0; group < groups; group++) {
+		uCol= uiLayoutColumn(uSplit, 1);
+		
+		for (row= 0; row < 2; row++) {
+			uRow= uiLayoutRow(uCol, 1);
+			layer= groups*cols*row + cols*group;
+			
+			/* add layers as toggle buts */
+			for (col= 0; (col < cols) && (layer < layers); col++, layer++) {
+				int icon=0; // XXX - add some way of setting this...
+				uiItemFullR(uRow, "", icon, ptr, prop, layer, 0, 0, 0, 1);
+			}
+		}
+	}
+}





More information about the Bf-blender-cvs mailing list