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

Ton Roosendaal ton at blender.org
Wed Jul 29 19:56:38 CEST 2009


Revision: 22019
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22019
Author:   ton
Date:     2009-07-29 19:56:38 +0200 (Wed, 29 Jul 2009)

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

Operator goodies!

--- Macro operators

Operators now can consist of multiple operators. Such a macro operator
is identical and behaves identical to other opererators. Macros can
also be constructed of macros even! Currently only hardcoded macros are
implemented, this to solve combined operators such as 'add duplicate' or
'extrude' (both want a transform appended).

Usage is simple:
- WM_operatortype_append_macro() : add new operatortype, name, flags
- WM_operatortype_macro_define() : add existing operator to macro

(Note: macro_define will also allow properties to be set, doesnt work
 right now)

On converting the macro wmOperatorType to a real operator, it makes a
list of all operators, and the standard macro callbacks (exec, invoke,
modal, poll) just will use all.

Important note; switching to a modal operator only works as last in the
chain now!

Macros implemented for duplicate, extrude and rip. Tool menu works fine
for it, also the redo hotkey F4 works properly.

--- Operator redo fix

The operators use the undo system to switch back, but this could give
errors if other actions added undo pushes (buttons, outliner). Now the
redo for operator searches back for the correct undo level.

This fixes issues with many redos.

Note for brecht: removed the ED_undo_push for buttons... it was called
on *every* button now, which is probably too much? For example, using
the 'toolbar' redo also caused this...

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_blender.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
    branches/blender2.5/blender/source/blender/editors/include/ED_util.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c
    branches/blender2.5/blender/source/blender/editors/util/editmode_undo.c
    branches/blender2.5/blender/source/blender/editors/util/undo.c
    branches/blender2.5/blender/source/blender/editors/util/util_intern.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_blender.h	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_blender.h	2009-07-29 17:56:38 UTC (rev 22019)
@@ -71,6 +71,7 @@
 /* global undo */
 extern void BKE_write_undo(struct bContext *C, char *name);
 extern void BKE_undo_step(struct bContext *C, int step);
+extern void BKE_undo_name(struct bContext *C, const char *name);
 extern void BKE_reset_undo(void);
 extern char *BKE_undo_menu_string(void);
 extern void BKE_undo_number(struct bContext *C, int nr);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -688,6 +688,22 @@
 	BKE_undo_step(C, 0);
 }
 
+/* go back to the last occurance of name in stack */
+void BKE_undo_name(bContext *C, const char *name)
+{
+	UndoElem *uel;
+	
+	for(uel= undobase.last; uel; uel= uel->prev) {
+		if(strcmp(name, uel->name)==0)
+			break;
+	}
+	if(uel && uel->prev) {
+		curundo= uel->prev;
+		BKE_undo_step(C, 0);
+	}
+}
+
+
 char *BKE_undo_menu_string(void)
 {
 	UndoElem *uel;

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_util.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_util.h	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_util.h	2009-07-29 17:56:38 UTC (rev 22019)
@@ -44,6 +44,7 @@
 /* undo.c */
 void	ED_undo_push			(struct bContext *C, char *str);
 void	ED_undo_push_op			(struct bContext *C, struct wmOperator *op);
+void	ED_undo_pop_op			(struct bContext *C, struct wmOperator *op);
 void	ED_undo_pop				(struct bContext *C);
 void	ED_undo_redo			(struct bContext *C);
 void	ED_OT_undo				(struct wmOperatorType *ot);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -358,8 +358,8 @@
 		if(after.rename_orig)
 			MEM_freeN(after.rename_orig);
 		
-		if(after.undostr[0])
-			ED_undo_push(C, after.undostr);
+//		if(after.undostr[0])
+//			ED_undo_push(C, after.undostr);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -1683,9 +1683,6 @@
 	mesh_duplicate_exec(C, op);
 	WM_cursor_wait(0);
 	
-	RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
-	WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
-	
 	return OPERATOR_FINISHED;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -704,7 +704,7 @@
 	Scene *scene= CTX_data_scene(C);
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
-	int constraint_axis[3] = {0, 0, 1};
+//	int constraint_axis[3] = {0, 0, 1};
 
 	extrude_mesh(scene, obedit, em, op);
 
@@ -717,11 +717,11 @@
 	RNA_boolean_set(op->ptr, "mirror", 0);
 	
 	/* the following two should only be set when extruding faces */
-	RNA_enum_set(op->ptr, "constraint_orientation", V3D_MANIP_NORMAL);
-	RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
+//	RNA_enum_set(op->ptr, "constraint_orientation", V3D_MANIP_NORMAL);
+//	RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
 	
 	
-	WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr);
+//	WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr);
 
 	return OPERATOR_FINISHED;
 }
@@ -4991,9 +4991,9 @@
 
 	BKE_mesh_end_editmesh(obedit->data, em);
 
-	RNA_enum_set(op->ptr, "proportional", 0);
-	RNA_boolean_set(op->ptr, "mirror", 0);
-	WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr);
+//	RNA_enum_set(op->ptr, "proportional", 0);
+//	RNA_boolean_set(op->ptr, "mirror", 0);
+//	WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr);
 
 	return OPERATOR_FINISHED;
 }

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -230,6 +230,8 @@
 
 void ED_operatortypes_mesh(void)
 {
+	wmOperatorType *ot;
+	
 	WM_operatortype_append(MESH_OT_select_all_toggle);
 	WM_operatortype_append(MESH_OT_select_more);
 	WM_operatortype_append(MESH_OT_select_less);
@@ -313,6 +315,20 @@
 	WM_operatortype_append(MESH_OT_edge_specials);
 	WM_operatortype_append(MESH_OT_face_specials);
 	WM_operatortype_append(MESH_OT_specials);
+	
+	/* macros */
+	ot= WM_operatortype_append_macro("MESH_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
+	WM_operatortype_macro_define(ot, "MESH_OT_duplicate");
+	WM_operatortype_macro_define(ot, "TFM_OT_translate");
+
+	ot= WM_operatortype_append_macro("MESH_OT_rip_move", "Rip", OPTYPE_UNDO|OPTYPE_REGISTER);
+	WM_operatortype_macro_define(ot, "MESH_OT_rip");
+	WM_operatortype_macro_define(ot, "TFM_OT_translate");
+
+	ot= WM_operatortype_append_macro("MESH_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER);
+	WM_operatortype_macro_define(ot, "MESH_OT_extrude");
+	WM_operatortype_macro_define(ot, "TFM_OT_translate");
+	
 }
 
 /* note mesh keymap also for other space? */
@@ -363,7 +379,7 @@
 	WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0);
 	RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
 	
-	WM_keymap_add_item(keymap, "MESH_OT_extrude", EKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_extrude_move", EKEY, KM_PRESS, 0, 0);
 	
 	WM_keymap_add_item(keymap, "MESH_OT_spin", RKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_screw", NINEKEY, KM_PRESS, KM_CTRL, 0);
@@ -386,12 +402,12 @@
 	WM_keymap_add_item(keymap, "MESH_OT_colors_rotate",EIGHTKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_colors_mirror",EIGHTKEY, KM_PRESS, KM_ALT, 0);
 
-	WM_keymap_add_item(keymap, "MESH_OT_rip",VKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_rip_move",VKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_merge", MKEY, KM_PRESS, KM_ALT, 0);
 
 	/* add/remove */
 	WM_keymap_add_item(keymap, "MESH_OT_edge_face_add", FKEY, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "MESH_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0);
 						/* use KM_RELEASE because same key is used for tweaks */

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -6497,8 +6497,8 @@
 {
 	duplicate_exec(C, op);
 	
-	RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
-	WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
+//	RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
+//	WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
 
 	return OPERATOR_FINISHED;
 }

Modified: branches/blender2.5/blender/source/blender/editors/object/object_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_ops.c	2009-07-29 17:15:17 UTC (rev 22018)
+++ branches/blender2.5/blender/source/blender/editors/object/object_ops.c	2009-07-29 17:56:38 UTC (rev 22019)
@@ -63,6 +63,8 @@
 
 void ED_operatortypes_object(void)
 {
+	wmOperatorType *ot;
+	
 	WM_operatortype_append(OBJECT_OT_editmode_toggle);
 	WM_operatortype_append(OBJECT_OT_posemode_toggle);
 	WM_operatortype_append(OBJECT_OT_parent_set);
@@ -147,6 +149,13 @@
 
 	WM_operatortype_append(LATTICE_OT_select_all_toggle);
 	WM_operatortype_append(LATTICE_OT_make_regular);
+	
+	/* macros */
+	ot= WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
+	if(ot) {
+		WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate");
+		WM_operatortype_macro_define(ot, "TFM_OT_translate");
+	}
 }
 
 void ED_keymap_object(wmWindowManager *wm)
@@ -185,7 +194,7 @@
 	
 	WM_keymap_verify_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "OBJECT_OT_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
 	RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_ALT, 0)->ptr, "linked", 1);
 	WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list