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

Nicholas Bishop nicholasbishop at gmail.com
Fri Aug 21 19:35:36 CEST 2009


Revision: 22682
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22682
Author:   nicholasbishop
Date:     2009-08-21 19:35:35 +0200 (Fri, 21 Aug 2009)

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

* Made object mode an enum, shows better in the debugger
* Added a toggle mode to the set object mode operator
* Toggling a mode on and off goes back to the previous mode, not just object mode
* Changed the vertex mode and weight mode shortcuts to call the toggle mode operator

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-08-21 16:28:49 UTC (rev 22681)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-08-21 17:35:35 UTC (rev 22682)
@@ -7092,19 +7092,32 @@
 static int object_mode_set_exec(bContext *C, wmOperator *op)
 {
 	Object *ob= CTX_data_active_object(C);
-	int mode = RNA_enum_get(op->ptr, "mode");
+	ObjectMode mode = RNA_enum_get(op->ptr, "mode");
+	ObjectMode restore_mode = ob->mode;
+	int toggle = RNA_boolean_get(op->ptr, "toggle");
 
 	if(!ob)
 		return OPERATOR_CANCELLED;
 
-	/* Exit off current mode */
-	if(ob->mode != OB_MODE_OBJECT)
+	/* Exit current mode if it's not the mode we're setting */
+	if(ob->mode != OB_MODE_OBJECT && ob->mode != mode)
 		WM_operator_name_call(C, object_mode_op_string(ob->mode), WM_OP_EXEC_REGION_WIN, NULL);
 
-	/* Enter new mode */
-	if(mode != OB_MODE_OBJECT)
-		WM_operator_name_call(C, object_mode_op_string(mode), WM_OP_EXEC_REGION_WIN, NULL);
+	if(mode != OB_MODE_OBJECT) {
+		/* Enter new mode */
+		if(ob->mode != mode || toggle)
+			WM_operator_name_call(C, object_mode_op_string(mode), WM_OP_EXEC_REGION_WIN, NULL);
 
+		if(toggle) {
+			if(ob->mode == mode)
+				/* For toggling, store old mode so we know what to go back to */
+				ob->restore_mode = restore_mode;
+			else if(ob->restore_mode != OB_MODE_OBJECT && ob->restore_mode != mode) {
+				WM_operator_name_call(C, object_mode_op_string(ob->restore_mode), WM_OP_EXEC_REGION_WIN, NULL);
+			}
+		}
+	}
+
 	return OPERATOR_FINISHED;
 }
 
@@ -7127,6 +7140,8 @@
 	
 	prop= RNA_def_enum(ot->srna, "mode", object_mode_items, 0, "Mode", "");
 	RNA_def_enum_funcs(prop, object_mode_set_itemsf);
+
+	RNA_def_boolean(ot->srna, "toggle", 0, "Toggle", "");
 }
 
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-08-21 16:28:49 UTC (rev 22681)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-08-21 17:35:35 UTC (rev 22682)
@@ -106,8 +106,12 @@
 	ListBase *keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0);
 	wmKeymapItem *km;
 	
-	WM_keymap_add_item(keymap, "PAINT_OT_vertex_paint_toggle", VKEY, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_toggle", TABKEY, KM_PRESS, KM_CTRL, 0);
+	km = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", VKEY, KM_PRESS, 0, 0);
+	RNA_enum_set(km->ptr, "mode", OB_MODE_VERTEX_PAINT);
+	RNA_boolean_set(km->ptr, "toggle", 1);
+	km = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, KM_CTRL, 0);
+	RNA_enum_set(km->ptr, "mode", OB_MODE_WEIGHT_PAINT);
+	RNA_boolean_set(km->ptr, "toggle", 1);
 	
 	WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_toolbar", TKEY, KM_PRESS, 0, 0);

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h	2009-08-21 16:28:49 UTC (rev 22681)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h	2009-08-21 17:35:35 UTC (rev 22682)
@@ -116,8 +116,8 @@
 	ListBase defbase;
 	ListBase modifiers; /* list of ModifierData structures */
 
-	/* For now just a flag for sculpt mode, eventually we make the other modes local too */
-	int mode, pad2;
+	int mode;           /* Local object mode */
+	int restore_mode;   /* Keep track of what mode to return to after toggling a mode */
 
 	/* materials */
 	struct Material **mat;	/* material slots */
@@ -234,7 +234,7 @@
 	unsigned int state;			/* bit masks of game controllers that are active */
 	unsigned int init_state;	/* bit masks of initial state as recorded by the users */
 
-	int restore_mode;		/* Keep track of what mode to return to after edit mode exits */
+	int pad2;
 
 	ListBase gpulamp;		/* runtime, for lamps only */
 } Object;
@@ -511,17 +511,17 @@
 #define OB_LOCK_SCALE	448
 
 /* ob->mode */
-#define OB_MODE_OBJECT          0
-#define OB_MODE_EDIT            1
-#define OB_MODE_SCULPT          2
-#define OB_MODE_VERTEX_PAINT    4
-#define OB_MODE_WEIGHT_PAINT    8
-#define OB_MODE_TEXTURE_PAINT  16
-#define OB_MODE_PARTICLE_EDIT  32
-#define OB_MODE_POSE           64
+typedef enum ObjectMode {
+	OB_MODE_OBJECT = 0,
+	OB_MODE_EDIT = 1,
+	OB_MODE_SCULPT = 2,
+	OB_MODE_VERTEX_PAINT = 4,
+	OB_MODE_WEIGHT_PAINT = 8,
+	OB_MODE_TEXTURE_PAINT = 16,
+	OB_MODE_PARTICLE_EDIT = 32,
+	OB_MODE_POSE = 64
+} ObjectMode;
 
-/* ob->softflag in DNA_object_force.h */
-
 #ifdef __cplusplus
 }
 #endif





More information about the Bf-blender-cvs mailing list