[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22526] branches/blender2.5/blender/source /blender/editors/space_view3d/view3d_header.c: 2.5 Object mode:

Nicholas Bishop nicholasbishop at gmail.com
Sun Aug 16 18:38:33 CEST 2009


Revision: 22526
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22526
Author:   nicholasbishop
Date:     2009-08-16 18:38:32 +0200 (Sun, 16 Aug 2009)

Log Message:
-----------
2.5 Object mode:

* Cleaned up code in 3d header; still requires custom code for creating the object mode button, but removed all the nasty V3D_XXXMODE stuff, and the mode switching code is now just an operator call.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-08-16 16:35:14 UTC (rev 22525)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-08-16 16:38:32 UTC (rev 22526)
@@ -80,6 +80,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_enum_types.h"
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -105,16 +106,6 @@
  * This can be cleaned when I make some new 'mode' icons.
  */
 
-#define V3D_OBJECTMODE_SEL			ICON_OBJECT_DATA
-#define V3D_EDITMODE_SEL			ICON_EDITMODE_HLT
-#define V3D_SCULPTMODE_SEL			ICON_SCULPTMODE_HLT
-#define V3D_FACESELECT_SEL			ICON_FACESEL_HLT	/* this is not a mode anymore - just a switch */
-#define V3D_VERTEXPAINTMODE_SEL		ICON_VPAINT_HLT
-#define V3D_TEXTUREPAINTMODE_SEL	ICON_TPAINT_HLT
-#define V3D_WEIGHTPAINTMODE_SEL		ICON_WPAINT_HLT
-#define V3D_POSEMODE_SEL			ICON_POSE_HLT
-#define V3D_PARTICLEEDITMODE_SEL	ICON_ANIM
-
 #define TEST_EDITMESH	if(obedit==0) return; \
 						if( (v3d->lay & obedit->lay)==0 ) return;
 
@@ -2965,10 +2956,7 @@
 
 	str += sprintf(str, "Mode: %%t");
 	
-	if(ob)
-		str += sprintf(str, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT_DATA);
-	else
-		str += sprintf(str, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT_DATA);
+	str += sprintf(str, formatstr, "Object Mode", OB_MODE_OBJECT, ICON_OBJECT_DATA);
 	
 	if(ob==NULL) return string;
 	
@@ -2977,26 +2965,25 @@
 		|| (ob->type == OB_CURVE) || (ob->type == OB_SURF) || (ob->type == OB_FONT)
 		|| (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) {
 		
-		str += sprintf(str, formatstr, "Edit Mode", V3D_EDITMODE_SEL, ICON_EDITMODE_HLT);
+		str += sprintf(str, formatstr, "Edit Mode", OB_MODE_EDIT, ICON_EDITMODE_HLT);
 	}
 
 	if (ob->type == OB_MESH) {
 
-		str += sprintf(str, formatstr, "Sculpt Mode", V3D_SCULPTMODE_SEL, ICON_SCULPTMODE_HLT);
-		/*str += sprintf(str, formatstr, "Face Select", V3D_FACESELECTMODE_SEL, ICON_FACESEL_HLT);*/
-		str += sprintf(str, formatstr, "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, ICON_VPAINT_HLT);
-		str += sprintf(str, formatstr, "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, ICON_TPAINT_HLT);
-		str += sprintf(str, formatstr, "Weight Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT);
+		str += sprintf(str, formatstr, "Sculpt Mode", OB_MODE_SCULPT, ICON_SCULPTMODE_HLT);
+		str += sprintf(str, formatstr, "Vertex Paint", OB_MODE_VERTEX_PAINT, ICON_VPAINT_HLT);
+		str += sprintf(str, formatstr, "Texture Paint", OB_MODE_TEXTURE_PAINT, ICON_TPAINT_HLT);
+		str += sprintf(str, formatstr, "Weight Paint", OB_MODE_WEIGHT_PAINT, ICON_WPAINT_HLT);
 	}
 
 	
 	/* if active object is an armature */
 	if (ob->type==OB_ARMATURE) {
-		str += sprintf(str, formatstr, "Pose Mode", V3D_POSEMODE_SEL, ICON_POSE_HLT);
+		str += sprintf(str, formatstr, "Pose Mode", OB_MODE_POSE, ICON_POSE_HLT);
 	}
 
 	if (ob->particlesystem.first) {
-		str += sprintf(str, formatstr, "Particle Mode", V3D_PARTICLEEDITMODE_SEL, ICON_PARTICLEMODE);
+		str += sprintf(str, formatstr, "Particle Mode", OB_MODE_PARTICLE_EDIT, ICON_PARTICLEMODE);
 	}
 
 	return (string);
@@ -3084,11 +3071,10 @@
 	ToolSettings *ts= CTX_data_tool_settings(C);
 	ScrArea *sa= CTX_wm_area(C);
 	View3D *v3d= sa->spacedata.first;
-	Base *basact= CTX_data_active_base(C);
-	Object *ob= CTX_data_active_object(C);
 	Object *obedit = CTX_data_edit_object(C);
 	EditMesh *em= NULL;
 	int bit, ctrl= win->eventstate->ctrl, shift= win->eventstate->shift;
+	PointerRNA props_ptr;
 	
 	if(obedit && obedit->type==OB_MESH) {
 		em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
@@ -3135,79 +3121,10 @@
 // XXX		start_game();
 		break;
 	case B_MODESELECT:
-		if (v3d->modeselect == V3D_OBJECTMODE_SEL) {
-			
-			v3d->flag &= ~V3D_MODE;
-			ED_object_toggle_modes(C, ob->mode);
-			ED_armature_exit_posemode(C, basact);
-			if(obedit) 
-				ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-		} 
-		else if (v3d->modeselect == V3D_EDITMODE_SEL) {
-			if(!obedit) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_enter_editmode(C, EM_WAITCURSOR);
-				ED_undo_push(C, "Original");	/* here, because all over code enter_editmode is abused */
-			}
-		} 
-		else if (v3d->modeselect == V3D_SCULPTMODE_SEL) {
-			if (ob && !(ob->mode & OB_MODE_SCULPT)) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_toggle_modes(C, ob->mode);
-				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-					
-				WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
-			}
-		}
-		else if (v3d->modeselect == V3D_VERTEXPAINTMODE_SEL) {
-			if (ob && !(ob->mode & OB_MODE_VERTEX_PAINT)) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_toggle_modes(C, ob->mode);
-				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-				
-				WM_operator_name_call(C, "PAINT_OT_vertex_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
-			}
-		} 
-		else if (v3d->modeselect == V3D_TEXTUREPAINTMODE_SEL) {
-			if (ob && !(ob->mode & OB_MODE_TEXTURE_PAINT)) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_toggle_modes(C, ob->mode);
-				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-
-				WM_operator_name_call(C, "PAINT_OT_texture_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
-			}
-		} 
-		else if (v3d->modeselect == V3D_WEIGHTPAINTMODE_SEL) {
-			if (ob && ob->type == OB_MESH && !(ob->mode & OB_MODE_WEIGHT_PAINT)) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_toggle_modes(C, ob->mode);
-				if(obedit) 
-					ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-				
-				WM_operator_name_call(C, "PAINT_OT_weight_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
-			}
-		} 
-		else if (v3d->modeselect == V3D_POSEMODE_SEL) {
-			
-			if (ob) {
-				v3d->flag &= ~V3D_MODE;
-				if(obedit) 
-					ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-				
-				ED_armature_enter_posemode(C, basact);
-			}
-		}
-		else if(v3d->modeselect == V3D_PARTICLEEDITMODE_SEL){
-			if (ob && !(ob->mode & OB_MODE_PARTICLE_EDIT)) {
-				v3d->flag &= ~V3D_MODE;
-				ED_object_toggle_modes(C, ob->mode);
-				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-
-				WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
-			}
-		}
-		break;
-		
+		WM_operator_properties_create(&props_ptr, "OBJECT_OT_mode_set");
+		RNA_enum_set(&props_ptr, "mode", v3d->modeselect);
+		WM_operator_name_call(C, "OBJECT_OT_mode_set", WM_OP_EXEC_REGION_WIN, &props_ptr);
+		break;		
 	case B_AROUND:
 // XXX		handle_view3d_around(); /* copies to other 3d windows */
 		break;
@@ -3446,6 +3363,20 @@
 	}
 }
 
+/* Returns the icon associated with an object mode */
+static int object_mode_icon(int mode)
+{
+	EnumPropertyItem *item = object_mode_items;
+	
+	while(item->name != NULL) {
+		if(item->value == mode)
+			return item->icon;
+		++item;
+	}
+
+	return ICON_OBJECT_DATAMODE;
+}
+
 void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
 {
 	ARegion *ar= CTX_wm_region(C);
@@ -3468,16 +3399,10 @@
 	uiBlockSetEmboss(block, UI_EMBOSS);
 	
 	/* mode */
-	v3d->modeselect = V3D_OBJECTMODE_SEL;
-	
-	if (obedit) v3d->modeselect = V3D_EDITMODE_SEL;
-	else if(ob && (ob->mode & OB_MODE_POSE)) v3d->modeselect = V3D_POSEMODE_SEL;
-	else if (ob && (ob->mode & OB_MODE_SCULPT))  v3d->modeselect = V3D_SCULPTMODE_SEL;
-	else if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) v3d->modeselect = V3D_WEIGHTPAINTMODE_SEL;
-	else if (ob && (ob->mode & OB_MODE_VERTEX_PAINT)) v3d->modeselect = V3D_VERTEXPAINTMODE_SEL;
-	else if (ob && (ob->mode & OB_MODE_TEXTURE_PAINT)) v3d->modeselect = V3D_TEXTUREPAINTMODE_SEL;
-	/*else if(G.f & G_FACESELECT) v3d->modeselect = V3D_FACESELECTMODE_SEL;*/
-	else if(ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) v3d->modeselect = V3D_PARTICLEEDITMODE_SEL;
+	if(ob)
+		v3d->modeselect = ob->mode;
+	else
+		v3d->modeselect = OB_MODE_OBJECT;
 		
 	v3d->flag &= ~V3D_MODE;
 	
@@ -3488,9 +3413,9 @@
 	if(ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) v3d->flag |= V3D_WEIGHTPAINT;
 	if(ob && (ob->mode & OB_MODE_TEXTURE_PAINT)) v3d->flag |= V3D_TEXTUREPAINT;
 	if(paint_facesel_test(ob)) v3d->flag |= V3D_FACESELECT;
-	
-	uiDefIconTextButS(block, MENU, B_MODESELECT, (v3d->modeselect),view3d_modeselect_pup(scene) , 
-																xco,yco,126,20, &(v3d->modeselect), 0, 0, 0, 0, "Mode (Hotkeys: Tab, V, Ctrl Tab)");
+
+	uiDefIconTextButS(block, MENU, B_MODESELECT, object_mode_icon(v3d->modeselect), view3d_modeselect_pup(scene) , 
+			  xco,yco,126,20, &(v3d->modeselect), 0, 0, 0, 0, "Mode (Hotkeys: Tab, V, Ctrl Tab)");
 	header_xco_step(ar, &xco, &yco, &maxco, 126+8);
 	
 	/* DRAWTYPE */





More information about the Bf-blender-cvs mailing list