[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23481] trunk/blender/source/blender/ editors/space_view3d: modal kaymaps for view3d rotate/move/ zoom removed redundant 'view' prefix from these operators.

Campbell Barton ideasman42 at gmail.com
Fri Sep 25 12:24:42 CEST 2009


Revision: 23481
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23481
Author:   campbellbarton
Date:     2009-09-25 12:24:42 +0200 (Fri, 25 Sep 2009)

Log Message:
-----------
modal kaymaps for view3d rotate/move/zoom removed redundant 'view' prefix from these operators.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2009-09-25 09:33:46 UTC (rev 23480)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2009-09-25 10:24:42 UTC (rev 23481)
@@ -239,9 +239,10 @@
 	float ofs[3], obofs[3];
 	float reverse, dist0;
 	float grid, far;
+	short axis_snap; /* view rotate only */
 
 	int origx, origy, oldx, oldy;
-	int origkey;
+	int origkey; /* the key that triggered the operator */
 
 } ViewOpsData;
 
@@ -289,7 +290,7 @@
 	QUATCOPY(vod->oldquat, rv3d->viewquat);
 	vod->origx= vod->oldx= event->x;
 	vod->origy= vod->oldy= event->y;
-	vod->origkey= event->type;
+	vod->origkey= event->type; /* the key that triggered the operator.  */
 
 	/* lookup, we dont pass on v3d to prevent confusement */
 	vod->grid= v3d->grid;
@@ -357,11 +358,52 @@
 {0.0, 0.0, 0.0, 1.0, 0, 0}
 };
 
+enum {
+	VIEW_PASS= 0,
+	VIEW_APPLY,
+	VIEW_CONFIRM
+};
 
-static void viewrotate_apply(ViewOpsData *vod, int x, int y, int ctrl)
+/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
+#define VIEW_MODAL_CONFIRM				1 /* used for all view operations */
+#define VIEWROT_MODAL_AXIS_SNAP_ENABLE	2
+#define VIEWROT_MODAL_AXIS_SNAP_DISABLE	3
+
+
+/* called in transform_ops.c, on each regeneration of keymaps  */
+void viewrotate_modal_keymap(wmWindowManager *wm)
 {
+	static EnumPropertyItem modal_items[] = {
+	{VIEW_MODAL_CONFIRM,	"CONFIRM", 0, "Cancel", ""},
+
+	{VIEWROT_MODAL_AXIS_SNAP_ENABLE,	"AXIS_SNAP_ENABLE", 0, "Enable Axis Snap", ""},
+	{VIEWROT_MODAL_AXIS_SNAP_DISABLE,	"AXIS_SNAP_DISABLE", 0, "Enable Axis Snap", ""},
+
+	{0, NULL, 0, NULL, NULL}};
+
+	wmKeyMap *keymap= WM_modalkeymap_get(wm, "View3D Rotate Modal");
+
+	/* this function is called for each spacetype, only needs to add map once */
+	if(keymap) return;
+
+	keymap= WM_modalkeymap_add(wm, "View3D Rotate Modal", modal_items);
+
+	/* items for modal map */
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+	WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+
+	WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_AXIS_SNAP_ENABLE);
+	WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_AXIS_SNAP_DISABLE);
+
+	/* assign map to operators */
+	WM_modalkeymap_assign(keymap, "VIEW3D_OT_rotate");
+
+}
+
+static void viewrotate_apply(ViewOpsData *vod, int x, int y)
+{
 	RegionView3D *rv3d= vod->rv3d;
-	int use_sel= 0;	/* XXX */
+	int use_sel= U.uiflag & USER_ORBIT_SELECTION;
 
 	rv3d->view= 0; /* need to reset everytime because of view snapping */
 
@@ -462,7 +504,7 @@
 	}
 
 	/* check for view snap */
-	if (ctrl){
+	if (vod->axis_snap){
 		int i;
 		float viewmat[3][3];
 
@@ -496,23 +538,41 @@
 static int viewrotate_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
 	ViewOpsData *vod= op->customdata;
+	short event_code= VIEW_PASS;
 
 	/* execute the events */
-	switch(event->type) {
-		case MOUSEMOVE:
-			viewrotate_apply(vod, event->x, event->y, event->ctrl);
-			break;
+	if(event->type==MOUSEMOVE) {
+		event_code= VIEW_APPLY;
+	}
+	else if(event->type==EVT_MODAL_MAP) {
+		switch (event->val) {
+			case VIEW_MODAL_CONFIRM:
+				event_code= VIEW_CONFIRM;
+				break;
+			case VIEWROT_MODAL_AXIS_SNAP_ENABLE:
+				vod->axis_snap= TRUE;
+				event_code= VIEW_APPLY;
+				break;
+			case VIEWROT_MODAL_AXIS_SNAP_DISABLE:
+				vod->axis_snap= FALSE;
+				event_code= VIEW_APPLY;
+				break;
+		}
+	}
+	else if(event->type==vod->origkey && event->val==KM_RELEASE) {
+		event_code= VIEW_CONFIRM;
+	}
 
-		default:
-			/* origkey may be zero when invoked from a button */
-			if(ELEM3(event->type, ESCKEY, LEFTMOUSE, RIGHTMOUSE) || (event->type==vod->origkey && event->val==KM_RELEASE)) {
-				request_depth_update(CTX_wm_region_view3d(C));
+	if(event_code==VIEW_APPLY) {
+		viewrotate_apply(vod, event->x, event->y);
+	}
+	else if (event_code==VIEW_CONFIRM) {
+		request_depth_update(CTX_wm_region_view3d(C));
 
-				MEM_freeN(vod);
-				op->customdata= NULL;
+		MEM_freeN(vod);
+		op->customdata= NULL;
 
-				return OPERATOR_FINISHED;
-			}
+		return OPERATOR_FINISHED;
 	}
 
 	return OPERATOR_RUNNING_MODAL;
@@ -547,13 +607,13 @@
 }
 
 
-void VIEW3D_OT_viewrotate(wmOperatorType *ot)
+void VIEW3D_OT_rotate(wmOperatorType *ot)
 {
 
 	/* identifiers */
 	ot->name= "Rotate view";
 	ot->description = "Rotate the view.";
-	ot->idname= "VIEW3D_OT_viewrotate";
+	ot->idname= "VIEW3D_OT_rotate";
 
 	/* api callbacks */
 	ot->invoke= viewrotate_invoke;
@@ -566,6 +626,33 @@
 
 /* ************************ viewmove ******************************** */
 
+
+/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
+
+/* called in transform_ops.c, on each regeneration of keymaps  */
+void viewmove_modal_keymap(wmWindowManager *wm)
+{
+	static EnumPropertyItem modal_items[] = {
+	{VIEW_MODAL_CONFIRM,	"CONFIRM", 0, "Confirm", ""},
+
+	{0, NULL, 0, NULL, NULL}};
+
+	wmKeyMap *keymap= WM_modalkeymap_get(wm, "View3D Move Modal");
+
+	/* this function is called for each spacetype, only needs to add map once */
+	if(keymap) return;
+
+	keymap= WM_modalkeymap_add(wm, "View3D Move Modal", modal_items);
+
+	/* items for modal map */
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+	WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+
+	/* assign map to operators */
+	WM_modalkeymap_assign(keymap, "VIEW3D_OT_move");
+}
+
+
 static void viewmove_apply(ViewOpsData *vod, int x, int y)
 {
 	if(vod->rv3d->persp==V3D_CAMOB) {
@@ -596,24 +683,35 @@
 
 static int viewmove_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
+
 	ViewOpsData *vod= op->customdata;
+	short event_code= VIEW_PASS;
 
 	/* execute the events */
-	switch(event->type) {
-		case MOUSEMOVE:
-			viewmove_apply(vod, event->x, event->y);
-			break;
+	if(event->type==MOUSEMOVE) {
+		event_code= VIEW_APPLY;
+	}
+	else if(event->type==EVT_MODAL_MAP) {
+		switch (event->val) {
+			case VIEW_MODAL_CONFIRM:
+				event_code= VIEW_CONFIRM;
+				break;
+		}
+	}
+	else if(event->type==vod->origkey && event->val==KM_RELEASE) {
+		event_code= VIEW_CONFIRM;
+	}
 
-		default:
-			/* origkey may be zero when invoked from a button */
-			if(ELEM3(event->type, ESCKEY, LEFTMOUSE, RIGHTMOUSE) || (event->type==vod->origkey && event->val==KM_RELEASE)) {
-				request_depth_update(CTX_wm_region_view3d(C));
+	if(event_code==VIEW_APPLY) {
+		viewmove_apply(vod, event->x, event->y);
+	}
+	else if (event_code==VIEW_CONFIRM) {
+		request_depth_update(CTX_wm_region_view3d(C));
 
-				MEM_freeN(vod);
-				op->customdata= NULL;
+		MEM_freeN(vod);
+		op->customdata= NULL;
 
-				return OPERATOR_FINISHED;
-			}
+		return OPERATOR_FINISHED;
 	}
 
 	return OPERATOR_RUNNING_MODAL;
@@ -631,13 +729,13 @@
 }
 
 
-void VIEW3D_OT_viewmove(wmOperatorType *ot)
+void VIEW3D_OT_move(wmOperatorType *ot)
 {
 
 	/* identifiers */
 	ot->name= "Move view";
 	ot->description = "Move the view.";
-	ot->idname= "VIEW3D_OT_viewmove";
+	ot->idname= "VIEW3D_OT_move";
 
 	/* api callbacks */
 	ot->invoke= viewmove_invoke;
@@ -650,6 +748,29 @@
 
 /* ************************ viewzoom ******************************** */
 
+/* called in transform_ops.c, on each regeneration of keymaps  */
+void viewzoom_modal_keymap(wmWindowManager *wm)
+{
+	static EnumPropertyItem modal_items[] = {
+	{VIEW_MODAL_CONFIRM,	"CONFIRM", 0, "Confirm", ""},
+
+	{0, NULL, 0, NULL, NULL}};
+
+	wmKeyMap *keymap= WM_modalkeymap_get(wm, "View3D Zoom Modal");
+
+	/* this function is called for each spacetype, only needs to add map once */
+	if(keymap) return;
+
+	keymap= WM_modalkeymap_add(wm, "View3D Zoom Modal", modal_items);
+
+	/* items for modal map */
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+	WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+
+	/* assign map to operators */
+	WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom");
+}
+
 static void view_zoom_mouseloc(ARegion *ar, float dfac, int mx, int my)
 {
 	RegionView3D *rv3d= ar->regiondata;
@@ -758,23 +879,33 @@
 static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
 	ViewOpsData *vod= op->customdata;
+	short event_code= VIEW_PASS;
 
 	/* execute the events */
-	switch(event->type) {
-		case MOUSEMOVE:
-			viewzoom_apply(vod, event->x, event->y);
-			break;
+	if(event->type==MOUSEMOVE) {
+		event_code= VIEW_APPLY;
+	}
+	else if(event->type==EVT_MODAL_MAP) {
+		switch (event->val) {
+			case VIEW_MODAL_CONFIRM:
+				event_code= VIEW_CONFIRM;
+				break;
+		}
+	}
+	else if(event->type==vod->origkey && event->val==KM_RELEASE) {
+		event_code= VIEW_CONFIRM;
+	}
 
-		default:
-			/* origkey may be zero when invoked from a button */
-			if(ELEM3(event->type, ESCKEY, LEFTMOUSE, RIGHTMOUSE) || (event->type==vod->origkey && event->val==KM_RELEASE)) {
-				request_depth_update(CTX_wm_region_view3d(C));
+	if(event_code==VIEW_APPLY) {
+		viewzoom_apply(vod, event->x, event->y);
+	}
+	else if (event_code==VIEW_CONFIRM) {
+		request_depth_update(CTX_wm_region_view3d(C));
 
-				MEM_freeN(vod);
-				op->customdata= NULL;
+		MEM_freeN(vod);
+		op->customdata= NULL;
 
-				return OPERATOR_FINISHED;
-			}
+		return OPERATOR_FINISHED;
 	}
 
 	return OPERATOR_RUNNING_MODAL;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-09-25 09:33:46 UTC (rev 23480)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-09-25 10:24:42 UTC (rev 23481)
@@ -66,8 +66,8 @@
 
 /* view3d_edit.c */
 void VIEW3D_OT_zoom(struct wmOperatorType *ot);
-void VIEW3D_OT_viewmove(struct wmOperatorType *ot);
-void VIEW3D_OT_viewrotate(struct wmOperatorType *ot);
+void VIEW3D_OT_move(struct wmOperatorType *ot);
+void VIEW3D_OT_rotate(struct wmOperatorType *ot);
 void VIEW3D_OT_view_all(struct wmOperatorType *ot);
 void VIEW3D_OT_viewnumpad(struct wmOperatorType *ot);
 void VIEW3D_OT_view_center(struct wmOperatorType *ot);
@@ -137,6 +137,9 @@
 void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
 
 void fly_modal_keymap(struct wmWindowManager *wm);
+void viewrotate_modal_keymap(struct wmWindowManager *wm);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list