[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21313] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Thu Jul 2 13:23:20 CEST 2009


Revision: 21313
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21313
Author:   ton
Date:     2009-07-02 13:23:19 +0200 (Thu, 02 Jul 2009)

Log Message:
-----------
2.5

More toolbar functionality for workflow review.

- Split the region in two parts, bottom has the Tool Properties, the
  top part shows 2 panels, one for python defined tools, other for a
  "tool shelf" which (later) will get saved in files.
- Added a full context driven framework for this toolbar, showing 
  the tools depending on 3D window 'mode'. Both python defined tools
  as the shelf respect this. So - for example - you will see different
  tools in editmode mesh, as in vertex paint mode, etc.
- First template for the python tools will be committed after this commit;
  it has placeholder tools to just show/test functioning.

NOTE: if you had saved a layout that shows tools region, open/close it
once to get the new region created for properties.

TODO:

- Moving paint properties to tool settings
- Test a layout with horizontal toolbar (without properties)
- Bring back floating panels, and put tool-properties here. (as option)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_screen.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-07-02 11:23:19 UTC (rev 21313)
@@ -91,6 +91,9 @@
 	/* region type definitions */
 	ListBase	regiontypes;
 	
+	/* tool shelf definitions */
+	ListBase toolshelf;
+	
 	/* read and write... */
 	
 	/* default keymaps to add */
@@ -139,7 +142,7 @@
 
 	/* menu type definitions */
 	ListBase menutypes;
-
+	
 	/* hardcoded constraints, smaller than these values region is not visible */
 	int			minsizex, minsizey;
 	/* default keymaps to add */

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-07-02 11:23:19 UTC (rev 21313)
@@ -78,6 +78,8 @@
 	}
 	
 	BLI_freelistN(&st->regiontypes);
+	BLI_freelistN(&st->toolshelf);
+
 }
 
 void BKE_spacetypes_free(void)

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-07-02 11:23:19 UTC (rev 21313)
@@ -293,13 +293,15 @@
 	float maxyi= maxy - 1.0f;
 	float facxi= 1.0f/(maxxi-minxi); /* for uv */
 	float facyi= 1.0f/(maxyi-minyi);
-	int a, tot= 0;
+	int a, tot= 0, minsize;
 	
-	if(2.0f*rad > rect->ymax-rect->ymin)
-		rad= 0.5f*(rect->ymax-rect->ymin);
+	minsize= MIN2(rect->xmax-rect->xmin, rect->ymax-rect->ymin);
+	
+	if(2.0f*rad > minsize)
+		rad= 0.5f*minsize;
 
-	if(2.0f*(radi+1.0f) > rect->ymax-rect->ymin)
-		radi= 0.5f*(rect->ymax-rect->ymin) - 1.0f;
+	if(2.0f*(radi+1.0f) > minsize)
+		radi= 0.5f*minsize - 1.0f;
 	
 	/* mult */
 	for(a=0; a<9; a++) {

Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-07-02 11:23:19 UTC (rev 21313)
@@ -261,6 +261,7 @@
 		
 		if(BLI_isect_rcti(winrct, &ar->winrct, NULL)) {
 			if(ar->flag & RGN_FLAG_HIDDEN);
+			else if(ar->alignment & RGN_SPLIT_PREV);
 			else if(ar->alignment==RGN_OVERLAP_LEFT) {
 				winrct->xmin= ar->winrct.xmax + 1;
 			}

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c	2009-07-02 11:23:19 UTC (rev 21313)
@@ -97,29 +97,45 @@
 
 ARegion *view3d_has_tools_region(ScrArea *sa)
 {
-	ARegion *ar, *arnew;
+	ARegion *ar, *artool=NULL, *arprops=NULL, *arhead;
 	
-	for(ar= sa->regionbase.first; ar; ar= ar->next)
+	for(ar= sa->regionbase.first; ar; ar= ar->next) {
 		if(ar->regiontype==RGN_TYPE_TOOLS)
-			return ar;
+			artool= ar;
+		if(ar->regiontype==RGN_TYPE_TOOL_PROPS)
+			arprops= ar;
+	}
 	
-	/* add subdiv level; after header */
-	for(ar= sa->regionbase.first; ar; ar= ar->next)
-		if(ar->regiontype==RGN_TYPE_HEADER)
-			break;
+	/* tool region hide/unhide also hides props */
+	if(arprops && artool) return artool;
 	
-	/* is error! */
-	if(ar==NULL) return NULL;
+	if(artool==NULL) {
+		/* add subdiv level; after header */
+		for(arhead= sa->regionbase.first; arhead; arhead= arhead->next)
+			if(arhead->regiontype==RGN_TYPE_HEADER)
+				break;
+		
+		/* is error! */
+		if(arhead==NULL) return NULL;
+		
+		artool= MEM_callocN(sizeof(ARegion), "tools for view3d");
+		
+		BLI_insertlinkafter(&sa->regionbase, arhead, artool);
+		artool->regiontype= RGN_TYPE_TOOLS;
+		artool->alignment= RGN_OVERLAP_LEFT;
+		artool->flag = RGN_FLAG_HIDDEN;
+	}
+
+	if(arprops==NULL) {
+		/* add extra subdivided region for tool properties */
+		arprops= MEM_callocN(sizeof(ARegion), "tool props for view3d");
+		
+		BLI_insertlinkafter(&sa->regionbase, artool, arprops);
+		arprops->regiontype= RGN_TYPE_TOOL_PROPS;
+		arprops->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV;
+	}
 	
-	arnew= MEM_callocN(sizeof(ARegion), "tools for view3d");
-	
-	BLI_insertlinkafter(&sa->regionbase, ar, arnew);
-	arnew->regiontype= RGN_TYPE_TOOLS;
-	arnew->alignment= RGN_OVERLAP_LEFT;
-	
-	arnew->flag = RGN_FLAG_HIDDEN;
-	
-	return arnew;
+	return artool;
 }
 
 /* ****************************************************** */
@@ -559,9 +575,11 @@
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
 }
 
+
+
 static void view3d_tools_area_draw(const bContext *C, ARegion *ar)
 {
-	ED_region_panels(C, ar, 1, NULL);
+	ED_region_panels(C, ar, 1, view3d_context_string(C));
 }
 
 /*
@@ -860,7 +878,21 @@
 	BLI_addhead(&st->regiontypes, art);
 	
 	view3d_toolbar_register(art);
+
+	/* regions: tool properties */
+	art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
+	art->regionid = RGN_TYPE_TOOL_PROPS;
+	art->minsizex= 0;
+	art->minsizey= 120;
+	art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
+	art->listener= view3d_buttons_area_listener;
+	art->init= view3d_tools_area_init;
+	art->draw= view3d_tools_area_draw;
+	BLI_addhead(&st->regiontypes, art);
 	
+	view3d_tool_props_register(art);
+	
+	
 	/* regions: header */
 	art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
 	art->regionid = RGN_TYPE_HEADER;

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-07-02 11:23:19 UTC (rev 21313)
@@ -136,9 +136,11 @@
 void VIEW3D_OT_properties(struct wmOperatorType *ot);
 void view3d_buttons_register(struct ARegionType *art);
 
-/* view3d_buttons.c */
+/* view3d_toolbar.c */
 void VIEW3D_OT_toolbar(struct wmOperatorType *ot);
 void view3d_toolbar_register(struct ARegionType *art);
+void view3d_tool_props_register(struct ARegionType *art);
+char *view3d_context_string(const struct bContext *C);
 
 /* view3d_snap.c */
 int minmax_verts(Object *obedit, float *min, float *max);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-07-02 11:01:03 UTC (rev 21312)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-07-02 11:23:19 UTC (rev 21313)
@@ -150,9 +150,46 @@
 
 /* ******************* */
 
+char *view3d_context_string(const bContext *C)
+{
+	Object *obedit= CTX_data_edit_object(C);
+
+	if(obedit) {
+		switch(obedit->type) {
+			case OB_MESH:
+				return "editmode_mesh";
+			case OB_CURVE:
+				return "editmode_curve";
+			case OB_SURF:
+				return "editmode_surface";
+			case OB_FONT:
+				return "editmode_text";
+			case OB_ARMATURE:
+				return "editmode_armature";
+			case OB_MBALL:
+				return "editmode_mball";
+			case OB_LATTICE:
+				return "editmode_lattice";
+		}
+	}
+	else {
+		Object *ob = CTX_data_active_object(C);
+		
+		if(ob && (ob->flag & OB_POSEMODE)) return "posemode";
+		else if (G.f & G_SCULPTMODE)  return "sculptmode";
+		else if (G.f & G_WEIGHTPAINT) return "weightpaint";
+		else if (G.f & G_VERTEXPAINT) return "vertexpaint";
+		else if (G.f & G_TEXTUREPAINT) return "texturepaint";
+		else if(G.f & G_PARTICLEEDIT) return "particlemode";
+	}
+	
+	return "objectmode";
+}
+
 typedef struct CustomTool {
 	struct CustomTool *next, *prev;
 	char opname[OP_MAX_TYPENAME];
+	char context[OP_MAX_TYPENAME];
 } CustomTool;
 
 static void operator_call_cb(struct bContext *C, void *arg_listbase, void *arg2)
@@ -164,6 +201,7 @@
 		
 		BLI_addtail(arg_listbase, ct);
 		BLI_strncpy(ct->opname, ot->idname, OP_MAX_TYPENAME);
+		BLI_strncpy(ct->context, view3d_context_string(C), OP_MAX_TYPENAME);
 	}
 		
 }
@@ -221,43 +259,28 @@
 }
 
 
-static void view3d_panel_tools(const bContext *C, Panel *pa)
+static void view3d_panel_tool_shelf(const bContext *C, Panel *pa)
 {
-	static ListBase tools= {NULL, NULL};
-	Object *obedit= CTX_data_edit_object(C);
-//	Object *obact = CTX_data_active_object(C);
+	SpaceLink *sl= CTX_wm_space_data(C);
+	SpaceType *st= NULL;
 	uiLayout *col;
+	const char *context= view3d_context_string(C);
 	
-	if(obedit) {
-		if(obedit->type==OB_MESH) {
-			
-			col= uiLayoutColumn(pa->layout, 1);
-			uiItemFullO(col, NULL, 0, "MESH_OT_spin", NULL, WM_OP_INVOKE_REGION_WIN);
-			uiItemFullO(col, NULL, 0, "MESH_OT_screw", NULL, WM_OP_INVOKE_REGION_WIN);
-			
-			if(tools.first) {
-				CustomTool *ct;
-				
-				for(ct= tools.first; ct; ct= ct->next) {
-					col= uiLayoutColumn(pa->layout, 1);
-					uiItemFullO(col, NULL, 0, ct->opname, NULL, WM_OP_INVOKE_REGION_WIN);
-				}
+	if(sl)
+		st= BKE_spacetype_from_id(sl->spacetype);
+	
+	if(st && st->toolshelf.first) {
+		CustomTool *ct;
+		
+		for(ct= st->toolshelf.first; ct; ct= ct->next) {
+			if(0==strncmp(context, ct->context, OP_MAX_TYPENAME)) {
+				col= uiLayoutColumn(pa->layout, 1);
+				uiItemFullO(col, NULL, 0, ct->opname, NULL, WM_OP_INVOKE_REGION_WIN);
 			}
-			col= uiLayoutColumn(pa->layout, 1);
-			uiDefBlockBut(uiLayoutGetBlock(pa->layout), tool_search_menu, &tools, "Add Operator", 0, 0, UI_UNIT_X, UI_UNIT_Y, "Add tool");
 		}
 	}
-	else {
-		
-		col= uiLayoutColumn(pa->layout, 1);
-		uiItemFullO(col, NULL, 0, "OBJECT_OT_delete", NULL, WM_OP_INVOKE_REGION_WIN);
-		uiItemFullO(col, NULL, 0, "OBJECT_OT_primitive_add", NULL, WM_OP_INVOKE_REGION_WIN);
-		
-		col= uiLayoutColumn(pa->layout, 1);
-		uiItemFullO(col, NULL, 0, "OBJECT_OT_parent_set", NULL, WM_OP_INVOKE_REGION_WIN);
-		uiItemFullO(col, NULL, 0, "OBJECT_OT_parent_clear", NULL, WM_OP_INVOKE_REGION_WIN);
-		
-	}
+	col= uiLayoutColumn(pa->layout, 1);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list