[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24996] trunk/blender: UI:

Nicholas Bishop nicholasbishop at gmail.com
Sun Nov 29 03:42:48 CET 2009


Revision: 24996
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24996
Author:   nicholasbishop
Date:     2009-11-29 03:42:47 +0100 (Sun, 29 Nov 2009)

Log Message:
-----------
UI:
* Moved more of 3dview header to python
* Fixed the layout of the ui layers template to show the correct number of buttons
* Added support for layer icons (active layer, used layers)

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

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/release/scripts/ui/space_view3d.py	2009-11-29 02:42:47 UTC (rev 24996)
@@ -27,12 +27,12 @@
     def draw(self, context):
         layout = self.layout
 
-        # view = context.space_data
+        view = context.space_data
         mode_string = context.mode
         edit_object = context.edit_object
         obj = context.active_object
         toolsettings = context.scene.tool_settings
-
+        
         row = layout.row(align=True)
         row.template_header()
 
@@ -56,8 +56,16 @@
 
         layout.template_header_3D()
 
+        # Particle edit
+        if obj and obj.mode == 'PARTICLE_EDIT':
+            layout.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True)
+
+        # Occlude geometry
+        if obj and view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')):
+            layout.prop(view, "occlude_geometry", text="")
+
         # Proportional editing
-        if obj.mode in ('OBJECT', 'EDIT'):
+        if obj and obj.mode in ('OBJECT', 'EDIT'):
             row = layout.row(align=True)
             row.prop(toolsettings, "proportional_editing", text="", icon_only=True)
             if toolsettings.proportional_editing != 'DISABLED':
@@ -69,7 +77,7 @@
         row.prop(toolsettings, "snap_element", text="", icon_only=True)
         if toolsettings.snap_element != 'INCREMENT':
             row.prop(toolsettings, "snap_target", text="", icon_only=True)
-            if obj.mode == 'OBJECT':
+            if obj and obj.mode == 'OBJECT':
                 row.prop(toolsettings, "snap_align_rotation", text="")
         if toolsettings.snap_element == 'VOLUME':
             row.prop(toolsettings, "snap_peel_object", text="")
@@ -83,7 +91,7 @@
         props.animation = True
 
         # Pose
-        if obj.mode == 'POSE':
+        if obj and obj.mode == 'POSE':
             row = layout.row(align=True)
             row.operator("pose.copy", text="", icon='ICON_COPYDOWN')
             row.operator("pose.paste", text="", icon='ICON_PASTEDOWN')

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2009-11-29 02:42:47 UTC (rev 24996)
@@ -648,7 +648,8 @@
 void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels);
 void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname);
-void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname);
+void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname,
+		      PointerRNA *used_ptr, char *used_propname, int active_layer);
 void uiTemplateImage(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *userptr, int compact);
 void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser);
 void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C);

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2009-11-29 02:42:47 UTC (rev 24996)
@@ -1879,16 +1879,17 @@
 /********************* 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)
+void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname,
+		      PointerRNA *used_ptr, char *used_propname, int active_layer)
 {
-	uiLayout *uRow, *uSplit, *uCol;
-	PropertyRNA *prop;
+	uiLayout *uRow, *uCol;
+	PropertyRNA *prop, *used_prop;
 	int groups, cols, layers;
 	int group, col, layer, row;
+	int cols_per_group = 5;
 	
 	prop= RNA_struct_find_property(ptr, propname);
 	if (!prop) {
@@ -1900,28 +1901,41 @@
 	 *	- 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
+	 *	- for now, only split into groups if group will have at least 5 items
 	 */
 	layers= RNA_property_array_length(ptr, prop);
 	cols= (layers / 2) + (layers % 2);
-	groups= ((cols / 2) < 5) ? (1) : (cols / 2);
+	groups= ((cols / 2) < cols_per_group) ? (1) : (cols / cols_per_group);
+
+	if(used_ptr && used_propname) {
+		used_prop= RNA_struct_find_property(used_ptr, used_propname);
+		if (!used_prop) {
+			printf("uiTemplateLayer: used layers property not found: %s\n", used_propname);
+			return;
+		}
+
+		if(RNA_property_array_length(used_ptr, used_prop) < layers)
+			used_prop = NULL;
+	}
 	
 	/* layers are laid out going across rows, with the columns being divided into groups */
-	if (groups > 1)
-		uSplit= uiLayoutSplit(layout, (1.0f/(float)groups));
-	else	
-		uSplit= layout;
 	
 	for (group= 0; group < groups; group++) {
-		uCol= uiLayoutColumn(uSplit, 1);
+		uCol= uiLayoutColumn(layout, 1);
 		
 		for (row= 0; row < 2; row++) {
 			uRow= uiLayoutRow(uCol, 1);
-			layer= groups*cols*row + cols*group;
+			layer= groups*cols_per_group*row + cols_per_group*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...
+			for (col= 0; (col < cols_per_group) && (layer < layers); col++, layer++) {
+				int icon = 0;
+				int butlay = 1 << layer;
+				if(active_layer & butlay)
+					icon = ICON_LAYER_ACTIVE;
+				else if(used_prop && RNA_property_boolean_get_index(used_ptr, used_prop, layer))
+					icon = ICON_LAYER_USED;
+				
 				uiItemFullR(uRow, "", icon, ptr, prop, layer, 0, UI_ITEM_R_TOGGLE);
 			}
 		}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-11-29 02:42:47 UTC (rev 24996)
@@ -1918,7 +1918,7 @@
 	View3D *v3d= sa->spacedata.first;
 	Scene *scene= CTX_data_scene(C);
 	ToolSettings *ts= CTX_data_tool_settings(C);
-	PointerRNA v3dptr, toolsptr;
+	PointerRNA v3dptr, toolsptr, sceneptr;
 	Object *ob= OBACT;
 	Object *obedit = CTX_data_edit_object(C);
 	uiBlock *block;
@@ -1926,6 +1926,7 @@
 	
 	RNA_pointer_create(&screen->id, &RNA_Space3DView, v3d, &v3dptr);	
 	RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &toolsptr);
+	RNA_pointer_create(&scene->id, &RNA_Scene, scene, &sceneptr);
 
 	block= uiLayoutGetBlock(layout);
 	uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL);
@@ -1985,8 +1986,8 @@
 
 		/* Transform widget / manipulators */
 		row= uiLayoutRow(layout, 1);
+		uiItemR(row, "", 0, &v3dptr, "manipulator", UI_ITEM_R_ICON_ONLY);
 		block= uiLayoutGetBlock(row);
-		uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,0,0,XIC,YIC, &v3d->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)");	
 		
 		if(v3d->twflag & V3D_USE_MANIPULATOR) {
 			uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, 0,0,XIC,YIC, &v3d->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)");
@@ -2046,16 +2047,4 @@
 
 		BKE_mesh_end_editmesh(obedit->data, em);
 	}
-	else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
-		PointerRNA particleptr;
-
-		RNA_pointer_create(&scene->id, &RNA_ParticleEdit, &ts->particle, &particleptr);
-
-		row= uiLayoutRow(layout, 1);
-		uiItemR(row, "", 0, &particleptr, "selection_mode", UI_ITEM_R_EXPAND+UI_ITEM_R_ICON_ONLY);
-	}
-
-	/* Occlude geometry */
-	if(v3d->drawtype > OB_WIRE && ((ob && ob->mode & OB_MODE_PARTICLE_EDIT) || (obedit && (obedit->type == OB_MESH))))
-		uiItemR(layout, "", 0, &v3dptr, "occlude_geometry", UI_ITEM_R_ICON_ONLY);
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2009-11-29 02:42:47 UTC (rev 24996)
@@ -861,6 +861,12 @@
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Space3DView_lock_camera_and_layers_set");
 	RNA_def_property_ui_text(prop, "Lock Camera and Layers", "Lock the active camera and layers to scene.");
 	RNA_def_property_ui_icon(prop, ICON_LOCKVIEW_OFF, 1);
+
+	prop= RNA_def_property(srna, "used_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+	RNA_def_property_boolean_sdna(prop, NULL, "lay_used", 1);
+	RNA_def_property_array(prop, 20);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Used Layers", "Layers that contain something.");
 }
 
 static void rna_def_space_buttons(BlenderRNA *brna)

Modified: trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2009-11-29 02:14:34 UTC (rev 24995)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2009-11-29 02:42:47 UTC (rev 24996)
@@ -310,6 +310,12 @@
 	
 	func= RNA_def_function(srna, "template_layers", "uiTemplateLayers");
 	api_ui_item_rna_common(func);
+	parm= RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property.");
+	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list