[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22667] branches/blender2.5/blender: 2.5: Modifiers & Menus

Brecht Van Lommel brecht at blender.org
Fri Aug 21 04:51:58 CEST 2009


Revision: 22667
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22667
Author:   blendix
Date:     2009-08-21 04:51:56 +0200 (Fri, 21 Aug 2009)

Log Message:
-----------
2.5: Modifiers & Menus

* Popup menus now remember the last clicked item again.
* Modifier and File Format menus are now organized in multiple
  columns with categories.
* Hook, explode, uv project modifiers have all their buttons
  again with the relevant operators implemented.
* Modifiers that can't be added by the user, or don't work on
  curves for example, are not in the menu anymore.
* Fix search menu overlapping buttons when near the bottom of
  the screen.
* Fix uv layers search menu not working in some modifiers.
* Cleanup popup menu code a bit, layout engine is used in more
  cases now instead of ugly position calculation code.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_mesh.py
    branches/blender2.5/blender/release/ui/buttons_data_modifier.py
    branches/blender2.5/blender/release/ui/buttons_material.py
    branches/blender2.5/blender/release/ui/space_image.py
    branches/blender2.5/blender/source/blender/blenkernel/BKE_modifier.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_intern.h
    branches/blender2.5/blender/source/blender/editors/object/object_modifier.c
    branches/blender2.5/blender/source/blender/editors/object/object_ops.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_mesh.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_mesh.py	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/release/ui/buttons_data_mesh.py	2009-08-21 02:51:56 UTC (rev 22667)
@@ -105,7 +105,7 @@
 			row = layout.row()
 			row.itemR(group, "name")
 
-		if context.edit_object:
+		if ob.mode == 'EDIT':
 			row = layout.row()
 			
 			sub = row.row(align=True)
@@ -180,7 +180,7 @@
 
 				layout.itemR(kb, "name")
 
-		if context.edit_object:
+		if ob.mode == 'EDIT':
 			layout.enabled = False
 
 class DATA_PT_uv_texture(DataButtonsPanel):

Modified: branches/blender2.5/blender/release/ui/buttons_data_modifier.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-08-21 02:51:56 UTC (rev 22667)
@@ -170,7 +170,7 @@
 		if md.texture_coordinates == 'OBJECT':
 			layout.itemR(md, "texture_coordinate_object", text="Object")
 		elif md.texture_coordinates == 'UV' and ob.type == 'MESH':
-			layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
+			layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
 	
 	def EDGE_SPLIT(self, layout, ob, md):
 		split = layout.split()
@@ -187,21 +187,36 @@
 	def EXPLODE(self, layout, ob, md):
 		layout.item_pointerR(md, "vertex_group", ob, "vertex_groups")
 		layout.itemR(md, "protect")
-		layout.itemR(md, "split_edges")
-		layout.itemR(md, "unborn")
-		layout.itemR(md, "alive")
-		layout.itemR(md, "dead")
-		# Missing: "Refresh" and "Clear Vertex Group" Operator
+
+		flow = layout.column_flow(2)
+		flow.itemR(md, "split_edges")
+		flow.itemR(md, "unborn")
+		flow.itemR(md, "alive")
+		flow.itemR(md, "dead")
+
+		layout.itemO("object.explode_refresh", text="Refresh");
 		
 	def FLUID_SIMULATION(self, layout, ob, md):
 		layout.itemL(text="See Fluid panel.")
 		
 	def HOOK(self, layout, ob, md):
-		layout.itemR(md, "falloff")
-		layout.itemR(md, "force", slider=True)
 		layout.itemR(md, "object")
 		layout.item_pointerR(md, "vertex_group", ob, "vertex_groups")
-		# Missing: "Reset" and "Recenter" Operator
+
+		split = layout.split()
+		split.itemR(md, "falloff")
+		split.itemR(md, "force", slider=True)
+
+		layout.itemS()
+
+		row = layout.row()
+		row.itemO("object.hook_reset", text="Reset")
+		row.itemO("object.hook_recenter", text="Recenter")
+
+		if ob.mode == 'EDIT':
+			row = layout.row()
+			row.itemO("object.hook_select", text="Select")
+			row.itemO("object.hook_assign", text="Assign")
 		
 	def LATTICE(self, layout, ob, md):
 		layout.itemR(md, "object")
@@ -222,7 +237,7 @@
 
 		layout.itemS()
 		
-		layout.itemO("object.modifier_mdef_bind", text="Bind")
+		layout.itemO("object.meshdeform_bind", text="Bind")
 		row = layout.row()
 		row.itemR(md, "precision")
 		row.itemR(md, "dynamic")
@@ -346,16 +361,26 @@
 	
 	def UV_PROJECT(self, layout, ob, md):
 		if ob.type == 'MESH':
-			layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
-			#layout.itemR(md, "projectors")
+			layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
 			layout.itemR(md, "image")
 			layout.itemR(md, "override_image")
-			layout.itemL(text="Aspect Ratio:")
-			col = layout.column(align=True)
-			col.itemR(md, "horizontal_aspect_ratio", text="Horizontal")
-			col.itemR(md, "vertical_aspect_ratio", text="Vertical")
-			
-			#"Projectors" don't work.
+
+			split = layout.split()
+
+			col = split.column()
+			col.itemL(text="Aspect Ratio:")
+
+			sub = col.column(align=True)
+			sub.itemR(md, "horizontal_aspect_ratio", text="Horizontal")
+			sub.itemR(md, "vertical_aspect_ratio", text="Vertical")
+
+			col = split.column()
+			col.itemL(text="Projectors:")
+
+			sub = col.column(align=True)
+			sub.itemR(md, "num_projectors", text="Number")
+			for proj in md.projectors:
+				sub.itemR(proj, "object", text="")
 		
 	def WAVE(self, layout, ob, md):
 		split = layout.split()
@@ -387,7 +412,7 @@
 		layout.itemR(md, "texture")
 		layout.itemR(md, "texture_coordinates")
 		if md.texture_coordinates == 'MAP_UV' and ob.type == 'MESH':
-			layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
+			layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
 		elif md.texture_coordinates == 'OBJECT':
 			layout.itemR(md, "texture_coordinates_object")
 		

Modified: branches/blender2.5/blender/release/ui/buttons_material.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_material.py	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/release/ui/buttons_material.py	2009-08-21 02:51:56 UTC (rev 22667)
@@ -48,7 +48,7 @@
 			col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="")
 			col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="")
 
-			if context.edit_object:
+			if ob.mode == 'EDIT':
 				row = layout.row(align=True)
 				row.itemO("object.material_slot_assign", text="Assign")
 				row.itemO("object.material_slot_select", text="Select")

Modified: branches/blender2.5/blender/release/ui/space_image.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_image.py	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/release/ui/space_image.py	2009-08-21 02:51:56 UTC (rev 22667)
@@ -247,7 +247,7 @@
 
 			"""
 			mesh = context.edit_object.data
-			row.item_pointerR(mesh, "active_uv_layer", mesh, "uv_layers")
+			row.item_pointerR(mesh, "active_uv_layer", mesh, "uv_textures")
 			"""
 
 		if ima:

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_modifier.h	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_modifier.h	2009-08-21 02:51:56 UTC (rev 22667)
@@ -90,7 +90,10 @@
 	eModifierTypeFlag_UsesPointCache = (1<<6),
 
 	/* For physics modifiers, max one per type */
-	eModifierTypeFlag_Single = (1<<7)
+	eModifierTypeFlag_Single = (1<<7),
+
+	/* Some modifier can't be added manually by user */
+	eModifierTypeFlag_NoUserAdd = (1<<8)
 } ModifierTypeFlag;
 
 typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-08-21 02:51:56 UTC (rev 22667)
@@ -8616,7 +8616,8 @@
 		mti->freeData = smokeHRModifier_freeData; 
 		mti->flags = eModifierTypeFlag_AcceptsMesh 
 				| eModifierTypeFlag_UsesPointCache
-				| eModifierTypeFlag_Single;
+				| eModifierTypeFlag_Single
+				| eModifierTypeFlag_NoUserAdd;
 		mti->deformVerts = smokeHRModifier_deformVerts;
 		mti->dependsOnTime = smokeHRModifier_dependsOnTime;
 		mti->updateDepgraph = smokeHRModifier_updateDepgraph;
@@ -8647,7 +8648,7 @@
 		mti = INIT_TYPE(Surface);
 		mti->type = eModifierTypeType_OnlyDeform;
 		mti->initData = surfaceModifier_initData;
-		mti->flags = eModifierTypeFlag_AcceptsMesh;
+		mti->flags = eModifierTypeFlag_AcceptsMesh|eModifierTypeFlag_NoUserAdd;
 		mti->dependsOnTime = surfaceModifier_dependsOnTime;
 		mti->freeData = surfaceModifier_freeData; 
 		mti->deformVerts = surfaceModifier_deformVerts;

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-08-21 02:51:56 UTC (rev 22667)
@@ -100,6 +100,8 @@
 #define UI_BLOCK_KEEP_OPEN		256
 #define UI_BLOCK_POPUP			512
 #define UI_BLOCK_OUT_1			1024
+#define UI_BLOCK_NO_FLIP		2048
+#define UI_BLOCK_POPUP_MEMORY	4096
 
 /* uiPopupBlockHandle->menuretval */
 #define UI_RETURN_CANCEL	1       /* cancel all menus cascading */
@@ -254,8 +256,6 @@
 void uiPupMenuError(struct bContext *C, char *str, ...);
 void uiPupMenuReports(struct bContext *C, struct ReportList *reports);
 
-void uiPupMenuSetActive(int val);
-
 /* Popup Blocks
  *
  * Functions used to create popup blocks. These are like popup menus

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-21 00:46:36 UTC (rev 22666)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-21 02:51:56 UTC (rev 22667)
@@ -225,6 +225,7 @@
 	uiStyle *style= U.uistyles.first;	// XXX pass on as arg
 	uiBut *bt;
 	int i = 0, j, x1addval= offset, nextcol;
+	int lastcol= 0, col= 0;
 	
 	uiStyleFontSet(&style->widget);
 	
@@ -237,18 +238,26 @@
 
 			if(j > i) i = j;
 		}
+
+		if(bt->next && bt->x1 < bt->next->x1)
+			lastcol++;
 	}
 
 	/* cope with multi collumns */
 	bt= block->buttons.first;
 	while(bt) {
-		if(bt->next && bt->x1 < bt->next->x1)
+		if(bt->next && bt->x1 < bt->next->x1) {
 			nextcol= 1;
+			col++;
+		}
 		else nextcol= 0;
 		
 		bt->x1 = x1addval;
 		bt->x2 = bt->x1 + i + block->bounds;
 		
+		if(col == lastcol)
+			bt->x2= MAX2(bt->x2, offset + block->minbounds);
+
 		ui_check_but(bt);	// clips text again
 		
 		if(nextcol)
@@ -281,7 +290,7 @@
 	
   			if(bt->x2 > block->maxx) block->maxx= bt->x2;
 			if(bt->y2 > block->maxy) block->maxy= bt->y2;
-			
+
 			bt= bt->next;
 		}
 		
@@ -291,6 +300,8 @@
 		block->maxy += block->bounds;
 	}
 
+	block->maxx= block->minx + MAX2(block->maxx - block->minx, block->minbounds);
+
 	/* hardcoded exception... but that one is annoying with larger safety */ 
 	bt= block->buttons.first;
 	if(bt && strncmp(bt->str, "ERROR", 5)==0) xof= 10;
@@ -2286,8 +2297,12 @@
 				dynstr= BLI_dynstr_new();
 				BLI_dynstr_appendf(dynstr, "%s%%t", RNA_property_ui_name(prop));
 				for(i=0; i<totitem; i++) {
-					if(!item[i].identifier[0])
-						BLI_dynstr_append(dynstr, "|%l");
+					if(!item[i].identifier[0]) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list