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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to